سؤال

أنا لست على دراية جيدة إلى ماجيك المترجم. فعل تحويل رمز قابلة للقراءة بشري (أو لا حقا تعليمات الجمعية القابلة للقراءة) في كود الماكينات هي، بالنسبة لي، علوم الصواريخ مجتمعة بالسحر.

سأضيق موضوع هذا السؤال لتنفيذ Win32 (.exe). عندما أفتح هذه الملفات لأعلى في عارض متخصص، يمكنني العثور على سلاسل (عادة 16 مليار حرفيا) منتشرة في أماكن مختلفة، ولكن الباقي هو مجرد القمامة. أفترض أن الجزء غير قابل للقراءة (الأغلبية) هو رمز الجهاز (أو ربما الموارد، مثل الصور وما إلى ذلك ...).

هل هناك أي طريقة واضحة لقراءة رمز الجهاز؟ فتح EXE كدفق ملف وقراءة بايت بواسطة بايت، كيف يمكن للمرء تحويل هذه البايتات الفردية إلى التجميع؟ هل هناك رسم خرائط واضحة بين هذه بايت التعليمات وتعليم التجميع؟

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

كيف يمكنني فهم ما يحدث داخل ملف exe؟

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

المحلول

ollydbg. هي أداة رائعة تقوم بتفكيك EXE في التعليمات القابلة للقراءة وتتيح لك تنفيذ الإرشادات One-by-One. يخبرك أيضا ما يعمل API على استخدام البرنامج وإذا كان ذلك ممكنا، فإن الحجج التي توفرها (طالما تم العثور على الحجج الموجودة على المكدس).

بشكل عام، تعليمات وحدة المعالجة المركزية ذات طول متغير، بعض البايت واحد، والبعض الآخر اثنان، حوالي ثلاثة، حوالي أربعة، حوالي أربعة وما إلى ذلك. يعتمد في الغالب على نوع البيانات التي تتوقع التعليمات. يتم تعيين بعض التعليمات، مثل "MOV" الذي يحدد وحدة المعالجة المركزية لنقل البيانات من سجل وحدة المعالجة المركزية إلى مكان في الذاكرة، أو العكس. في الواقع، هناك العديد من تعليمات "MOV" المختلفة، منها للتعامل مع بيانات 8 بت و 16 بت و 32 بت، منها لتحريك البيانات من سجلات مختلفة وما إلى ذلك.

يمكنك التقاط الدكتور بول كارتر الكمبيوتر التجمع التجمع التعليمي وهو كتاب دخول مجاني يتحدث عن التجميع وكيف يعمل وحدة المعالجة المركزية في Intel 386. معظمها ينطبق حتى في وحدة المعالجة المركزية Intel المستهلكية الحديثة.

تنسيق EXE محدد لنظام التشغيل Windows. عادة ما يتم العثور على نقطة الدخول (أي التعليمات القابلة للتنفيذ الأول) في نفس المكان داخل ملف EXE. كل هذا النوع من الصعب شرح كل شيء في وقت واحد، لكن الموارد التي قدمتها يجب أن تساعد في علاج بعض فضولك على الأقل! :)

نصائح أخرى

تحتاج إلى disarsembler التي ستحول رمز الجهاز إلى لغة التجميع. هذه ويكيبيديا رابط يصف العملية ويوفر روابط للتحرير الحراري. بالطبع، كما تقول أنك لا تفهم لغة التجميع، فقد لا يكون هذا مفيدا للغاية - ما الذي تحاول القيام به بالضبط هنا؟

الملف القابل للتنفيذ الذي تراه هو تنسيق MicrosoftS PE (قابل للتنفيذ محمول). من الأساس حاوية، والتي تحتوي على بعض بيانات نظام التشغيل المحددة حول برنامج وبيانات البرنامج نفسها تقسيم إلى عدة أقسام. على سبيل المثال الرمز، يتم تخزين الموارد، البيانات الثابتة في أقسام منفصلة.

تنسيق القسم يعتمد على ما هو عليه. يحمل قسم التعليمات البرمجية رمز الجهاز وفقا للهندسة المعمارية المستهدفة القابلة للتنفيذ. في الحالات الأكثر شيوعا، هذا Intel X86 أو AMD-64 (نفس EM64T) ل Microsoft PE BINARIES. تنسيق رمز الجهاز هو cism ويعود مرة أخرى إلى 8086 والإصدارات السابقة. الجانب الهام من CISC هو أن حجم التعليمات ليس ثابتا، يجب عليك البدء في القراءة في المكان المناسب للحصول على شيء مهم منه. Intel تنشر أدلة جيدة على مجموعة تعليمات X86 / X64.

يمكنك استخدام Disassembler لعرض رمز الجهاز مباشرة. بالاشتراك مع الكتيبات التي يمكنك تخمينها شفرة المصدر معظم الوقت.

ثم هناك msil exe: الملفات التنفيذية .NET التي تحمل اللغة الوسيطة Microsoft، هذه لا تحتوي على رمز آلة محددة، ولكن كود CIL .NET. المواصفات التي تتوفر عبر الإنترنت في ECMA.

يمكن الاطلاع على هذه أداة مثل العاكس.

يتم وصف محتويات ملف EXE في قابل للتنفيذ المحمولة. وبعد أنه يحتوي على التعليمات البرمجية والبيانات والتعليمات إلى نظام التشغيل على كيفية تحميل الملف.

هناك رسم خرائط 1: 1 بين رمز الجهاز والتجميع. سيتم تنفيذ برنامج DisaSeMbler العملية العكسية.

لا يوجد عدد ثابت من البايتات لكل تعليمات على i386. بعض بايت واحد، بعضها أطول بكثير.

يمكنك استخدام تصحيح الأخطاء من سطر الأوامر، ولكن هذا صعب.

C:\WINDOWS>debug taskman.exe
-u
0D69:0000 0E            PUSH    CS
0D69:0001 1F            POP     DS
0D69:0002 BA0E00        MOV     DX,000E
0D69:0005 B409          MOV     AH,09
0D69:0007 CD21          INT     21
0D69:0009 B8014C        MOV     AX,4C01
0D69:000C CD21          INT     21
0D69:000E 54            PUSH    SP
0D69:000F 68            DB      68
0D69:0010 69            DB      69
0D69:0011 7320          JNB     0033
0D69:0013 7072          JO      0087
0D69:0015 6F            DB      6F
0D69:0016 67            DB      67
0D69:0017 7261          JB      007A
0D69:0019 6D            DB      6D
0D69:001A 206361        AND     [BP+DI+61],AH
0D69:001D 6E            DB      6E
0D69:001E 6E            DB      6E
0D69:001F 6F            DB      6F

إذا كان ذلك أجنبا لك كما يبدو، فلا أعتقد أن مصحح الأخطاء أو disassembler سيساعد - تحتاج إلى تعلم برمجة المجمع أولا؛ دراسة بنية المعالج (الكثير من الوثائق القابلة للتنزيل من Intel). ثم نظرا لأن معظم رمز الآلات يتم إنشاؤه بواسطة المترجمين، ستحتاج إلى فهم كيفية قيام الجوائيات بإنشاء التعليمات البرمجية - أبسط طريقة لكتابة الكثير من البرامج الصغيرة ثم تفكيكها لمعرفة ما يتحول إليه C / C + C ++.

بضعة كتب تساعدك على فهم: -

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

إذا كنت مهتما بالمزيد، فمن الأسهل ترجمة شظايا قصيرة مع Pascal مجانا باستخدام المعلمة -Al.

يسمح FPC بإخراج المجمع الذي تم إنشاؤه في العديد من تنسيقات المجمع (Tash، MASM، MASM، GAS) باستخدام المعلمة -A، ويمكنك الحصول على رمز Pascal الأصلي Interleaved في التعليقات (وأكثر) لسهولة التقاطع.

نظرا لأنه من المترجم المجمع الذي تم إنشاؤه، على عكس المجمع من تفكيك .EXE، فهو أكثر رمزية وأسهل للمتابعة.

Win32 exe format. على MSDN.

أقترح تناول القليل من التعليمات البرمجية المصدر Windows C وإنشاء وبدء تصحيح الأخطاء في Visual Studio. قم بالتبديل إلى عرض التفكيك والخطوة عبر الأوامر. يمكنك أن ترى كيف تم تجميع رمز C إلى رمز الجهاز - ومشاهدة تشغيله تشغيل خطوة بخطوة.

فقط فيما يتعلق بهذا السؤال، أي شخص ما زال قراءة أشياء مثل CD 21؟

تذكرت ساندرا بولوك في عرض واحد، في الواقع قراءة شاشة عرافة من أرقام Hex ومعرفة ما يفعله البرنامج. نوع من مثل الإصدار الحالي من رمز مصفوفة القراءة.

إذا قمت بقراءة الأشياء مثل CD 21، كيف تتذكر مجموعات مختلفة مختلفة؟

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

من المحتمل أن يستفيد ACD من حقيقة أن ملفات .exe لا تحقق من أي خطأ في طول الملف أو أي شيء يتجاوز طول الجزء المتوقع من الملف. لهذا السبب، يمكنك إجراء ملف .exe الذي سيفتح نفسه وتحميل كل شيء يتجاوز نقطة معينة كبيانات. هذا مفيد لأنه يمكنك بعد ذلك إنشاء .EXE يعمل على مجموعة معينة من البيانات عن طريق إلقاء الضوء على تلك البيانات في نهاية مكتوب مناسب بشكل مناسب

(ليس لدي أي فكرة عن ما يراه ACD بالضبط هو أخذ ذلك مع حبة كبيرة من الملح ولكني فعل إعلم أن بعض يتم إنشاء البرنامج بهذه الطريقة.)

الألفة ذات التجميع المنخفض المستوى (وأعني الجمعية المنخفضة المستوى، وليس "وحدات الماكرو" وهذا الثور) ربما أمر لا بد منه. إذا كنت ترغب حقا في قراءة رمز الجهاز الخام نفسه مباشرة، فعادة ما تستخدم محرر HEX لذلك. من أجل فهم ما تفعله التعليمات، ومع ذلك، فإن معظم الناس سيستخدمون فك إبطالا لتحويل ذلك إلى تعليمات التجميع المناسبة. إذا كنت واحدة من الأقلية التي تريد فهم لغة الماكينة نفسها، أعتقد أنك تريد Intel® 64 و IA-32 هندسة معجزات تطوير البرمجيات. حجم 2 يغطي خصيصا مجموعة التعليمات، والذي يتعلق باستعلامك حول كيفية قراءة رمز الجهاز نفسه وكيف يتعلق التجميع به.

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

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