Google Translation API Hacking

Google Булутунун бир бөлүгү катары, Google котормосу API колдонууга негизделген чыгым структурасы менен сунуштайт. Ачкычсыз колдонула турган , бирок бир нече өтүнүчтөн кийин иштөөдөн баш тарткан документсиз API бар. Google Chrome веб-сайтты которуу функциясын колдонууда, баракчаларды байкалбастан, абдан жакшы сапатта которууга болот.


Бул жерде өнүккөн nmt модели колдонулуп жаткан окшойт . Бирок Google Chrome мазмунун которуу үчүн кайсы API колдонот жана бул API түздөн-түз, атүгүл сервер тарабында дагы чечилиши мүмкүнбү? Тармактык трафикти анализдөө үчүн Wireshark же Telerik Fiddler сыяктуу шаймандар сунушталат, алар шифрленген трафикти талдай алышат. Бирок Chrome баракчанын котормосуна жиберген суранычтарын акысыз берет : Аларды Chrome DevTools аркылуу оңой эле көрө аласыз:

Эгерде сиз котормо жүргүзсөңүз, анда POST сурамын https://translate.googleapis.com дарегине "Көчүрүү> cURL (bash) түрүндө көчүрүп алуу" "аркылуу келип, мисалы, Почтальон сыяктуу куралда аткарсаңыз, сурамды кайрадан көйгөйсүз жөнөтсөңүз болот.:

URL параметрлеринин мааниси да көп жагынан айдан ачык:

АчкычМисал маанисиМааниси
anno3Аннотация режими (кайтаруу форматына таасир этет)
кардарte_libКардар жөнүндө маалымат (ар кандай, мааниси "Котормочунун веб интерфейси аркылуу" webapp "болуп саналат; кайтарым форматына жана чендин чектелишине таасирин тийгизет)
форматhtmlString форматы (HTML тэгдерин которуу үчүн маанилүү)
v1.0Google Котормочунун версия номери
ачкычAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwAPI ачкычы (төмөндө караңыз)
logldvTE_20200210_00Протоколдун версиясы
sldeБулак тили
тлenМаксаттуу тил
spnmtML модели
tc1белгисиз
sr1белгисиз
tk709408.812158Токен (төмөндө караңыз)
Fashion1белгисиз

Айрым өтүнүч баштары дагы коюлган - бирок аларды көбүнчө четке кагууга болот. Колдонуучунун агентинин башын кошо алганда, бардык баш аталыштарды кол менен алып салгандан кийин, атайын белгилерди киргизүүдө коддоо көйгөйү табылат (бул жерде " Hello World " которулганда):

Эгер колдонуучу агентин жандандырсаңыз (бул жалпысынан эч кандай зыян келтирбейт), API UTF-8 коддолгон белгилерди берет:

Биз буга чейин барбызбы жана бул APIди Google Chromeдон тышкары колдонууга толук маалыматыбыз барбы? Эгерде сиз которула турган белгилер сабын өзгөрсөңүз (POST сурамынын маалымат талаасы q ), мисалы, "Салам дүйнө" дегенден "Салам, дүйнө !" “, Биз ката жөнүндө кабар алабыз:

Эми веб-сайтты которуу функциясын колдонуп, ушул өзгөртүлгөндү Google Chrome ичинде дагы бир жолу которуп, q параметринен тышкары, tk параметринин да өзгөргөнүн байкадык (калган бардык параметрлер ошол бойдон калды):

Албетте, бул жипке көз каранды, анын түзүлүшүн көрүү оңой эмес токен. Вебсайттын котормосун баштаганыңызда, төмөнкү файлдар жүктөлөт:

  • 1 CSS файлы: translateelement.css
  • 4 графика: translate_24dp.png (2x), gen204 (2x)
  • 2 JS Files: main_de.js, element_main.js

Эки JavaScript файлы бузулуп, кичирейтилген. JS Nice жана de4js сыяктуу куралдар бизге ушул файлдарды окууга ыңгайлуураак кылууга жардам берет. Аларды түз эфирде мүчүлүштүктөрдү оңдоо үчүн, алыскы файлдарды тез арада жергиликтүү туннелге чыгарган Chrome Кеңейтүү Сурамы боюнча сунуштайбыз:

Эми биз кодду оңдоп алабыз ( CORS адегенде жергиликтүү серверде иштетилиши керек). Токендерди жаратуу үчүн тиешелүү код бөлүм element_main.js файлында ушул бөлүмдө жашырылган окшойт:

b7739bf50b2edcf636c43a8f8910def9

Бул жерде текст бир аз жылыштардын жардамы менен хэштелген. Бирок, тилекке каршы, биз дагы эле табышмактын бир бөлүгүн жоготуп жатабыз: а аргументинен тышкары (которула турган текст), дагы бир b аргументи Bp () функциясына өтөт - мезгил-мезгили менен өзгөрүлүп тургандай сезилип турган уруктун бир түрү, ошондой эле таштандыга агат. Бирок ал кайдан келген? Эгерде Bp () функциялык чакырыгына өтсөк , анда төмөнкү код бөлүмүн табабыз:

b7739bf50b2edcf636c43a8f8910def9

Hq функциясы алдын-ала төмөнкүдөй жарыяланган:

b7739bf50b2edcf636c43a8f8910def9

Бул жерде Deobfuscater таштанды таштап кетти; String.fromCharCode ('...') тилкесин тийиштүү символдор менен алмаштыргандан кийин, эскирген а () белгисин алып, [c (), c ()] функциясын чакырып, натыйжасы:

b7739bf50b2edcf636c43a8f8910def9

Же андан да оңой:

b7739bf50b2edcf636c43a8f8910def9

Yq функциясы буга чейин аныкталган:

b7739bf50b2edcf636c43a8f8910def9

Үрөн google.translate._const._ctkk глобалдык объектисинде окшойт , ал иштөө убагында жеткиликтүү. Бирок ал кайда коюлган? Башкада , мурун жүктөлгөн JS файлы main_de.js, жок дегенде ал башында да бар. Башында төмөнкүлөрдү кошобуз:

b7739bf50b2edcf636c43a8f8910def9

Консолунда биз учурдагы үрөндү алабыз:

Бул Google Chromeдун өзүн калтырып коёт, ал үрөндү акыркы вариант катары берет. Бактыга жараша, анын баштапкы коду (Которуу компоненти менен кошо) ачык булак болгондуктан, жалпыга жеткиликтүү. Репозиторийди жергиликтүү деңгээлде тартып, TranslateScript :: GetTranslateScriptURL функциясын translate_script.cc файлындагы компоненттерден табабыз / translate / core / browser папкасында:

b7739bf50b2edcf636c43a8f8910def9

Ошол эле файлда URL менен өзгөрүлмө катуу аныкталат:

b7739bf50b2edcf636c43a8f8910def9

Эми element.js файлын жакшылап карап көрсөк (дагы бир жолу фосфузациялангандан кийин), биз катуу коюлган c._ctkk жазуусун табабыз - google.translate объектиси дагы ошого жараша орнотулуп, бардык тиешелүү активдердин жүктөлүшү (биз буга чейин тапканбыз ):

b7739bf50b2edcf636c43a8f8910def9

Эми параметр ачкычы (AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw мааниси менен) каралууда. Бул жалпы браузердин API ачкычы окшойт (аны кээ бир Google натыйжаларында табууга болот). Бул компоненттердеги translate_url_util.cc файлындагы Chromiumдо орнотулган / translate / core / browser папкасында:

b7739bf50b2edcf636c43a8f8910def9

Ачкыч google_apis / google_api_keys.cc жасалма маанисинен жаратылган:

b7739bf50b2edcf636c43a8f8910def9

Бирок, API API чалуулары ушул негизги параметрсиз эле иштей тургандыгын тестирлөө көрсөтүп турат. Эгерде сиз API менен тажрыйба жүргүзсөңүз, анда ийгиликтүү болсоңуз, 200 статус кодун кайтарып аласыз. Эгерде сиз чектен чыксаңыз, анда " POST сурамдары мазмундун башын талап кылат " деген билдирүү менен 411 статус кодун кайра аласыз. Ошондуктан бул башты киргизүү сунушталат (ал автоматтык түрдө Почтальондо убактылуу баш катары орнотулат).

Бир сурамда бир нече сүйлөм болгондо, которулган саптардын кайтаруу форматы адаттан тыш. Жеке сүйлөмдөр i- / b-HTML тегдери менен коштолот:

Ошондой эле, Google Chrome бүтүндөй HTMLди APIге жөнөтпөйт, бирок href сыяктуу атрибуттук баалуулуктарды сурамга сактайт (жана анын ордуна индекстерди белгилейт, ошондо кийинчерээк тэгдер кардар тарабынан дайындалат):

Сиз te_lib тартып POST негизги кардардын маанисин өзгөртө турган болсо (Google Chrome) webappта ( Google Котормо веб-сайты ), сиз акыркы которулган сапты аласыз:

(: Чектеген эч кандай баасы жок te_lib менен, 40000 Chars кийин жеткенде webapp менен салыштыруу үчүн) маселе сиз аркылуу te_lib караганда чектеген чен чуркайт алда канча жогору турат. Андыктан Chrome натыйжаны кандайча талдай тургандыгын жакшылап карашыбыз керек. Биз аны element_main.js дарегинен таба алабыз:

b7739bf50b2edcf636c43a8f8910def9

Эгер сиз бүт HTML кодун API'ге жөнөтсөңүз, ал атрибуттарды которулган жоопто калтырат. Демек, биз талдоо жүрүм-турумун туурашыбыз керек эмес, бирок жооптон акыркы, которулган сапты гана чыгарып алабыз. Бул үчүн, биз эң сырткы <i> тегдерин, анын ичинде алардын мазмунун жокко чыгарган жана эң сырткы <b> тегдерин алып салган кичинекей HTML теги талдоочу түзөбүз. Бул билим менен биз азыр ( композитор менен көз карандылыкты орноткондон кийин fzaninotto / faker vielhuber / stringhelper талап кылынат ) котормо API'нин сервердик версиясын түзө алабыз.:

b7739bf50b2edcf636c43a8f8910def9

Төмөндө ар башка өткөрүү жөндөмдүүлүгү жана IP даректери бар беш башка тутумда жүргүзүлгөн алгачкы тесттин натыйжалары келтирилген:

МүнөзСураныч боюнча белгилерУзактыгыКата ылдамдыгыРасмий 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%51 € 5183,41

Эскертүү: Бардык скрипттерди камтыган бул блогдогу билдирүү сыноо максатында гана жазылган. Анын ордуна расмий менен иштөө, жемиштүү колдонуу үчүн скрипттерди колдонууга болбойт Google котормо API .

Артка