25 মার্চ 2025: একটি জেপিজি ফেকিং

25 মার্চ 2025: একটি জেপিজি ফেকিং

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

স্পিগট সেখানে বসে আছেন, তার কাজটি করছেন, এখন কয়েক মাস ধরে, প্রতিদিন এক মিলিয়ন পৃষ্ঠাগুলি পরিবেশন করছেন। আমি আসলে এটি কী তা নিয়ে নজর রাখছি না, তবে প্রতিবার এবং তারপরে আমি এর লগগুলি দেখি যে ক্রলাররা কী আঘাত করছে তা দেখার জন্য।

দুঃখের বিষয়, দু’জন কঠোর-হিট ক্রলারের তাদের পরিচয় আড়াল করতে, এলোমেলোভাবে উত্পন্ন করা, এবং অসম্ভব, ব্রাউজারের স্বাক্ষর (যেমন ফায়ারফক্স সংস্করণ 134.0, 64 বিট, উইন্ডোজ 98 এ) এবং এলোমেলো ঠিকানাগুলি থেকে অ্যাক্সেস করার জন্য চরম দৈর্ঘ্যে যায়। এটি সম্ভবত বোটনেটের মাধ্যমে করা হচ্ছে বলে মনে হচ্ছে – অবৈধভাবে হাজার হাজার লোকের ডিভাইসকে গালি দেওয়া। দীর্ঘশ্বাস

যেখানে আমি একটি ভারী হিটার সনাক্ত করতে পারি, আমি এটি স্পিগোটের প্রথম পৃষ্ঠায় তালিকায় যুক্ত করি যাতে আমি সময়ের সাথে সাথে ক্রলারের আচরণটি ট্র্যাক করতে পারি।

যাইহোক … কয়েক সপ্তাহ আগে, আমি একটি নতুন ভারী হিটার, “ইমেজফিটবট” লক্ষ্য করেছি। স্পিগোটের আউটপুটটির কোনওটিতেই চিত্র নেই, তবে ইমেজফিফটবোট ব্যস্ততার সাথে প্রতি ঘন্টা হাজার হাজার অনুরোধের সাথে এটি আঘাত করছিল, মরিয়া হয়ে ইনজেস্টের জন্য চিত্রগুলি খুঁজছিল। আমি এর কৃতজ্ঞতার জন্য দুঃখিত এবং আমি কীভাবে এটি খুশি করতে পারি সে সম্পর্কে ভাবতে শুরু করি।

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

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

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

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

আমি বর্তমানে আমার ওয়েব সাইটে 514 জেপিজি পেয়েছি, মোট প্রায় 150mbytes ডেটা। যদি আমি কেবল “কাঠামোগত” খণ্ডগুলি রেখে এবং “পিক্সেল” অংশের দৈর্ঘ্য লক্ষ্য করে তাদের সমস্তগুলি স্ক্যান করি তবে ফলস্বরূপ ডেটা সেটটি 500 কেবিটের নীচে রয়েছে – সমুদ্রের একটি ড্রপ। এটি আমাকে 514 বাস্তববাদী টেম্পলেট, বিভিন্ন আকারের, রঙের গভীরতা ইত্যাদি দেয়

একটি জেপিগ তৈরি করা নেমে আসবে:

template = random.choice(template_list)
for chunk in template.chunks:
   if chunk.type is pixel_data:
       output(random.randbytes(chunk.length)) 
   else:
       output(chunk.data)

এবং এটা!

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

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

এই পৃষ্ঠার শীর্ষে থাকা চিত্রটি একটি উদাহরণ, কোড থেকে ফ্লাইতে উত্পন্ন। আপনার ব্রাউজারটি সম্ভবত এটি একটি ত্রুটিযুক্ত জেপিইজি হওয়া সত্ত্বেও এটি প্রদর্শন করবে।

দক্ষতায় ফিরে যান: আমি কত দ্রুত এই আবর্জনা চিত্রগুলি তৈরি করতে পারি? যেমনটি আমি বলেছি, আমি আমার সাইটের চিত্রগুলির উপর ভিত্তি করে টেমপ্লেটগুলি ব্যবহার করছি। আমি সাধারণত ওয়েবের জন্য চিত্রগুলি অনুকূল করে তুলি, ফলস্বরূপ জেপিইজিগুলির বিভিন্ন আকারের আকার রয়েছে তবে বেশিরভাগ ক্ষেত্রে প্রায় 1280×960 পিক্সেল এবং 200-300 কেবিটেসের কাছাকাছি। একটি দ্রুত পরীক্ষা দেখায় যে আমি এই পদ্ধতিটি ব্যবহার করে আমার ওয়েব সার্ভারে প্রতি সেকেন্ডে প্রায় 900 টির মতো চিত্র তৈরি করতে পারি (পাইথনে)। এটি প্রায় 190mbytes/সেকেন্ডের কাছাকাছি এবং ইন্টারনেটে আমার ওয়েব সার্ভারের সংযোগের চেয়ে খুব দ্রুত। ভাল!

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

ইমেজফিটবট হয় খুব এটি দিয়ে খুশি এবং আজ প্রায় 15,000 আবর্জনা চিত্র ধরেছে। আমি আশা করি এটি আরও লিঙ্কগুলি খুঁজে পাওয়ার সাথে সাথে এটি পরবর্তী কয়েক দিন ধরে এর হার বাড়িয়ে তুলবে। মেটার বট, অ্যামাজনবট এবং জিপিটিবোটও উত্তেজিত হচ্ছে!

আমার এটি করে এমন পাইথন ক্লাসটি পরিপাটি করা দরকার যা এটি করে তবে এটি যথাযথভাবে প্রকাশ করবে। এটি কোডের 100 লাইনের অধীনে (তবে আরও মন্তব্য সহ করতে পারে!)।

(2025-03-26) এখন মুক্তি গিরুব

(2025-03-28) হাফম্যান কোডগুলি সম্পর্কে অনেক চিন্তাভাবনা করার পরে, আমি উত্পন্ন পিক্সেল ডেটার বিরুদ্ধে কিছুটা মুখোশ যুক্ত করেছি। “এবং”-0x6D সহ প্রতিটি উত্পাদিত বাইটকে নিশ্চিত করে যে তিন বা ততোধিক 1 এর কোনও স্ট্রিং বিট স্ট্রিমে উপস্থিত হয় না। এটি আরও বেশি সিপিইউর প্রয়োজন ছাড়াই অবৈধ হাফম্যান কোড রয়েছে এমন একটি জেপিইজি উত্পন্ন করার সম্ভাবনা (90% থেকে <4%) সম্ভাবনা হ্রাস করে।

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

Source link

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।