Google மொழிபெயர்ப்பு API ஹேக்கிங்

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


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

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

URL அளவுருக்களின் பொருளும் பெரும்பாலும் தெளிவாகவே உள்ளது.:

விசைஎடுத்துக்காட்டு மதிப்புபொருள்
ஆண்டு3சிறுகுறிப்பு பயன்முறை (திரும்பும் வடிவத்தை பாதிக்கிறது)
வாடிக்கையாளர்te_libவாடிக்கையாளர் தகவல் (மாறுபடும்; கூகிள் மொழிபெயர்ப்பு வலை இடைமுகம் வழியாக இதன் மதிப்பு "webapp" ஆகும்; இது திரும்பும் வடிவம் மற்றும் விகித வரம்பைப் பாதிக்கிறது)
வடிவம்htmlசரம் வடிவம் (HTML குறிச்சொற்களை மொழிபெயர்க்க முக்கியமானது)
v1.0கூகிள் மொழிபெயர்ப்பு பதிப்பு எண்
விசைAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwAPI விசை (கீழே காண்க)
logldvTE_20200210_00நெறிமுறை பதிப்பு
slடிமூல மொழி
tlenஇலக்கு மொழி
spnmtஎம்.எல் மாதிரி
tc1தெரியவில்லை
sr1தெரியவில்லை
tk709408.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

மறைக்குறியீட்டை நீக்குபவர் இங்கே சில குழப்பங்களை விட்டுச் சென்றுள்ளார்; 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 கோப்பை மிக நெருக்கமாக ஆராய்ந்தால் (அதை மீண்டும் செயலிழக்கச் செய்த பிறகு), கடின அமைக்கப்பட்ட உள்ளீட்டைக் காண்கிறோம் 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~25003: 36: 17 ம0%237,78€
24.530.510~25011: 09: 13 ம0%446,46€
49.060.211~25020: 39: 10 ம0%892,90€
99.074.487~100061: 24: 37 ம0%1803,16€
99.072.896~100062: 22: 20 ம0%1803,13€
284.802.766Ø Ø550Σ159: 11: 37 ம0%€ 18 5183.41

குறிப்பு: அனைத்து ஸ்கிரிப்டுகளையும் உள்ளடக்கிய இந்த வலைப்பதிவு இடுகை சோதனை நோக்கங்களுக்காக மட்டுமே எழுதப்பட்டது. உற்பத்தித் திறன் கொண்ட பயன்பாடுகளைப் திரைக்கதை பயன்படுத்த வேண்டாம், அதற்கு பதிலாக அதிகாரி வேலை Google மொழிபெயர்ப்பில் ஏபிஐ .

மீண்டும்