ហ្គូហ្គលផ្តល់ជូននូវ សេវាកម្មបកប្រែហ្គូហ្គល API ជាមួយ រចនាសម្ព័ន្ធចំណាយ ផ្អែកលើការប្រើប្រាស់ដែលជាផ្នែកមួយនៃហ្គូហ្គលពពករបស់វា។ ក៏មាន API គ្មានឯកសារ ដែលអាចត្រូវបានប្រើ ដោយគ្មានកូនសោ ប៉ុន្តែដែលបដិសេធមិនដំណើរការបន្ទាប់ពីការស្នើសុំពីរបីដង។ នៅពេលប្រើ មុខងារបកប្រែគេហទំព័រ របស់ Google Chrome វាអាចកត់សម្គាល់បានថាទំព័រនានាអាចត្រូវបានបកប្រែប្រកបដោយគុណភាពល្អដោយគ្មានដែនកំណត់គួរឱ្យកត់សម្គាល់។
ជាក់ស្តែង ម៉ូដែល nmt ជឿនលឿន កំពុង ត្រូវបានប្រើនៅទីនេះ។ ប៉ុន្តែតើ API មួយណាដែល Google Chrome ប្រើនៅខាងក្នុងដើម្បីបកប្រែមាតិកាហើយតើ API នេះអាចត្រូវបានដោះស្រាយដោយផ្ទាល់សូម្បីតែនៅផ្នែកខាងម៉ាស៊ីនមេក៏ដោយ? ដើម្បីវិភាគចរាចរណ៍បណ្តាញឧបករណ៍ដូចជា Wireshark ឬ Telerik Fiddler ដែលអាចវិភាគចរាចរណ៍បានអ៊ិនគ្រីបត្រូវបានណែនាំ។ ប៉ុន្តែ Chrome ថែមទាំងផ្តល់ជូននូវសំណើដែលវាផ្ញើសម្រាប់ការបកប្រែទំព័រដោយមិន គិតថ្លៃ : ពួកគេអាចត្រូវបានមើលយ៉ាងងាយស្រួលដោយប្រើ Chrome DevTools:
ប្រសិនបើអ្នកអនុវត្តការបកប្រែបន្ទាប់មកចាប់យកសំណើ POST ដ៏សំខាន់ដើម្បី https://translate.googleapis.com តាមរយៈ "ចម្លង> ចម្លងជា cURL (ប៊ីច)" ហើយប្រតិបត្តិវានៅក្នុងឧបករណ៍ដូចជា Postman ឧទាហរណ៍អ្នកអាចផ្ញើសំណើម្តងទៀតដោយគ្មានបញ្ហា។:
អត្ថន័យនៃប៉ារ៉ាម៉ែត្រ URL ក៏ជាក់ស្តែងផងដែរ:
កូនសោ | តម្លៃឧទាហរណ៍ | អត្ថន័យ |
anno | 3 | របៀបចំណារពន្យល់ (ប៉ះពាល់ដល់ទម្រង់ត្រឡប់មកវិញ) |
អតិថិជន | te_lib | ព័ត៌មានរបស់អតិថិជន (ខុសគ្នាតម្លៃគឺ "webapp" តាមរយៈចំណុចប្រទាក់គេហទំព័របកប្រែហ្គូហ្គោលមានឥទ្ធិពលលើទំរង់ត្រឡប់មកវិញនិងការកំណត់អត្រា) |
ទ្រង់ទ្រាយ | html | ទ្រង់ទ្រាយខ្សែអក្សរ (សំខាន់សម្រាប់ការបកប្រែស្លាក HTML) |
v | 1.0 | លេខកំណែហ្គូហ្គលបកប្រែ |
កូនសោ | AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw | លេខកូដ API (សូមមើលខាងក្រោម) |
logld | vTE_20200210_00 | កំណែពិធីសារ |
sl | ដឺ | ភាសាប្រភព |
tl | en | ភាសាគោលដៅ |
sp | nmt | ម៉ូដែលអិល |
tc | 1 | មិនស្គាល់ |
sr | 1 | មិនស្គាល់ |
tk | 709408.812158 | សញ្ញាតំណាង (សូមមើលខាងក្រោម) |
ម៉ូត | 1 | មិនស្គាល់ |
បឋមកថាសំណើមួយចំនួនក៏ត្រូវបានកំណត់ផងដែរ - ប៉ុន្តែភាគច្រើនទាំងនេះអាចត្រូវបានគេមិនអើពើ។ បន្ទាប់ពីដកការជ្រើសរើសបឋមកថាទាំងអស់ដោយដៃរួមទាំងអ្នក ប្រើភ្នាក់ងារ បញ្ហាអ៊ិនកូដត្រូវបានរកឃើញនៅពេលបញ្ចូលតួអក្សរពិសេស (នៅទីនេះនៅពេលបកប្រែ " ហេឡូពិភពលោក "):
ប្រសិនបើអ្នកធ្វើឱ្យភ្នាក់ងារអ្នកប្រើសកម្មឡើងវិញ (ដែលជាទូទៅមិនបង្កអន្តរាយណាមួយ) API នឹងបញ្ជូនតួអក្សរដែលបានអ៊ិនកូដ UTF-8 ចេញ។:
តើយើងនៅទីនោះហើយតើយើងមានព័ត៌មានទាំងអស់ដើម្បីប្រើ API នេះក្រៅពី Google Chrome ទេ? ប្រសិនបើអ្នកប្តូរខ្សែអក្សរដែលត្រូវបកប្រែ (វាលទិន្នន័យ q នៃ ការស្នើសុំរបស់ POST) ពីឧទាហរណ៍“ Hello world” ទៅ“ Hello world ! “ យើងទទួលបានសារកំហុសមួយ:
ឥឡូវនេះយើងបកប្រែការកែប្រែនេះម្តងទៀតនៅក្នុង Google Chrome ដោយប្រើមុខងារបកប្រែគេហទំព័រហើយឃើញថាបន្ថែមលើប៉ារ៉ាម៉ែត្រ q ប៉ារ៉ាម៉ែត្រ tk ក៏បាន ផ្លាស់ប្តូរ ផងដែរ (ប៉ារ៉ាម៉ែត្រផ្សេងទៀតនៅតែដដែល):
ជាក់ស្តែងវាគឺជាថូខឹនដែលពឹងផ្អែកលើខ្សែអក្សររចនាសម្ព័នដែលមិនងាយបង្ហាញឱ្យឃើញ។ នៅពេលអ្នកចាប់ផ្តើមបកប្រែគេហទំព័រឯកសារខាងក្រោមត្រូវបានផ្ទុក:
- ឯកសារ CSS ១៖ translateelement.css
- ៤ ក្រាហ្វិចៈ translate_24dp.png (២ គុណ), gen204 (២ ដង)
- 2 ឯកសារ JS: main_de.js , element_main.js
ឯកសារ JavaScript ពីរត្រូវបានបំភាន់និងបង្រួមអប្បបរមា។ ឧបករណ៍ដូចជា JS Nice និង de4js ឥឡូវនេះកំពុងជួយយើងធ្វើឱ្យឯកសារទាំងនេះអាចអានបានកាន់តែច្រើន។ ដើម្បីបំបាត់កំហុសពួកវាបន្តផ្ទាល់ យើង សូមណែនាំកម្មវិធីបន្ថែមផ្នែកបន្ថែមរបស់ Chrome ដែលភ្ជាប់ទៅនឹងរូងក្រោមដីនូវឯកសារពីចម្ងាយ:
ឥឡូវនេះយើងអាចបំបាត់កំហុសកូដ ( CORS ត្រូវតែត្រូវបានធ្វើឱ្យសកម្មនៅលើម៉ាស៊ីនមេមូលដ្ឋាន) ។ ផ្នែកកូដពាក់ព័ន្ធសម្រាប់ការបង្កើតថូខឹនហាក់ដូចជាត្រូវបានលាក់នៅក្នុងឯកសារ element_main.js នៅក្នុងផ្នែកនេះ:
b7739bf50b2edcf636c43a8f8910def9
នៅទីនេះអត្ថបទត្រូវបានលាងដោយជំនួយពីការ ផ្លាស់ប្តូរបន្តិចបន្តួច ។ ប៉ុន្តែជាអកុសលយើងនៅតែបាត់បំណែកមួយនៃល្បែងផ្គុំរូប: បន្ថែមលើអាគុយម៉ង់ a (ដែលជាអត្ថបទដែលត្រូវបកប្រែ) អាគុយម៉ង់មួយទៀត ខ ត្រូវបានបញ្ជូនទៅមុខងារប៊ីភី () - ប្រភេទនៃគ្រាប់ពូជដែលហាក់ដូចជាផ្លាស់ប្តូរពីមួយពេលទៅមួយហើយនោះក៏រួមបញ្ចូលផងដែរ។ ហូរចូលទៅក្នុង hashing ។ ប៉ុន្តែតើគាត់មកពីណា? ប្រសិនបើយើងលោតទៅមុខងារហៅរបស់ប៊ីភី () យើងរកឃើញផ្នែកកូដដូចខាងក្រោម:
b7739bf50b2edcf636c43a8f8910def9
មុខងារ Hq ត្រូវបានប្រកាសជាមុនដូចខាងក្រោម:
b7739bf50b2edcf636c43a8f8910def9
Deobfuscater បានទុកសំរាមខ្លះនៅទីនេះ។ បន្ទាប់ពីយើងបានជំនួស String.fromCharCode ('... ') ដោយខ្សែអក្សររៀងៗខ្លួនយកអាដែលលែងប្រើ () ចេញ ហើយបញ្ចូលគ្នានូវមុខងារហៅថា [c (), c ()] លទ្ធផលគឺ:
b7739bf50b2edcf636c43a8f8910def9
ឬសូម្បីតែងាយស្រួលជាង:
b7739bf50b2edcf636c43a8f8910def9
មុខងារ yq ត្រូវបានកំណត់ពីមុន:
b7739bf50b2edcf636c43a8f8910def9
គ្រាប់ពូជនេះហាក់ដូចជានៅក្នុងវត្ថុសកល google.translate._const._ctkk ដែលមាននៅពេលដំណើរការ។ ប៉ុន្តែវាត្រូវបានកំណត់នៅកន្លែងណា? មួយវិញទៀត ឯកសារ JS ដែលបានផ្ទុកពីមុនគឺ main_de.js យ៉ាងហោចណាស់វាក៏មាននៅដើមដែរ។ យើងបន្ថែមដូចខាងក្រោមនៅដើម:
b7739bf50b2edcf636c43a8f8910def9
នៅក្នុងកុងសូលយើងពិតជាទទួលបានគ្រាប់ពូជបច្ចុប្បន្ន:
នេះទុកឱ្យ Google Chrome ដោយខ្លួនឯងដែលជាក់ស្តែងផ្តល់គ្រាប់ពូជជាជម្រើសចុងក្រោយ។ ជាសំណាងល្អកូដប្រភពរបស់វា (Chromium រួមទាំងសមាសភាគបកប្រែ) គឺជាប្រភពបើកចំហហើយដូច្នេះអាចប្រើបានជាសាធារណៈ។ យើងទាញ ឃ្លាំង ក្នុងមូលដ្ឋានហើយស្វែងរកការហៅមុខងារ TranslateScript :: GetTranslateScriptURL នៅក្នុងឯកសារ translate_script.cc នៅក្នុង សមាសធាតុ / បកប្រែ / ស្នូល / ថតឯកសារ កម្មវិធីរុករក:
b7739bf50b2edcf636c43a8f8910def9
អថេរជាមួយ URL គឺពិបាកកំណត់ក្នុងឯកសារតែមួយ:
b7739bf50b2edcf636c43a8f8910def9
ប្រសិនបើឥឡូវនេះយើង ពិនិត្យមើល ឯកសារ element.js កាន់តែ ជិតស្និទ្ធ (បន្ទាប់ពីការបដិសេធម្តងទៀត) យើងរកឃើញថាធាតុដែលបានកំណត់យ៉ាងលំបាក c._ctkk - វត្ថុ google.translate ត្រូវបានកំណត់យ៉ាងត្រឹមត្រូវហើយការផ្ទុកទ្រព្យសម្បត្តិដែលពាក់ព័ន្ធទាំងអស់ (ដែលយើងបានរកឃើញមុន) ត្រូវបានកេះ។:
b7739bf50b2edcf636c43a8f8910def9
ឥឡូវ កូនសោ ប៉ារ៉ាម៉ែត្រនៅតែត្រូវពិចារណា (ជាមួយតម្លៃ AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw) ។ នោះហាក់ដូចជាគ្រាប់ចុច API នៃកម្មវិធីរុករកទូទៅ (ដែលអាចរកឃើញនៅក្នុង លទ្ធផល មួយចំនួនរបស់ Google ផងដែរ) ។ វាត្រូវបានកំណត់នៅក្នុង Chromium នៅក្នុងឯកសារ បកប្រែ_url_util.cc នៅក្នុង សមាសធាតុ ថតឯកសារ / បកប្រែ / ស្នូល / កម្មវិធីរុករក:
b7739bf50b2edcf636c43a8f8910def9
លេខ កូដ ត្រូវបានបង្កើតនៅក្នុង google_apis / google_api_keys.cc ពីតម្លៃអត់ចេះសោះ:
b7739bf50b2edcf636c43a8f8910def9
ទោះយ៉ាងណាក៏ដោយការធ្វើតេស្តបង្ហាញថាការហៅទូរស័ព្ទ API ដំណើរការដូចគ្នាដោយគ្មានប៉ារ៉ាម៉ែត្រសំខាន់នេះ។ ប្រសិនបើអ្នកសាកល្បងប្រើ API អ្នកនឹងទទួលបានលេខកូដស្ថានភាព ២០០ ត្រឡប់មកវិញប្រសិនបើអ្នកជោគជ័យ។ ប្រសិនបើអ្នករត់ក្នុងដែនកំណត់អ្នកនឹងទទួលបានលេខកូដស្ថានភាព ៤១១ ត្រឡប់មកវិញ ជាមួយនឹងសារថា " សំណើរបស់ POST ត្រូវការបឋមកថាប្រវែងមាតិកា " ។ ដូច្នេះគួរតែ បញ្ចូលបឋមកថានេះ (ដែលត្រូវ បានកំណត់ជា បឋមកថាបណ្តោះអាសន្ន ដោយស្វ័យប្រវត្តិនៅប្រូមេន)
ទ្រង់ទ្រាយត្រឡប់នៃខ្សែអក្សរដែលបានបកប្រែគឺមិនធម្មតាទេនៅពេលមានប្រយោគជាច្រើននៅក្នុងសំណូមពរមួយ។ ប្រយោគនីមួយៗត្រូវបានព័ទ្ធជុំវិញដោយស្លាក i- / b-HTML:
ដូចគ្នានេះផងដែរ Google Chrome មិនផ្ញើ HTML ទាំងមូលទៅ API ទេប៉ុន្តែរក្សាទុកតម្លៃគុណលក្ខណៈដូចជា href នៅក្នុងសំណើ (ហើយជំនួសកំណត់ការចង្អុលបង្ហាញដើម្បីឱ្យស្លាកអាចត្រូវបានកំណត់នៅខាងអតិថិជន):
ប្រសិនបើអ្នកប្តូរតម្លៃ អតិថិជន សំខាន់ POST ពី te_lib (Google Chrome) នៅលើ webapp ( គេហទំព័របកប្រែហ្គូហ្គល ) អ្នកនឹងទទួលបានឃ្លាចុងក្រោយដែលត្រូវបានបកប្រែ:
បញ្ហាគឺថាអ្នកងាយនឹងឈានដល់ការកំណត់អត្រាជាងតាមរយៈ te_lib (សម្រាប់ការប្រៀប ធៀបៈ ជាមួយនឹង webapp នេះត្រូវបានទៅដល់បន្ទាប់ពី ៤០ ០០០ ដែលមាន te_lib មិនមានការកំណត់អត្រាទេ) ។ ដូច្នេះយើងត្រូវពិនិត្យឱ្យបានដិតដល់អំពីរបៀបដែល Chrome វិភាគលទ្ធផល។ យើងនឹងរកឃើញវានៅទីនេះក្នុង element_main.js:
b7739bf50b2edcf636c43a8f8910def9
ប្រសិនបើអ្នកផ្ញើកូដ HTML ទាំងមូលទៅ API វាទុកគុណលក្ខណៈនៅក្នុងការឆ្លើយតបដែលបានបកប្រែ។ ដូច្នេះហើយ យើងមិនចាំបាច់យកតម្រាប់តាមឥរិយាបថញែកទាំងមូលនោះទេ ប៉ុន្តែគ្រាន់តែទាញយកខ្សែអក្សរដែលបានបកប្រែចុងក្រោយចេញពីការឆ្លើយតបប៉ុណ្ណោះ។ ដើម្បីធ្វើដូច្នេះ យើងបង្កើតកម្មវិធីញែកស្លាក HTML តូចមួយដែលលុបចោលស្លាក <i> ខាងក្រៅបំផុត រួមទាំងមាតិការបស់វា ហើយលុបស្លាក <b> ខាងក្រៅបំផុត។ ជាមួយនឹងចំណេះដឹងនេះ យើងអាចឥឡូវនេះ (បន្ទាប់ពីការដំឡើងភាពអាស្រ័យជាមួយ កម្មវិធីតែងតម្រូវឱ្យ fzaninotto / faker vielhuber / stringhelper ) បង្កើតកំណែផ្នែកខាងម៉ាស៊ីនមេនៃ API បកប្រែ:
b7739bf50b2edcf636c43a8f8910def9
ខាងក្រោមនេះគឺជាលទ្ធផលនៃការសាកល្បងដំបូងដែលត្រូវបានអនុវត្តលើប្រព័ន្ធចំនួនប្រាំផ្សេងគ្នាដែលមានបណ្តាញបញ្ជូនខុសៗគ្នានិងអាសយដ្ឋាន IP:
តួអក្សរ | តួអក្សរក្នុងមួយសំណើ | រយៈពេល | អត្រាកំហុស | ចំណាយតាមរយៈ API ផ្លូវការ |
13.064.662 | ~250 | ០៣: ៣៦: ១៧h | 0% | 237,78€ |
24.530.510 | ~250 | ១១: ០៩: ១៣h | 0% | 446,46€ |
49.060.211 | ~250 | ២០: ៣៩: ១០ ម៉ោង | 0% | 892,90€ |
99.074.487 | ~1000 | ៦១: ២៤: ៣៧ ហ | 0% | 1803,16€ |
99.072.896 | ~1000 | ៦២: ២២: ២០ ម៉ោង | 0% | 1803,13€ |
Σ ២៨៨.៨០២.៧៦៦ | ~ Ø៥៥០ | Σ ១៥៩: ១១: ៣៧h | 0% | Σ€ ៥១៨៣.៤១ |
សម្គាល់ៈ ការបង្ហោះប្លក់នេះរួមទាំងស្គ្រីបទាំងអស់ត្រូវបានសរសេរសម្រាប់គោលបំណងតេស្តតែប៉ុណ្ណោះ។ កុំប្រើស្គ្រីបសម្រាប់ការប្រើប្រាស់ផលិតភាពជំនួសឱ្យធ្វើការជាមួយមន្ត្រី API របស់ Google បកប្រែ ។