গুগল অনুবাদ এপিআই হ্যাকিং

গুগল তার গুগল মেঘের অংশ হিসাবে ব্যবহার-ভিত্তিক ব্যয় কাঠামোর সাথে Google অনুবাদ এপিআই সরবরাহ করে। এখানে একটি অনিবন্ধিত এপিআইও রয়েছে যা কী ছাড়াই ব্যবহার করা যেতে পারে তবে এটি কয়েকটি অনুরোধের পরে কাজ করতে অস্বীকার করে। গুগল ক্রোমের ওয়েবসাইট অনুবাদ ফাংশনটি ব্যবহার করার সময়, এটি লক্ষণীয় যে পৃষ্ঠাগুলি কোনও লক্ষণীয় সীমাবদ্ধতা ছাড়াই খুব ভাল মানের অনুবাদ করা যেতে পারে।


দৃশ্যত উন্নত nmt মডেল ইতিমধ্যে এখানে ব্যবহার করা হচ্ছে. কিন্তু কোন API Google Chrome অভ্যন্তরীণভাবে বিষয়বস্তু অনুবাদ করতে ব্যবহার করে, এবং আপনি কি এই API সরাসরি অ্যাক্সেস করতে পারেন - এমনকি সার্ভারের দিকেও? নেটওয়ার্ক ট্র্যাফিক বিশ্লেষণ করার জন্য, আমরা Wireshark বা Telerik Fiddler এর মতো সরঞ্জামগুলির সুপারিশ করি, যা এনক্রিপ্ট করা ট্র্যাফিকও বিশ্লেষণ করতে পারে৷ কিন্তু ক্রোম এমনকি পৃষ্ঠাগুলি বিনামূল্যে অনুবাদ করার সময় পাঠানো অনুরোধগুলিও সরবরাহ করে: সেগুলি Chrome DevTools এর মাধ্যমে সহজেই দেখা যায়:

যদি আপনি কোনও অনুবাদ সম্পাদন করেন, তবে "কপিরাইট> সিআরএল (বাশ) হিসাবে অনুলিপি করুন" এর মাধ্যমে P 1 to এর গুরুত্বপূর্ণ পোষ্ট অনুরোধটি ধরুন এবং পোস্টম্যানের মতো একটি সরঞ্জামে এটি কার্যকর করুন, উদাহরণস্বরূপ, আপনি কোনও সমস্যা ছাড়াই পুনরায় অনুরোধটি পাঠাতে পারেন:

URL প্যারামিটারগুলোর অর্থও বেশিরভাগ ক্ষেত্রেই সুস্পষ্ট।:

চাবিউদাহরণ মানঅর্থ
অ্যানো3টিকা মোড (রিটার্ন ফর্ম্যাটকে প্রভাবিত করে)
ক্লায়েন্টte_libক্লায়েন্টের তথ্য (পরিবর্তনশীল; গুগল ট্রান্সলেট ওয়েব ইন্টারফেসের মাধ্যমে এর মান "webapp" হয়; যা রিটার্ন ফরম্যাট এবং রেট লিমিটিংকে প্রভাবিত করে)
বিন্যাসএইচটিএমএলস্ট্রিং ফর্ম্যাট (HTML ট্যাগ অনুবাদ করার জন্য গুরুত্বপূর্ণ)
v1.0গুগল অনুবাদ সংস্করণ নম্বর
চাবিAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwএপিআই কী (নীচে দেখুন)
লগল্ডvTE_20200210_00প্রোটোকল সংস্করণ
slডিউৎস ভাষা
tlenসুনির্দিষ্ট ভাষা
এসপিএনএমটিএমএল মডেল
টিসি1অজানা
sr1অজানা
tk709408.812158টোকেন (নীচে দেখুন)
ফ্যাশন1অজানা

কিছু অনুরোধ শিরোনামও সেট করা আছে - তবে এগুলি বেশিরভাগই উপেক্ষা করা যেতে পারে। ব্যবহারকারী এজেন্টের সমস্ত শিরোনাম সহ ম্যানুয়ালি অনির্বাচিত করার পরে, বিশেষ অক্ষরগুলিতে প্রবেশ করার সময় একটি এনকোডিং সমস্যাটি সনাক্ত করা হয় (এখানে " হ্যালো ওয়ার্ল্ড " অনুবাদ করার সময়):

আপনি যদি ব্যবহারকারী এজেন্টটিকে পুনরায় সক্রিয় করেন (এটি সাধারণত কোনও ক্ষতি করে না), API ইউটিএফ -8 এনকোডেড অক্ষর সরবরাহ করে:

আমরা কি এখন আমাদের লক্ষ্যে পৌঁছেছি এবং গুগল ক্রোমের বাইরে এই এপিআইটি ব্যবহার করার জন্য প্রয়োজনীয় সমস্ত তথ্য পেয়েছি? যাইহোক, আপনি যদি অনুবাদ করার জন্য স্ট্রিংটি (POST অনুরোধের ডেটা ফিল্ড q ) উদাহরণস্বরূপ, "Hello World" থেকে "Hello World ! "-এ পরিবর্তন করেন, তাহলে আপনি একটি ত্রুটির বার্তা পাবেন।:

এখন আমরা গুগল ক্রোমের ওয়েবসাইট অনুবাদ ফাংশন ব্যবহার করে এই পরিবর্তিত স্ট্রিংটির আরেকটি অনুবাদ করি এবং দেখতে পাই যে, q প্যারামিটারটির পাশাপাশি tk প্যারামিটারটিও পরিবর্তিত হয়েছে (অন্যান্য সমস্ত প্যারামিটার অপরিবর্তিত রয়েছে)।:

স্পষ্টতই, এটি একটি টোকেন যা স্ট্রিংয়ের উপর নির্ভর করে, এর কাঠামোটি দেখতে সহজ নয়। আপনি ওয়েবসাইট অনুবাদ শুরু করার সময়, নিম্নলিখিত ফাইলগুলি লোড করা হয়:

  • 1 সিএসএস ফাইল: ট্রান্সলেটমেন্টমেন্ট সিএসএস
  • 4 গ্রাফিক্স: translate_24dp.png (2x), gen204 (2x)
  • 2 জেএস ফাইলগুলি: মেইন_ডি.জেএস , এলিমেন্ট_মাইন.জেএস

দুটি জাভাস্ক্রিপ্ট ফাইল অপ্রচলিত এবং minified হয়। জেএস নিস এবং ডি 4 জেসের মতো সরঞ্জামগুলি এখন এই ফাইলগুলিকে আরও পঠনযোগ্য করে তুলতে আমাদের সহায়তা করছে। তাদের লাইভ ডিবাগ করার জন্য, আমরা ক্রোম এক্সটেনশান অনুরোধের প্রস্তাব দিই, যা স্থানীয়ভাবে দূরবর্তী ফাইলগুলিকে উড়ে বেড়াতে দেয়:

এখন আমরা কোডটি ডিবাগ করতে পারি ( সিওআরএস অবশ্যই প্রথমে স্থানীয় সার্ভারে সক্রিয় করা উচিত)। টোকেন তৈরির জন্য প্রাসঙ্গিক কোড বিভাগটি অ্যালিমেন্ট_মাইন.জেএস ফাইলটিতে এই বিভাগে লুকানো আছে বলে মনে হয়:

b7739bf50b2edcf636c43a8f8910def9

এখানে কিছু বিট শিফ্টের সাহায্যে পাঠ্যটি হ্যাশ করা হয়েছে। তবে দুর্ভাগ্যক্রমে আমরা ধাঁধাটির একটি টুকরো এখনও মিস করছি: যুক্তি a (যা অনুবাদ করা পাঠ্য) যুক্তি ছাড়াও, আরেকটি যুক্তি বি ফাংশনে বিপি () প্রেরণ করা হয়েছে - এক ধরণের বীজ যা সময়ে সময়ে পরিবর্তিত হয় বলে মনে হয় এবং এর মধ্যে রয়েছে হ্যাশিং মধ্যে প্রবাহিত। তবে সে কোথা থেকে এসেছে? আমরা বিপি () এর ফাংশন কলটিতে ঝাঁপ দিলে আমরা নিম্নলিখিত কোড বিভাগটি পাই:

b7739bf50b2edcf636c43a8f8910def9

ফাংশন HQ পূর্বেই নিম্নরূপ ঘোষিত হয়:

b7739bf50b2edcf636c43a8f8910def9

Deobfuscater এখানে কিছু আবর্জনা রেখে গেছে; আমরা String.fromCharCode('...') কে সংশ্লিষ্ট স্ট্রিং দিয়ে প্রতিস্থাপন করার পরে, অপ্রচলিত a() সরিয়ে দিয়ে ফাংশন কলগুলি [c(), c()] কে একত্রিত করার পর, আমরা পাই:

b7739bf50b2edcf636c43a8f8910def9

বা আরও সহজ:

b7739bf50b2edcf636c43a8f8910def9

Yq ফাংশনটি পূর্বে হিসাবে সংজ্ঞায়িত করা হয়:

b7739bf50b2edcf636c43a8f8910def9

সুতরাং বীজটি বিশ্বব্যাপী বস্তু google.translate._const._ctkk- তে রয়েছে বলে মনে হচ্ছে, যা রানটাইমে উপলব্ধ। কিন্তু এটা কোথায় স্থাপন করা হয়? অন্তত এটি অন্য, পূর্বে লোড করা JS ফাইল main_de.js এর শুরুতে পাওয়া যায়। আমরা শুরুতে নিম্নলিখিত যোগ করুন:

b7739bf50b2edcf636c43a8f8910def9

কনসোলে আমরা আসলে বর্তমান বীজ পাই:

এটি গুগল ক্রোমকে নিজেই ছেড়ে দেয়, যা দৃশ্যত শেষ বিকল্প হিসাবে বীজ সরবরাহ করে। ভাগ্যক্রমে, এর উত্স কোড (অনুবাদ উপাদান সহ ক্রোমিয়াম) মুক্ত উত্স এবং তাই সর্বজনীনভাবে উপলভ্য। আমরা টান সংগ্রহস্থলের স্থানীয়ভাবে এবং উপাদান / অনুবাদ / কোর / ব্রাউজার ফোল্ডারে translate_script.cc ফাইলে TranslateScript :: GetTranslateScriptURL ফাংশন কল এটি:

b7739bf50b2edcf636c43a8f8910def9

URL সহ ভেরিয়েবল একই ফাইলটিতে কঠোর সংজ্ঞায়িত:

b7739bf50b2edcf636c43a8f8910def9

যদি আমরা এখন element.js ফাইলটি আরও ঘনিষ্ঠভাবে পরীক্ষা করি (আরও ডিঅফসকেশনের পরে), আমরা হার্ড সেট এন্ট্রি c._ctkk দেখতে পাই - google.translate অবজেক্টটিও সেই অনুযায়ী সেট করা হয়েছে এবং সমস্ত প্রাসঙ্গিক সম্পদের লোডিং (যা আমরা ইতিমধ্যেই আগে আবিষ্কার করেছি) ট্রিগার করা হয়েছে:

b7739bf50b2edcf636c43a8f8910def9

এখন প্যারামিটার কীটি বিবেচনার জন্য রয়ে গেছে (AIZASyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw মান সহ)। এটি একটি জেনেরিক ব্রাউজার এপিআই কী বলে মনে হচ্ছে (যা কিছু গুগলের ফলাফলের মধ্যেও পাওয়া যায়)। / অনুবাদ / কোর / ব্রাউজার এটা ফোল্ডার উপাদান ফাইল translate_url_util.cc এ Chromium সেট করা হয়:

b7739bf50b2edcf636c43a8f8910def9

কীটি একটি ডামি মান থেকে google_apis / google_api_keys.cc এ উত্পন্ন হয়:

b7739bf50b2edcf636c43a8f8910def9

তবে, পরীক্ষায় দেখা গেছে যে এই মূল প্যারামিটারটি ছাড়াও এপিআই কলগুলো সমানভাবে কাজ করে। এপিআই নিয়ে পরীক্ষা করলে এখন সফল কলের ক্ষেত্রে ২০০ স্ট্যাটাস কোড পাওয়া যায়। যদি কোনো সীমায় পৌঁছানো হয়, তাহলে " POST requests require a Content-length header " বার্তা সহ ৪১১ স্ট্যাটাস কোড ফেরত আসে। তাই, এই হেডারটিও অন্তর্ভুক্ত করার পরামর্শ দেওয়া হচ্ছে (যা পোস্টম্যানে স্বয়ংক্রিয়ভাবে একটি টেম্পোরারি হেডার হিসেবে সেট হয়ে যায়)।

যখন একটি অনুরোধে বেশ কয়েকটি বাক্য থাকে তখন অনুবাদিত স্ট্রিংগুলির রিটার্ন ফর্ম্যাটটি অস্বাভাবিক। পৃথক বাক্যগুলি i- / b-HTML ট্যাগ দ্বারা আবদ্ধ থাকে:

এছাড়াও, গুগল ক্রোম পুরো এইচটিএমএলকে এপিআইতে প্রেরণ করে না, তবে অনুরোধে href এর মতো বৈশিষ্ট্যযুক্ত মানগুলি সংরক্ষণ করে (এবং পরিবর্তে সূচকগুলি সেট করে যাতে ট্যাগগুলি পরে ক্লায়েন্টের পক্ষে বরাদ্দ করা যায়):

আপনি যদি te_lib (গুগল ক্রোম) থেকে পোষ্ট কী ক্লায়েন্টের মান পরিবর্তন করেন ওয়েব অ্যাপে ( গুগল অনুবাদ ওয়েবসাইট ) এ, আপনি চূড়ান্ত অনুবাদিত স্ট্রিং পাবেন:

(: ওয়েবঅ্যাপ্লিকেশনটি সঙ্গে এই 40,000 অক্ষর পর এসে যাবে, te_lib সঙ্গে কোন সীমিত হার তুলনা জন্য) সমস্যা হল আপনি আরো অনেক কিছু মাধ্যমে te_lib চেয়ে সীমিত হার মধ্যে চালানো করার সম্ভাবনা বেশি হয়। সুতরাং ক্রোম কীভাবে ফলাফলকে বিশ্লেষণ করে তা আমাদের আরও নিবিড়ভাবে নজর দেওয়া উচিত। আমরা এটি এখানে এলিমেন্ট_মাইন.জেজে খুঁজে পাব:

b7739bf50b2edcf636c43a8f8910def9

আপনি যদি API-তে সম্পূর্ণ HTML কোড পাঠান, তাহলে এটি অনুবাদিত প্রতিক্রিয়াতে বৈশিষ্ট্যগুলি ছেড়ে যায়। তাই আমাদের সম্পূর্ণ পার্স আচরণ অনুকরণ করতে হবে না, তবে প্রতিক্রিয়া থেকে শুধুমাত্র চূড়ান্ত, অনুবাদিত স্ট্রিংটি বের করতে হবে। এটি করার জন্য, আমরা একটি ছোট HTML ট্যাগ পার্সার তৈরি করি যা তাদের বিষয়বস্তু সহ বাইরেরতম <i> ট্যাগগুলিকে বাতিল করে এবং বাইরেরতম <b> ট্যাগগুলিকে সরিয়ে দেয়। এই জ্ঞানের সাহায্যে আমরা এখন ( কম্পোজারের সাথে নির্ভরতা ইনস্টল করার পরে fzaninotto / faker vielhuber / stringhelper প্রয়োজন ) অনুবাদ API এর একটি সার্ভার-সাইড সংস্করণ তৈরি করতে পারি:

b7739bf50b2edcf636c43a8f8910def9

নীচে একটি প্রাথমিক পরীক্ষার ফলাফল রয়েছে যা বিভিন্ন ব্যান্ডউইথ এবং আইপি ঠিকানা সহ পাঁচটি ভিন্ন সিস্টেমে পরিচালিত হয়েছিল:

চরিত্রঅনুরোধ অনুযায়ী অক্ষরসময়কালত্রুটি হারঅফিসিয়াল এপিআইয়ের মাধ্যমে খরচ
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

দ্রষ্টব্য: সমস্ত স্ক্রিপ্ট সহ এই ব্লগ পোস্টটি কেবল পরীক্ষার উদ্দেশ্যে লেখা হয়েছিল। উত্পাদনশীল ব্যবহারের জন্য স্ক্রিপ্টগুলি ব্যবহার করবেন না , পরিবর্তে সরকারী গুগল অনুবাদ এপিআইয়ের সাথে কাজ করুন

পেছনে