كيف يمكن تفسير إرث البيانات الثنائية الملف بدون وثائق ؟

StackOverflow https://stackoverflow.com/questions/1801978

  •  05-07-2019
  •  | 
  •  

سؤال

البيانات غالبا ما يتم تخزينها في برنامج معين الملفات الثنائية التي يوجد القليل أو أي وثائق.مثال نموذجي في مجال عملنا هي البيانات التي تأتي من الصك ، ولكن أظن المشكلة العامة.ما هي الطرق هناك محاولة فهم وتفسير البيانات ؟

إلى وضع بعض الحدود.الملفات غير مشفرة و لا يوجد DRM.نوع تنسيق الملف غير محددة الكاتب البرنامج (أيأنها ليست "ملف قياسي" - مثل *.القطران هويته قد فقدت).هناك (ربما) لا تعمد التشويش ولكن قد يكون هناك بعض الهواة الجهود لتوفير مساحة.يمكننا أن نفترض أن لدينا المعرفة العامة من بيانات و نتعرف على بعض, ولكن ربما ليس كل من الحقول و المصفوفات.

نفترض أن الغالبية العظمى من البيانات الرقمية ، مع scalars ، المصفوفات (ربما 1 - و 2 - الأبعاد وأحيانا غير منتظمة أو الثلاثي).وسوف يكون هناك أيضا بعض سلاسل الأحرف ، وربما أسماء الأشخاص والمواقع التواريخ ربما بعض الكلمات الرئيسية.سوف يكون هناك رمز في البرنامج يقرأ الملفات الثنائية ، ولكن ليس لدينا إمكانية الوصول إلى مصدر أو المجمع.كمثال على ذلك فإنه قد يكون قد كتب من قبل VAX برنامج Fortran أو بعض المبكر Unix أو Windows كما كائنات OLE.الأرقام قد تكون كبيرة أو صغيرة-endian (الذي لا يعرف في البداية) ولكن ربما متسقة.نحن قد إصدارات مختلفة على أجهزة مختلفة (مثلا ، كراي).

يمكننا أن نفترض أن لدينا معقول مجموعة كبيرة من الملفات - بعض مئات ، أقول.

يمكننا أن نفترض اثنين من السيناريوهات:

  1. يمكننا تشغيل البرنامج مع مدخلات مختلفة حتى نتمكن من القيام بالمزيد من التجارب.
  2. لا يمكننا إعادة تشغيل البرنامج - لدينا مجموعة ثابتة من الوثائق.هذا لطيف تشابه إلى فك الوثائق التاريخية في لغة غير معروفة (على سبيل المثالالخطي ب).

حل جزئي قد تكون مقبولة - أيقد يكون هناك بعض المجالات التي لا يوجد شخص يعيش الآن يفهم ، ولكن معظم الآخرين التأويل.

أنا مهتم فقط مفتوحة المصدر النهج.

التحديث هناك صلة لذلك السؤال (كيفية عكس مهندس تنسيقات الملفات الثنائية من أجل التوافق الأغراض) ولكن التركيز هو مختلف إلى حد ما.التحديث ذكي اقتراح من @brianegge لمعالجة (1).استخدام truss (أو ربما strace على لينكس) إلى تفريغ كل كتابة() و دعوات مماثلة في البرنامج.هذا يجب أن تسمح على الأقل مجموعة من السجلات كتابتها إلى القرص.

هل كانت مفيدة؟

المحلول

هذا هو السؤال المثير للاهتمام, أعتقد أن الجواب هو أن الهندسة العكسية الصيغ الثنائية هي المهارات المكتسبة ، ولكن هناك أدوات هناك التي يمكن أن تساعد.

أداة واحدة WinOLS, الذي تم تصميمه من أجل تفسير والتحرير السيارة محرك إدارة الكمبيوتر الثنائية الصور (في الغالب الرقمية البيانات في جداول البحث).وقد دعم مختلف endian صيغ (وإن لم يكن PDP أعتقد) و عرض البيانات في مختلف عرض وشبكة حجم التعويضات ، وتحديد مجموعة من المناطق (خرائط) وتصور لهم في 2D أو 3D مع جميع أنواع القياس و تعويض الخيارات.كما أن لديها ارشادي/إحصائية التلقائي خريطة الباحث ، والتي قد عمل لك.

انها أداة تجارية ، ولكن تجريبي مجاني سوف تتيح لك أن تفعل كل شيء ولكن حفظ التغييرات إلى ثنائي استخدام محرك إدارة الميزات التي لا تحتاج إليها.قلت كنت مهتما فقط في الحلول مفتوحة المصدر ، ولكن هذا هو ستاكوفيرفلوو و شخص آخر قد لا يكون من الصعب إرضاءه جدا.

نصائح أخرى

جميع الملفات يكون رأس.تبدأ من هناك, ترى ما أوجه التشابه لديك بين 2 ملفات القضاء الموحد "التوقيعات" والعمل مع الاختلافات.يجب أن نحتفل عدد سجلات تاريخ تصدير وأشياء مماثلة.

الأجزاء المشتركة بين البلدين رؤوس قد يكون مجرد النظر العامة التوقيعات أعتقد يمكنك تجاهلها

إذا كنت على النظام الذي يقدم الجمالون, ، ببساطة مشاهدة الخاص بك نظام يدعو إلى الكتابة و ربما سيكون لديك فكرة جيدة.ومن الممكن أيضا أن البرنامج سوف mmap الملف و نسخ مباشرة من الذاكرة ، ولكن هذا هو أقل شيوعا.

$ truss -t write echo foo
foowrite(1, " f o o", 3)                                = 3
write(1, "\n", 1)                               = 1

كما قد يكون من المنطقي أن نلقي نظرة على الثنائية.على أنظمة يونكس ، يمكنك استخدام objdump لعرض تخطيط ثنائي.هذا سوف نشير إلى التعليمات البرمجية والبيانات أقسام.ثم يمكنك فتح الثنائية هو محرر عرافة والذهاب إلى إزاحة محددة.كنت قد تكون مهتمة في نصائح سولاريس الملفات الثنائية.

  • مهرجان دبي السينمائي الدولي 2 أو أكثر من الملفات إلى البحث عن أوجه التشابه.هذا غالبا ما يساعدك على تحديد رأس كتل أقسام مختلفة من الملف.

  • Endianness عادة ما يكون من السهل جدا للعمل أكثر أهمية بايت تميل إلى أن تكون صفر الكثير من الأحيان أقل أهمية منها ، لذلك إذا كنت ترى وجود نمط مثل "00 78" أو "78 00" يمكنك جعل تخمين جيد في البايت هو الطيور الحوامة المهاجرة.ولكن هذا هو فقط من أي مساعدة عندما كنت قد عملت (تقريبا) ما قبل البيانات ، لذلك عليك أن تعرف كيف البيانات الانحياز.

  • ابحث عن التعرف عليها بسهولة البيانات سلاسل المقام الأول لبدء لأنك يمكن اكتشافها بسهولة.هذه غالبا ما تعطيك القرائن ، كما أنها عادة ما تكون جزءا لا يتجزأ بالقرب من البيانات ذات الصلة ، كما تستخدم stanadard العناصر في رؤوس الخ.إذا سلاسل unicode ثم سوف نرى عادة حروف النص مفصولة صفر بايت, التي سوف تساعدك على تحديد endianness و محاذاة البيانات في تلك المرحلة في البيانات.

  • صيغة مشتركة النهج (مثل المنتدى) لتخزين قطع من البيانات مع كل رأس صغير (مثلا ، 2 أو 4 بايت معرف ، ثم 2 أو 4 بايت حجم الكتلة ، ثم البيانات من كتلة).عامة الناس في استخدام ذات مغزى (لهم) قطعة معرفات ، حتى أنها يمكن أن يكون من السهل على الفور - إذا كان يمكنك العثور على ما يشبه العلامة التحقق من البيانات التالية لمعرفة إذا كان يبدو مثل طول (أنظر أن العديد من وحدات البايت في البيانات لمعرفة ما إذا كان يبدو أن هناك آخر رأس).إذا كنت يمكن التعرف على هذا الشكل ، كنت كسر "ملف واحد كبير" المشكلة الى وجود "العديد من الملفات الصغيرة" مشكلة whichmakes أنه من الأسهل بكثير.(ومع ذلك ، فإن الكثير من بيانات الجهاز يميل إلى أن يكون "محسن" أن تجعل من الاتفاق ، وفي هذه الحالة المبرمجين في كثير من الأحيان نرمي مريحة الموسعة صيغ الإلزام كل شيء معا ، التعبئة بت عموما مما يجعل الأمور أكثر صعوبة بالنسبة لك)

  • ابحث عن القيم المعروفة.إذا كان الجهاز الخاص بك هو عرض "درجة الحرارة:40" ثم أنه من الممكن أن تجد أن قيمة تخزينها مباشرة في الملف.(من الشائع أيضا استخدام عوامل القياس أو نقطة ثابتة القيم ، حتى 40 قد تكون ممثلة على النحو (على سبيل المثال) 40*10 = 400 أو 40*256 = 10240 على الرغم من)

  • إذا كان يمكنك التحكم في الجهاز بما فيه الكفاية:إنشاء بعض الملفات البسيطة.ما تحاول تحقيقه هو أصغر الملفات يمكنك الخروج من الجهاز إلى تقليل البيانات التي يجب أن تدرس.ثم إجراء تغيير على الجهاز الذي يتسبب في الملف إلى تغيير - في محاولة للحد من عدد من التغييرات و انتزاع الملف مرة أخرى.إذا كان تنسيق الملف هو "فتح" (غير المشفرة أو المضغوطة) ثم يجب أن تكون قادرا على تحديد وحدات البايت التي تم تغييرها.

  • إذا كنت يمكن أن "الحمل" الملفات مرة أخرى على الجهاز قد تكون أيضا قادرا على إنشاء الملفات الخاصة بك, فقط تغيير قيمة واحدة لمعرفة ما إذا كنت يمكن أن تلاحظ أي تغيير في سلوك الجهاز.إذا كنت تدير لضرب بسيطة قيم هذه يمكن أن تعمل بشكل جيد, ولكن في كثير من الأحيان قد تجد أن كنت مجرد كسر تنسيق ملف الجهاز لن يكون قادرا على قراءة ذر بيانات على الإطلاق.

كنت أتمنى كان هناك سحر الأداة التي يمكن أن تعمل بها أنماط محاولة مختلفة endianness.... الخولكن هناك لا يبدو أن يكون!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top