একটি নিয়ন্ত্রিত উপায়ে একটি সংরক্ষণাগার ফাইলকে কীভাবে দূষিত করবেন?


23

আমি একটি ফাংশন লিখেছিলাম যা সিআরসি চেকসাম ব্যবহার করে দূষিত সংরক্ষণাগারটি পরীক্ষা করে।

এটি পরীক্ষা করতে, আমি কেবল সংরক্ষণাগারটি খুললাম এবং একটি হেক্স সম্পাদক দিয়ে সামগ্রী স্ক্র্যাম্বল করেছি। সমস্যাটি হ'ল আমি বিশ্বাস করি না যে এটি কোনও দূষিত ফাইল উত্পন্ন করার সঠিক উপায়।

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


আর্কাইভের কোনও ফাইলের সামগ্রী বা আর্কাইভ নিজেই বোঝাতে আপনি কোন সরঞ্জামটি "সংরক্ষণাগার" ব্যবহার করছেন?
ড্র স্লোয়ান

আমি সংরক্ষণাগার ফর্ম্যাট হিসাবে টার ব্যবহার করছি। আমি কেবল ফাইলের সামগ্রীটি দূষিত করতে চাই; সুতরাং সংরক্ষণাগারটি নিজেই এখনও টার ফাইল হিসাবে স্বীকৃত। আমার ফাংশনটি ফাইলটি বের করে; আমার একটি মামলা আছে যেখানে ফাইলটি দুর্নীতিগ্রস্থ হয়েছে, তবে আমি সংরক্ষণাগারের অভ্যন্তরে থাকা ফাইলটি নষ্ট হয়ে গেলে কী ঘটে তা যাচাই করতে চাই।
rataplan

উত্তর:


22

আমি খুব বেশি ফাজ পরীক্ষাও করিনি , তবে এখানে দুটি ধারণা:

ফাইলের মাঝখানে কিছু শূন্য লিখুন। ব্যবহার করুন ddসঙ্গে conv=notrunc। এটি একটি একক বাইট লিখেছেন (ব্লক-আকার = 1 গণনা = 1):

dd if=/dev/zero of=file_to_fuzz.zip bs=1 count=1 seek=N conv=notrunc

/dev/urandomউত্স হিসাবে ব্যবহার করাও একটি বিকল্প।

বিকল্পভাবে, একাধিক-4 কে গর্ত দিয়ে খোঁচা দিন fallocate --punch-hole। এমনকি fallocate --collapse-rangeশূন্য-ভরা গর্তটি ছাড়াই আপনি কোনও পৃষ্ঠা কেটে ফেলতে পারেন। (এটি ফাইলের আকার পরিবর্তন করবে)।

ভুল জায়গায় আবার ডাউনলোড শুরু করা দৃশ্যটির সাথে মেলে --collapse-range। একটি অসম্পূর্ণ টরেন্ট দৃশ্যটির সাথে মিলবে punch-hole। (ফাইল বা প্রাক-বরাদ্দ এক্সটেনসগুলি স্পার করুন, হয় শূন্য হিসাবে যে কোনও জায়গায় পড়ুন যা এখনও লেখা হয়নি))

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

ডিভিডি সেক্টর (ইসিসি ব্লক) 2048 বি , তবে একক বাইট বা একক বিট ত্রুটি ঘটতে পারে। কিছু ড্রাইভ সম্ভবত আপনাকে খাতটির জন্য একটি পঠন-ত্রুটির পরিবর্তে খারাপ সংশোধনযোগ্য ডেটা দেবে, বিশেষত যদি আপনি কাঁচা মোডে পড়ে থাকেন বা ডাব্লু / ই বলা হয়।


1
যেহেতু হার্ড ড্রাইভগুলি কাজ করে, 4K- সংযুক্ত 4K ব্লক বা 512-বাইট-এ্যালাইনড 512-বাইট ব্লকটিতে শূন্য-ফিলিং সবচেয়ে বাস্তবসম্মত।
চিহ্নিত করুন

@ মার্ক: ওহ, আপনি যদি এইচডি-প্ররোচিত দুর্নীতির কথা ভাবছেন তবে হ্যাঁ। কারও কম্পিউটারে খারাপ র‌্যাম ফাইলের মাঝখানে কিছুটা ফ্লিপ করতে পারে। একইভাবে, খারাপ অপটিক্যাল ডিস্কের / থেকে একটি বৃত্তাকার ট্রিপ একটি ছোট অংশকে শূন্য করতে পারে (ডিভিডি ইসিসি কোডগুলি বিভিন্ন অংশের আকারে কাজ করে)।
পিটার কর্ডেস

10

অন্যান্য উত্তরগুলি বেশিরভাগ হার্ডওয়্যার ত্রুটির সাথে সম্পর্কিত বলে মনে হচ্ছে। আমাকে কিছু সফ্টওয়্যারজনিত দুর্নীতি তালিকাবদ্ধ করুন:

  • এলএফ সিআরএলএফ দ্বারা প্রতিস্থাপিত।
  • সিআর সরানো হয়েছে। (এলএফ অনুসরণ না করলেও)
  • অতিরিক্ত নাল বাইট inোকানো হয়েছে।
  • অতিরিক্ত ইউনিকোড "বাইট অর্ডার চিহ্ন" .োকানো হয়েছে।
  • চরিত্র সেটটি ইউটিএফ -8 থেকে ল্যাটিন -1 বা তদ্বিপরীতে রূপান্তরিত হয়েছে।
  • ডস ইওএফ-অক্ষর (# 1 এ) মুছে ফেলা হয়েছে, এমনকি ফাইলের শেষে নেই।

পাঠ্য ফাইলগুলিতে ঘটে এই জিনিসগুলি মোটামুটি নিরীহ, তবে বাইনারি ফাইলগুলিতে প্রয়োগ করার পরে সাধারণত মারাত্মক।


ওহ, ভাল! এছাড়াও অবশ্যই রূপান্তরগুলি অন্যভাবে। পিএনজি শিরোনামের এই ধরণের পরিস্থিতিটি পরীক্ষা করার জন্য কিছু দুর্দান্ত ত্রুটি রয়েছে: w3.org/TR/PNG-Rationale.html#R.PNG-file-signature
দেবী মরগান

7

ddফাইলটি ছাঁটাই করতে ব্যবহার করুন, বা বাইনারি সম্পাদক চেষ্টা করুন hexerকিছু সম্পাদনা সম্পাদনা করতে এবং পরিচয় করিয়ে দিতে।

ডিডি ব্যবহার করে কাটা ফাইলের উদাহরণ

5MB ফাইল তৈরি করুন

# dd if=/dev/zero of=foo bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.0243189 s, 216 MB/s
# ls -l foo
-rw-r--r-- 1 root root 5242880 Aug 12 20:13 foo
#

শেষ থেকে 10 বাইট কাটা

# dd if=foo of=foo-corrupted bs=1 count=5242870
5242870+0 records in
5242870+0 records out
5242870 bytes (5.2 MB) copied, 23.7826 s, 220 kB/s
# ls -l foo foo-corrupted
-rw-r--r-- 1 root root 5242880 Aug 12 20:13 foo
-rw-r--r-- 1 root root 5242870 Aug 12 20:14 foo-corrupted
#

হেক্সার ম্যান পৃষ্ঠা

HEXER(1)                              General Commands Manual                             HEXER(1)

NAME
   hexer - binary file editor

SYNOPSIS
   hexer [options] [file [...]]

DESCRIPTION
   hexer  is  a  multi-buffer  editor  for  viewing  and  manipulating binary files.  It can't
   (shouldn't) be used for editing block devices, because it tries to load the whole file into
   a  buffer (it should work for diskettes).  The most important features of hexer are:  multi
   buffers, multi level undo, command line editing with completion, binary regular expressions
   (see  below).   The  user  interface  is  kept similar to vi, so if you know how to use vi,
   you'll get started easily.

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

2
হ্যাঁ, ফাইলটি ব্যবহার করে কেটে ফেলা dd, এটি এমন এক বাস্তব বিশ্বের পরিস্থিতি অনুকরণ করে যেখানে কেবল ফাইলের কিছু অংশ তৈরি হয়। এবং hexer কিছু বোগাস সামগ্রী প্রবর্তন করে ব্যবহার করে সম্পাদনা করা অন্য ধরণের দুর্নীতির অনুকরণ করে। একদিকে যেমন md5sumনজর রাখা উপযুক্ত, এটি কোনও ফাইলের জন্য এমডি 5 চেকসামটি গণনা করে।
স্টিভ

1
@ নিউবিয়েজ, এলোমেলোভাবে একটি নেটওয়ার্ক ব্যর্থতা কেটে দেয়, যখন 4Kb বা 512-বাইট সীমানায় কাটা একটি ডিস্ক ব্যর্থতার অনুকরণ করে।
চিহ্নিত করুন

আপনি কীভাবে প্রকৃতপক্ষে ফাইলটি ছাঁটাই করবেন dd?
এডওয়ার্ড টরভাল্ডস

@ এডওয়ার্ড টরভাল্ডস - ডিডি ট্রাঙ্কেটের উদাহরণ যুক্ত করা হয়েছে
স্টিভ

2

প্রস্তাবনা:

কোনও সংরক্ষণাগারে লেখা শুরু করুন এবং লেখাটি শেষ হওয়ার আগে কাজটি বন্ধ করুন। এটি পাওয়ার কাট এবং অন্যান্য দৃশ্যের সময় ঘটতে পারে।

বাস্তব জীবনের দৃশ্য:

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


2

আর একটি সাধারণ ধরণের দুর্নীতি হ'ল বিট-টুইডলিং: যেখানে একক বিট (বা একাধিক বিট) ডেটাস্ট্রিমে টগল হয়।

সুতরাং একটি বাইট 1111 0000হয়ে পারে, বলে, 1111 0010বা 1011 0000বা 1110 1100বা যাই হোক না কেন।

প্যারিটি এবং কাউন্ট-দ্য চেকসামিং সিস্টেমে 1110 1000সমান সংখ্যক সেট এবং আনসেটের মতো জিনিসগুলির সাথে সমস্যা আছে, কারণ সমতা এবং সংখ্যা উভয়ই একই থাকে।

সুতরাং এলোমেলোভাবে এলোমেলো চরিত্রের সমস্ত উদাহরণকে প্রতিস্থাপন করে 0x57 থেকে 0x75 ('9' থেকে 'কে') বলুন বা বিপরীতে এটি সনাক্তকরণযোগ্য নাও হতে পারে। যেসব সিস্টেমে মাইএসকিএল রয়েছে তাদের জন্য "প্রতিস্থাপন" কমান্ডটি কেবলমাত্র এইরকম উদ্দেশ্যে রয়েছে:

replace K 9 < goodInputFile > corruptedOutputFile

আপনি কে এবং 9 এর কাছাকাছি চিঠিটিও অদলবদল করতে চেষ্টা করতে পারেন, যা উভয় ফাইলে একই সংখ্যক বার উপস্থিত হলে বিশেষত ভাল পরীক্ষা হবে:

replace K 9 9 K < goodInputFile > corruptedOutputFile

man replaceআরও তথ্যের জন্য ব্যবহার করুন ।


0

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

প্রথম বাইটে, শেষ বাইটে এবং যে কোনও মিডল বাইটে মাত্র 1 বিট পরিবর্তন করে আমি কেবল 3 টি নমুনা নিয়ে খুশি হব। তবে মাত্র 1 বিট, পুরো বাইট নয়।

তবে সেরা পরীক্ষার নমুনা এমন এক যেখানে আপনি প্রথম থেকে শেষ বাইটে ফাইলের প্রতিটি বিট পরিবর্তন করে নমুনা তৈরি করতে পারবেন। এটি (সাধারণত) সাধারণ সরঞ্জামগুলির সাথে পাওয়া যায় না, আপনার একটি তৈরি করতে হবে (আমার ধারণা)।

আপনার অ্যালগরিদম যদি এক ধরণের অন্তর্নিহিততার উপর ভিত্তি করে থাকে তবে এই পদ্ধতির সাহায্যে আপনি প্রচুর সম্ভাবনা বিচ্ছিন্ন করে দিন is অন্যদিকে বড় নমুনা প্রক্রিয়া করতে অনেক সময় ব্যয় করতে পারে।

শেষ অবধি, কিছু নমুনা কাটা বা বাইট যুক্ত করা আপনার পরীক্ষাগুলি সম্পূর্ণ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.