كيف يمكنني قراءة الرؤوس من ملف قابل للتنفيذ محمول باستخدام Perl؟
-
07-07-2019 - |
سؤال
أرغب في العمل مع ملفات PE في Perl ولم أجد وحدة نمطية ، لذلك أعتقد أنني سأكتب بلدي (فعلت ذلك بالفعل في Delphi مرة واحدة).
لقد حصلت على مشكلة واحدة فقط ، عند تعيين القابل للتنفيذ إلى المخزن المؤقت ، كيف يمكنني البحث عن أوكتات مثل 0x00004550 (Image_nt_signature) ، وتحويلها إلى السلاسل القابلة للكتابة وما إلى ذلك؟
المحلول
هناك هو وحدة بيرل لمعالجة التنفيذيين المحمولة: Win32::Exe
.
ليس لدي أدنى فكرة عن سؤالك الدقيق ، ولكن إذا كنت لا تزال ترغب في كتابة مكتبتك الخاصة ، Win32::Exe
قد يكون مرجعا جيدا.
نصائح أخرى
لتحويل هذه القيمة إلى تمثيل بايت ، استخدم pack
. الثابت الذي تتعامل معه هو قيمة 32 بت صغيرة ، لذلك "V" في القالب.
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
نرى perldoc -f pack
للتفاصيل.
ربما لن تحتاج إلى البحث عن سلاسل مثل "pe 0 0" ، فقط استخدمها للتحقق مما إذا كان الملف الذي تقرأه هو في الواقع ملف PE. عادةً ما يأتي قسم "PE" مباشرة بعد قسم DOS ('MZ') الذي يحتوي على حقل الطول الخاص به.
(أوافق على ذلك Win32::Exe
قد يستحق نظرة ، اعتمادًا على ما تريد القيام به.)