سؤال

لقد رأيت قيمة غريبة في رأس EXE

00000000 :4D 5A 90 00 03 00 00 00 - 04 00 00 00 FF FF 00 00
00000010 :B8 00 00 00 00 00 00 00 - 40 00 00 00 00 00 00 00
00000020 :00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00 <-

لا أعرف ما هو A8 القيام به هناك ولكن إذا استبدلته بأصفار لا يتم تنفيذ برنامجي.

في كلمة واحدة: ما هذا؟

أيضا ، هل يمكن أن تعطيني أيضًا رابطًا لرأس MS DOS الكامل؟

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

المحلول

Dword at Offset 0x3C هو إزاحة رأس EXE الجديد ، ويعرف أيضًا باسم Image_nt_headers. لذلك إذا قمت بتغيير القيمة هناك ، فلن يتمكن محمل PE من العثور على رأس EXE الجديد.

نصائح أخرى

الجزء الأول من PE هو كعب MSDOS. في 0x3C (حيث يكون "A8") هناك إزاحة لتوقيع ملف PE. إذا قمت بتصنيفها ، فلن يتمكن المحمل من العثور على توقيع PE ، وسوف يرفض تحميله (أو تحميله على أنه مجرد MS-DOS قابل للتنفيذ ، لم أحاول). لمزيد من المعلومات ، راجع مواصفات تنسيق PE.

أظن أنه هو إزاحة رأس PE الجديد ، أول 30 بايت غريبة هي رأس MS-DOS ، الذي يقابله في الملف الذي يتواجد فيه "A8" في الحقل في الهيكل _IMAGE_DOS_HEADER اتصل LONG e_lfanew; // File address of new exe header؛ هذه هي القيمة "A8" ستكون جزءًا من الجديد IMAGE_NT_HEADER الذي يحتوي على هذه المعلومات

  • توقيع DWORD ؛
  • _image_file_header fileHeader ؛
  • _image_optional_header اختياري ؛

أول بايتان هما رأس MS-DOS الأصلي في القابل للتنفيذ كما هو موضح في هذا الثابت: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; ؛ يحتوي Image_nt_header على هذا التوقيع لتحديد أنه قابل للتنفيذ لمنصات NT DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

ستجد كل هذه المعلومات في ملف رأس يسمى pe.h.

ما حدث هناك هو أنك قضت على القيمة "A8" ، لم يستطع اللودر العثور على ملف IMAGE_NT_HEADER وبالتالي فشلت.

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