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Кардар жөнүндө маалымат (өзгөрүп турат; Google Translate веб-интерфейси аркылуу мааниси "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 маалымат талаасы), мисалы, "Hello World"дон "Hello World ! "га өзгөртсөңүз, ката жөнүндө билдирүү аласыз.:

Эми биз веб-сайтты которуу функциясын колдонуп, бул өзгөртүлгөн саптын дагы бир котормосун 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('...') тиешелүү саптар менен алмаштырылгандан кийин, эскирген a() алынып салынгандан жана [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 менен эксперимент жүргүзүү эми ийгиликтүү чалууларда 200 статус кодун кайтарат. Эгерде чектөөлөргө жетсе, " POST сурамдары Content-length headerди талап кылат " деген билдирүү менен 411 статус коду кайтарылат. Ошондуктан, бул аталышты да кошуу сунушталат (ал Postman программасында автоматтык түрдө Убактылуу аталыш катары коюлат).

Бир сурамда бир нече сүйлөм болгондо, которулган саптардын кайтаруу форматы адаттан тыш. Жеке сүйлөмдөр 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%€5183,41

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

Артка