एक संग्रहित फ़ाइल को नियंत्रित तरीके से भ्रष्ट कैसे करें?


23

मैंने एक फ़ंक्शन लिखा था जो सीआरसी चेकसम का उपयोग करके एक दूषित संग्रह की जांच करता है।

इसे जांचने के लिए, मैंने अभी आर्काइव खोला और हेक्स एडिटर के साथ कंटेंट को स्क्रैम्बल किया। समस्या यह है कि मुझे विश्वास नहीं होता है कि यह दूषित फ़ाइल उत्पन्न करने का सही तरीका है।

क्या एक "नियंत्रित भ्रष्टाचार" बनाने का कोई अन्य तरीका है, इसलिए यह पूरी तरह से यादृच्छिक नहीं होगा, लेकिन वास्तविक भ्रष्ट अभिलेखागार के साथ क्या हो सकता है? मुझे उद्देश्य पर कभी कुछ भ्रष्ट नहीं करना पड़ा, इसलिए मुझे वास्तव में यकीन नहीं है कि ऐसा कैसे करना है, एक फ़ाइल में डेटा के बेतरतीब ढंग से हाथ धोना।


"संग्रह" के लिए कौन से टूल का उपयोग किया जा रहा है, भ्रष्ट होने का मतलब है कि आप आर्काइव में मौजूद फ़ाइलों में से किसी एक की सामग्री, या संग्रह को स्वयं कर सकते हैं?
द्रव्य स्लोन

मैं आर्क प्रारूप के रूप में टार का उपयोग कर रहा हूं। मैं केवल फ़ाइल की सामग्री को भ्रष्ट करना चाहूंगा; इसलिए संग्रह को अभी भी टार फ़ाइल के रूप में पहचाना जाता है। मेरा फ़ंक्शन फ़ाइल को निकालता है; मेरे पास एक मामला है जहां फ़ाइल दूषित है, लेकिन मैं यह जांचना चाहता हूं कि जब संग्रह के अंदर फ़ाइल दूषित होती है तो क्या होता है।
चूहाप्लान

जवाबों:


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स्रोत के रूप में उपयोग करना भी एक विकल्प है।

वैकल्पिक रूप से, कई-के -४k छेदों के साथ पंच करें fallocate --punch-hole। आप fallocate --collapse-rangeएक पृष्ठ को शून्य से भरे छेद को छोड़े बिना भी काट सकते हैं । (यह फ़ाइल का आकार बदल जाएगा)।

गलत स्थान पर फिर से शुरू किया गया --collapse-rangeपरिदृश्य से मेल खाता होगा । एक अधूरी धार punch-holeपरिदृश्य से मेल खाएगी । (विरल फ़ाइल या पूर्व-आवंटित एक्स्टेंट, या तो शून्य के रूप में कहीं भी पढ़ें जो अभी तक नहीं लिखा गया है।)

खराब रैम (सिस्टम में आपने जिस फ़ाइल को डाउनलोड किया है) से भ्रष्टाचार हो सकता है, और ऑप्टिकल ड्राइव भी भ्रष्ट फाइलों को नष्ट कर सकती हैं (उनका ईसीसी हमेशा इतना मजबूत नहीं होता है कि वह खरोंच या डाई के लुप्त होने से पूरी तरह से उबर सके)।

डीवीडी सेक्टर (ECC ब्लॉक) 2048B हैं , लेकिन सिंगल बाइट या एकल-बिट त्रुटियां भी हो सकती हैं। कुछ ड्राइव संभवतः आपको सेक्टर के लिए एक रीड-एरर के बजाय खराब अचूक डेटा देंगे, खासकर यदि आप कच्चे मोड में पढ़ते हैं, या w / e इसे कहते हैं।


1
क्योंकि हार्ड ड्राइव कैसे काम करते हैं, एक 4K- एलायंस 4K ब्लॉक पर शून्य-फिलिंग या 512-बाइट-एलायंस 512-बाइट ब्लॉक, सबसे यथार्थवादी है।
मार्क

@ मर्क: ओह, अगर आप एचडी-प्रेरित भ्रष्टाचार के बारे में सोच रहे हैं, तो हाँ। किसी के कंप्यूटर में बैड रैम किसी फाइल के बीच में थोड़ा फ्लिप कर सकती है। इसी तरह, एक खराब ऑप्टिकल डिस्क से / के लिए एक गोल यात्रा एक छोटा सा हिस्सा (डीवीडी ईसीसी कोड एक अलग चंक आकार पर काम कर सकता है) को शून्य कर सकता है।
पीटर कॉर्ड्स

10

अन्य उत्तर ज्यादातर हार्डवेयर त्रुटियों से संबंधित हैं। मुझे कुछ सॉफ्टवेयर के कारण होने वाले भ्रष्टाचारों की सूची दें:

  • LF को CRLF से बदल दिया गया।
  • सीआर हटाया गया। (भले ही एलएफ द्वारा पीछा नहीं किया गया)
  • अतिरिक्त नल बाइट्स डाला।
  • अतिरिक्त यूनिकोड "बाइट ऑर्डर मार्क" डाला गया।
  • चरित्र सेट UTF-8 से लैटिन -1 या इसके विपरीत में परिवर्तित हो गया।
  • डॉस ईओएफ-चरित्र (# 1 ए) हटा दिया गया, तब भी जब फ़ाइल के अंत में नहीं।

पाठ फ़ाइलों के साथ होने पर ये चीजें काफी हानिरहित होती हैं, लेकिन आम तौर पर बाइनरी फाइलों पर लागू होने पर घातक होती हैं।


ओह, अच्छे वाले! इसके अलावा रूपांतरणों के दूसरे तरीके, निश्चित रूप से। इस तरह की स्थिति के लिए पीएनजी हेडर में कुछ बड़ी त्रुटि होती है: w3.org/TR/PNG-Rationale.html#R.PNG-file-signature
Dewi Morgan

7

ddफ़ाइल को छोटा करने के लिए उपयोग करें , या hexerकुछ भ्रष्टाचारों को संपादित करने और पेश करने के लिए एक द्विआधारी संपादक की कोशिश करें।

Dd का उपयोग करके फ़ाइल को रौंदने का उदाहरण

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लायक हो सकता है, यह एक फ़ाइल के लिए md5 चेकसम की गणना करता है।
स्टीव

1
@newbiez, यादृच्छिक रूप से एक नेटवर्क विफलता का अनुकरण करता है, जबकि एक 4Kb या 512-बाइट की सीमा पर ट्रंकिंग एक डिस्क विफलता का अनुकरण करता है।
मार्क

आप वास्तव में फ़ाइल का उपयोग कैसे करते हैं dd?
एडवर्ड टॉर्वाल्ड्स

@edward टोर्वाल्ड - dd truncate उदाहरण जोड़ा
स्टीव

2

सुझाव:

एक पुरालेख के लिए लिखना शुरू करें और समाप्त होने से पहले लेखन करना बंद कर दें। यह बिजली कटौती और अन्य परिदृश्यों के दौरान हो सकता है।

वास्तविक जीवन परिदृश्य:

मैंने एक बार एक जिप फ़ाइल को भ्रष्ट कर दिया था ताकि माध्यम पर फिट होने से अधिक डेटा को कॉपी करने की कोशिश की जा सके। विंडोज (यह विंडोज 7 सेफ मोड फीर में था) यह पता लगाने की कोशिश करता था कि पर्याप्त जगह है या नहीं, और जब तक यह समझ पाया कि फाइल आधी-पूरी हो चुकी है और इस तरह भ्रष्ट है, तो कार्रवाई पूरी करने से पहले। मुझे उम्मीद है कि उन्होंने विंडोज़ के बाद के संस्करणों में उस मुद्दे को ठीक कर दिया था या यह सिर्फ एक सुरक्षित मोड बात थी।


2

एक अन्य सामान्य प्रकार का भ्रष्टाचार बिट-ट्विडलिंग है: जहां एक बिटस्ट (या कई बिट्स) डेटास्रीम में टॉगल किया जाता है।

तो एक बाइट 1111 0000बन सकता है, कहते हैं, 1111 0010या 1011 0000या 1110 1100या जो कुछ भी।

समानता और काउंट-द- 1110 1000वन चेकसमिंग सिस्टम में चीजों की समस्या होती है, जहां समान संख्या में सेट और अनिश्चित होते हैं, क्योंकि समानता और लोगों की संख्या दोनों समान रहती हैं।

इसलिए, अपने व्युत्क्रम के साथ यादृच्छिक वर्ण के सभी उदाहरणों को प्रतिस्थापित करते हुए, 0x57 से 0x75 ('9' से 'K' तक) कहें या इसके विपरीत पता लगाने योग्य नहीं हो सकता है। सिस्टम के लिए जो mysql है, कमांड "प्रतिस्थापित" केवल ऐसे ही उद्देश्य के लिए मौजूद है:

replace K 9 < goodInputFile > corruptedOutputFile

आप अक्षर K और 9 को चारों ओर स्वैप करने का भी प्रयास कर सकते हैं, जो कि एक विशेष रूप से अच्छी परीक्षा होगी यदि वे दोनों एक ही बार फ़ाइल में दिखाई दें:

replace K 9 9 K < goodInputFile > corruptedOutputFile

man replaceअधिक जानकारी के लिए उपयोग करें ।


0

भ्रष्ट परीक्षण डेटा में रैंडम परिवर्तन एक अच्छा तरीका नहीं है, क्योंकि आप परीक्षणों को फिर से चलाने के लिए नमूने को पुन: पेश नहीं कर सकते हैं।

मैं केवल 3 नमूनों के साथ खुश रहूंगा, पहली बाइट में सिर्फ 1 बिट बदलकर, अंतिम बाइट में और किसी भी मध्य बाइट में। लेकिन सिर्फ 1 बिट, पूरे बाइट नहीं।

लेकिन सबसे अच्छा परीक्षण नमूना वह होगा जहां आप पहले से अंतिम बाइट तक फ़ाइल के प्रत्येक बिट को बदलते हुए नमूने उत्पन्न कर सकते हैं। यह (आमतौर पर) सामान्य उपकरणों के साथ नहीं हो सकता है, आपको एक बनाने की आवश्यकता है (मुझे लगता है)।

इस दृष्टिकोण के साथ यदि आप अपने एल्गोरिथ्म के एक प्रकार के धीरज पर आधारित हैं, तो आप धीरज सहित कई संभावनाओं को अलग कर सकते हैं। दूसरे हाथों में बड़े नमूने को संसाधित करने में बहुत समय लग सकता है।

अंत में, कुछ नमूना ट्रंकटिंग या बाइट्स जोड़ने से आपके परीक्षण पूरे हो जाएंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.