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

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


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

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

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

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

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

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

আমরা কি ইতিমধ্যে সেখানে রয়েছি এবং গুগল ক্রোমের বাইরে এই এপিআই ব্যবহার করার সমস্ত তথ্য আমাদের কাছে আছে? আপনি যদি চরিত্রের স্ট্রিংটি অনুবাদ করতে (পোষ্ট অনুরোধের ডেটা ফিল্ড কিউ ) থেকে পরিবর্তন করেন, উদাহরণস্বরূপ, "হ্যালো ওয়ার্ল্ড" থেকে "হ্যালো ওয়ার্ল্ড" ! “, আমরা একটি ত্রুটি বার্তা পাই:

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

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

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

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

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

এখানে দেওবস্কাটার কিছু আবর্জনা ফেলেছে; আমরা স্ট্রিং.ফ্রোমচারকোড ('...') কে স্বতন্ত্র চরিত্রের স্ট্রিংয়ের সাথে প্রতিস্থাপন করার পরে, অপ্রচলিত এ () অপসারণ করুন এবং ফাংশন কলগুলি [সি (), সি ()] কে একসাথে টুকরো টুকরো করে ফেললে ফলাফলটি হবে:

b7739bf50b2edcf636c43a8f8910def9

বা আরও সহজ:

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

b7739bf50b2edcf636c43a8f8910def9

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

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

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

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

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

b7739bf50b2edcf636c43a8f8910def9

আপনি যদি এইচটিএমএল কোডটি API এ প্রেরণ করেন তবে এটি অনুবাদিত প্রতিক্রিয়ায় বৈশিষ্ট্যগুলি ছেড়ে দেয়। সুতরাং আমাদের সম্পূর্ণ পার্স আচরণটি নকল করতে হবে না, তবে কেবল প্রতিক্রিয়া থেকে চূড়ান্ত, অনুবাদিত স্ট্রিংটি বের করতে হবে। এটি করার জন্য, আমরা একটি ছোট এইচটিএমএল ট্যাগ পার্সার তৈরি করি যা তাদের সামগ্রী সহ বহিরাগত <i> ট্যাগগুলি ত্যাগ করে এবং বাইরেরতম <b> ট্যাগগুলি সরিয়ে দেয়। এটি মাথায় রেখে, আমরা এখন অনুবাদ 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%83 5183.41

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

পেছনে