கூகிள் தனது கூகிள் கிளவுட்டின் ஒரு பகுதியாக பயன்பாட்டு அடிப்படையிலான செலவு கட்டமைப்பைக் கொண்ட கூகிள் மொழிபெயர்ப்பு API ஐ வழங்குகிறது. ஒரு ஆவணமின்றி ஏபிஐ உள்ளது, அது ஒரு விசை இல்லாமல் பயன்படுத்தப்படலாம், ஆனால் இது ஒரு சில கோரிக்கைகளுக்குப் பிறகு வேலை செய்ய மறுக்கிறது. Google Chrome இன் வலைத்தள மொழிபெயர்ப்பு செயல்பாட்டைப் பயன்படுத்தும் போது, குறிப்பிடத்தக்க வரம்பில்லாமல் பக்கங்களை மிகச் சிறந்த தரத்தில் மொழிபெயர்க்க முடியும் என்பது குறிப்பிடத்தக்கது.
வெளிப்படையாக மேம்பட்ட nmt மாதிரி ஏற்கனவே இங்கு பயன்படுத்தப்படுகிறது. ஆனால் உள்ளடக்கத்தை மொழிபெயர்க்க Google Chrome எந்த API ஐ உள்நாட்டில் பயன்படுத்துகிறது, மேலும் இந்த API ஐ நேரடியாக அணுக முடியுமா - சர்வர் பக்கத்திலும் கூட? நெட்வொர்க் ட்ராஃபிக்கை பகுப்பாய்வு செய்ய, Wireshark அல்லது Telerik Fiddler போன்ற கருவிகளை நாங்கள் பரிந்துரைக்கிறோம், இது மறைகுறியாக்கப்பட்ட போக்குவரத்தையும் பகுப்பாய்வு செய்யலாம். ஆனால், பக்கங்களை இலவசமாக மொழிபெயர்க்கும்போது அனுப்பும் கோரிக்கைகளையும் Chrome வழங்குகிறது: அவற்றை Chrome DevTools மூலம் எளிதாகப் பார்க்க முடியும்.:

நீங்கள் ஒரு மொழிபெயர்ப்பு மேற்கொண்டால், பின்னர் வழியாக https://translate.googleapis.com முக்கியம் போஸ்ட் கோரிக்கை பிடிக்க "நகல்> சுருட்டை (பாஷ்) நகலாக" என்பது போன்ற கருவி அதை இயக்க போஸ்ட்மேன் , எடுத்துக்காட்டாக, இந்தக் கோரிக்கையை நீங்கள் மீண்டும் எந்த பிரச்சனையும் இல்லாமல் அனுப்ப முடியும்:

URL அளவுருக்களின் பொருளும் பெரும்பாலும் தெளிவாகவே உள்ளது.:
| விசை | எடுத்துக்காட்டு மதிப்பு | பொருள் |
| ஆண்டு | 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 | தெரியவில்லை |
சில கோரிக்கை தலைப்புகளும் அமைக்கப்பட்டுள்ளன - ஆனால் இவை பெரும்பாலும் புறக்கணிக்கப்படலாம். பயனர் முகவர் உட்பட அனைத்து தலைப்புகளையும் கைமுறையாக தேர்வுநீக்கம் செய்த பிறகு, சிறப்பு எழுத்துக்களை உள்ளிடும்போது ஒரு குறியீட்டு சிக்கல் கண்டறியப்படுகிறது (இங்கே " ஹலோ வேர்ல்ட் " மொழிபெயர்க்கும்போது):

நீங்கள் பயனர் முகவரை மீண்டும் செயல்படுத்தினால் (அது பொதுவாக எந்தத் தீங்கும் செய்யாது), ஏபிஐ யுடிஎஃப் -8 குறியிடப்பட்ட எழுத்துக்களை வழங்குகிறது:

கூகிள் குரோமிற்கு வெளியே இந்த API-ஐப் பயன்படுத்துவதற்கான அனைத்து தகவல்களையும் பெற்று, நமது இலக்கை இப்போது அடைந்துவிட்டோமா? இருப்பினும், நீங்கள் மொழிபெயர்க்கப்பட வேண்டிய சரத்தை (POST கோரிக்கையின் தரவுப் புலம் q ) உதாரணமாக, "Hello World" என்பதிலிருந்து "Hello World ! " என்று மாற்றினால், உங்களுக்கு ஒரு பிழைச் செய்தி தோன்றும்.:

இப்போது, கூகிள் குரோமில் உள்ள இணையதள மொழிபெயர்ப்புச் செயல்பாட்டைப் பயன்படுத்தி, இந்த மாற்றியமைக்கப்பட்ட சரத்திற்கு மற்றொரு மொழிபெயர்ப்பைச் செய்கிறோம். அப்போது, q என்ற அளவுருவுடன், tk என்ற அளவுருவும் மாறியிருப்பதைக் காண்கிறோம் (மற்ற அனைத்து அளவுருக்களும் அப்படியே உள்ளன).:

வெளிப்படையாக, இது ஒரு டோக்கன் ஆகும், இது சரத்தை சார்ந்துள்ளது, இதன் கட்டமைப்பைப் பார்ப்பது எளிதல்ல. வலைத்தள மொழிபெயர்ப்பை நீங்கள் தொடங்கும்போது, பின்வரும் கோப்புகள் ஏற்றப்படும்:
- 1 CSS கோப்பு: translateelement.css
- 4 கிராபிக்ஸ்: translate_24dp.png (2x), gen204 (2x)
- 2 JS கோப்புகள்: main_de.js , element_main.js
இரண்டு ஜாவாஸ்கிரிப்ட் கோப்புகள் தெளிவற்றவை மற்றும் குறைக்கப்படுகின்றன. JS Nice மற்றும் de4js போன்ற கருவிகள் இப்போது இந்த கோப்புகளை மேலும் படிக்க வைக்க உதவுகின்றன. அவற்றை நேரலையில் பிழைத்திருத்த, Chrome நீட்டிப்பு கோரிக்கையை பரிந்துரைக்கிறோம் , இது தொலைதூர கோப்புகளை உள்நாட்டில் பறக்கச் செய்கிறது:

இப்போது நாம் குறியீட்டை பிழைத்திருத்தலாம் ( CORS முதலில் உள்ளூர் சேவையகத்தில் செயல்படுத்தப்பட வேண்டும்). டோக்கனை உருவாக்குவதற்கான தொடர்புடைய குறியீடு பிரிவு இந்த பிரிவில் உள்ள element_main.js கோப்பில் மறைக்கப்பட்டுள்ளதாக தெரிகிறது:
b7739bf50b2edcf636c43a8f8910def9
இங்கே உரை சில பிட் ஷிப்டுகளின் உதவியுடன் ஹேஷ் செய்யப்படுகிறது. ஆனால் துரதிருஷ்டவசமாக நாம் இன்னும் புதிர் ஒரு துண்டு காணப்படவில்லை: வாதம் ஒரு கூடுதலாக (உரை மொழிபெயர்க்க வேண்டும் உள்ளது), மற்றொரு வாதம் ஆ செயல்பாடு Bp () அனுப்பி வைக்கப்படுகிறது - அவ்வப்போது மாற்றம் தெரிகிறது என்று விதை ஒரு வகையான என்று மேலும் அடங்கும் ஹாஷிங்கில் பாய்கிறது. ஆனால் அவர் எங்கிருந்து வருகிறார்? பிபி () இன் செயல்பாட்டு அழைப்பிற்கு நாம் சென்றால், பின்வரும் குறியீடு பகுதியைக் காணலாம்:
b7739bf50b2edcf636c43a8f8910def9
Hq செயல்பாடு பின்வருமாறு முன்பே அறிவிக்கப்படுகிறது:
b7739bf50b2edcf636c43a8f8910def9
Deobfuscater இங்கே சில குப்பைகளை விட்டுவிட்டார்; String.fromCharCode('...') ஐ அந்தந்த சரங்களுடன் மாற்றிய பின், வழக்கற்றுப் போன a() ஐ அகற்றி, செயல்பாடு அழைப்புகளை [c(), c()] ஒன்றாக இணைத்த பிறகு, நமக்கு கிடைக்கும்:
b7739bf50b2edcf636c43a8f8910def9
அல்லது இன்னும் எளிதானது:
b7739bf50b2edcf636c43a8f8910def9
Yq செயல்பாடு முன்பு என வரையறுக்கப்பட்டது:
b7739bf50b2edcf636c43a8f8910def9
எனவே விதையானது google.translate._const._ctkk என்ற உலகளாவிய பொருளில் இருப்பது போல் தெரிகிறது, இது இயக்க நேரத்தில் கிடைக்கும். ஆனால் அது எங்கே வைக்கப்பட்டுள்ளது? குறைந்த பட்சம் இது மற்ற, முன்பு ஏற்றப்பட்ட JS கோப்பில் தொடக்கத்தில் கிடைக்கும் main_de.js . தொடக்கத்தில் பின்வருவனவற்றைச் சேர்க்கிறோம்:
b7739bf50b2edcf636c43a8f8910def9
கன்சோலில் நாம் உண்மையில் தற்போதைய விதை பெறுகிறோம்:

இது கூகிள் குரோம் நிறுவனத்தை விட்டுச்செல்கிறது, இது விதைகளை கடைசி விருப்பமாக வழங்குகிறது. அதிர்ஷ்டவசமாக, அதன் மூல குறியீடு (மொழிபெயர்ப்பு கூறு உட்பட குரோமியம்) திறந்த மூலமாகும், எனவே பொதுவில் கிடைக்கிறது. நாங்கள் களஞ்சியத்தை உள்ளூரில் இழுத்து, TranslateScript :: GetTranslateScriptURL செயல்பாட்டை translate_script.cc கோப்பில் கூறுகள் / மொழிபெயர்ப்பு / கோர் / உலாவி கோப்புறையில் காணலாம்:
b7739bf50b2edcf636c43a8f8910def9
URL உடன் மாறி அதே கோப்பில் கடினமாக வரையறுக்கப்பட்டுள்ளது:
b7739bf50b2edcf636c43a8f8910def9
நாம் இப்போது element.js கோப்பை இன்னும் நெருக்கமாக ஆராய்ந்தால் (மேலும் deobfuscation பிறகு), கடின செட் உள்ளீடு c._ctkk - google.translate பொருளும் அதற்கேற்ப அமைக்கப்பட்டு, தொடர்புடைய அனைத்து சொத்துக்களையும் ஏற்றுவது (நாம் முன்பே கண்டுபிடித்துள்ளோம்) தூண்டப்படுகிறது.:
b7739bf50b2edcf636c43a8f8910def9
இப்போது அளவுரு விசை பரிசீலிக்க உள்ளது (AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw மதிப்புடன்). இது பொதுவான உலாவி API விசையாகத் தெரிகிறது (இது சில Google முடிவுகளிலும் காணலாம்). அடைவை கூறுகள் கோப்பு translate_url_util.cc குரோமியத்தை அமைக்கவும் / மொழிபெயர் / கோர் / உலாவி:
b7739bf50b2edcf636c43a8f8910def9
விசையானது போலி மதிப்பிலிருந்து google_apis / google_api_keys.cc இல் உருவாக்கப்படுகிறது:
b7739bf50b2edcf636c43a8f8910def9
இருப்பினும், இந்த முக்கிய அளவுரு இல்லாமலேயே API அழைப்புகள் சிறப்பாகச் செயல்படுகின்றன என்று சோதனைகள் காட்டுகின்றன. இப்போது API-ஐப் பரிசோதிக்கும்போது, வெற்றிகரமான அழைப்புகளில் 200 என்ற நிலைக் குறியீடு காட்டப்படுகிறது. ஒரு வரம்பு எட்டப்பட்டால், " POST கோரிக்கைகளுக்கு Content-length ஹெடர் தேவை " என்ற செய்தியுடன் 411 என்ற நிலைக் குறியீடு காட்டப்படும். எனவே, இந்த ஹெடரையும் சேர்ப்பது பரிந்துரைக்கப்படுகிறது (இது போஸ்ட்மேனில் தானாகவே ஒரு தற்காலிக ஹெடராக அமைக்கப்படுகிறது).
ஒரு கோரிக்கையில் பல வாக்கியங்கள் இருக்கும்போது மொழிபெயர்க்கப்பட்ட சரங்களின் திரும்ப வடிவம் அசாதாரணமானது. தனிப்பட்ட வாக்கியங்கள் i- / b-HTML குறிச்சொற்களால் இணைக்கப்பட்டுள்ளன:

மேலும், கூகிள் குரோம் முழுமையான HTML ஐ API க்கு அனுப்பாது, ஆனால் கோரிக்கையில் href போன்ற பண்புக்கூறு மதிப்புகளைச் சேமிக்கிறது (அதற்கு பதிலாக குறியீடுகளை அமைக்கிறது, இதனால் குறிச்சொற்களை பின்னர் கிளையன்ட் பக்கத்தில் ஒதுக்க முடியும்):

POST விசை கிளையண்டின் மதிப்பை te_lib (Google Chrome) இலிருந்து மாற்றினால் வெப்ஆப்பில் ( கூகிள் மொழிபெயர்ப்பு வலைத்தளம் ), இறுதி மொழிபெயர்க்கப்பட்ட சரம் கிடைக்கும்:

(: Te_lib எந்த விகித வரையறை உள்ளது, இந்த வலைப்பயன்பாடானது கொண்டு 40,000 எழுத்துகள் பிறகு அடையும் ஒப்பிட்டுப்) இந்தச் சிக்கலைத் நீங்கள் மிகவும் விகிதம் வழியாக te_lib விட கட்டுப்படுத்தும் ஒரு ரன் வாய்ப்புகள் அதிகம் உள்ளன என்று. எனவே, Chrome எவ்வாறு முடிவை பாகுபடுத்துகிறது என்பதை நாம் கூர்ந்து கவனிக்க வேண்டும். இதை இங்கே element_main.js இல் காண்போம்:
b7739bf50b2edcf636c43a8f8910def9
நீங்கள் முழு HTML குறியீட்டையும் API க்கு அனுப்பினால், அது மொழிபெயர்க்கப்பட்ட பதிலில் பண்புகளை விட்டுவிடும். எனவே நாம் முழு பாகுபடுத்தும் நடத்தையைப் பின்பற்ற வேண்டியதில்லை, ஆனால் பதிலில் இருந்து இறுதி, மொழிபெயர்க்கப்பட்ட சரத்தை மட்டுமே பிரித்தெடுக்கிறோம். இதைச் செய்ய, நாங்கள் ஒரு சிறிய HTML குறிச்சொல் பாகுபடுத்தி உருவாக்குகிறோம், அது அவற்றின் உள்ளடக்கம் உட்பட வெளிப்புற <i> குறிச்சொற்களை நிராகரித்து, வெளிப்புற <b> குறிச்சொற்களை அகற்றும். இந்த அறிவைக் கொண்டு ( இசையமைப்பாளருடன் சார்புகளை நிறுவிய பிறகு fzaninotto / faker vielhuber / stringhelper தேவை ) இப்போது நாம் மொழிபெயர்ப்பு API இன் சேவையகப் பதிப்பை உருவாக்கலாம்.:
b7739bf50b2edcf636c43a8f8910def9
வெவ்வேறு அலைவரிசைகள் மற்றும் ஐபி முகவரிகளுடன் ஐந்து வெவ்வேறு கணினிகளில் மேற்கொள்ளப்பட்ட ஆரம்ப சோதனையின் முடிவுகள் கீழே உள்ளன.:
| தன்மை | ஒரு கோரிக்கையின் எழுத்துக்கள் | காலம் | பிழை வீதம் | அதிகாரப்பூர்வ API வழியாக செலவு |
| 13.064.662 | ~250 | 03: 36: 17 ம | 0% | 237,78 € |
| 24.530.510 | ~250 | 11: 09: 13 ம | 0% | 446,46 € |
| 49.060.211 | ~250 | 20: 39: 10 ம | 0% | 892,90 € |
| 99.074.487 | ~1000 | 61: 24: 37 ம | 0% | 1803,16 € |
| 99.072.896 | ~1000 | 62: 22: 20 ம | 0% | 1803,13 € |
| 284.802.766 | Ø Ø550 | Σ159: 11: 37 ம | 0% | €5183.41 |
குறிப்பு: அனைத்து ஸ்கிரிப்டுகளையும் உள்ளடக்கிய இந்த வலைப்பதிவு இடுகை சோதனை நோக்கங்களுக்காக மட்டுமே எழுதப்பட்டது. உற்பத்தித் திறன் கொண்ட பயன்பாடுகளைப் திரைக்கதை பயன்படுத்த வேண்டாம், அதற்கு பதிலாக அதிகாரி வேலை Google மொழிபெயர்ப்பில் ஏபிஐ .