Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

Share what I know............... learn what I don’t

(انجام پروژه های مرتبط، برای اطلاعات بیشتر به صفحه "ارتباط با من" مراجعه کنید)

آخرین نظرات

ماژولی برای آنالیز ایستای فایل های اجرایی

پنجشنبه, ۹ بهمن ۱۳۹۳، ۰۸:۰۳ ب.ظ

PeFile

یک ماژول بسیار مفید به زبان پایتون برای آنالیز static فایل اجرایی یا همون PE , که باهاش میشه به هدر ها و عناصر دیگه مثل جدول ورودی و ... دسترسی داشت.
برای کار با این ماژول و ابزارهایی که برای آنالیز ایستاتیک فایل های اجرایی تهیه شده اند, نیاز به آشنایی حدالامکان نسبی با ساختار این فایلها هستش.
میتونید توی همین وبلاگ مقاله آشنایی با فایل های اجرایی رو پیدا کنید.
این ماژول رو می تونید از اینجا دانلود کنید

چند مثال:
ماژول pefile دارای چندین کلاس هستش که میشه گفت پرکاربردترینش کلاس PE هستش که میشه اطلاعات زیادی رو از فایل اجرایی بدست آورد. در زیر چند نمونه از استفاده هاشو توضیح میدم.


1-برای لود کردن یک فایل اجرایی,کافیه از کلاس PE مثل زیر استفاده کنید:


pe = pefile.PE('module.dll')
pe = pefile.PE(name='module.dll')

همچنین می تونید از داده ها در بافر نیز استفاده کنید:

pe = pefile.PE(data=module_dll_data)


2-بررسی هدر ها

>>> import pefile
>>> pe = pefile.PE('C:\\notepad.exe')
>>> hex(pe.OPTIONAL_HEADER.ImageBase)
['0x1000000L']
>>> hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)
['0x6AE0L']
>>> hex(pe.OPTIONAL_HEADER.NumberOfRvaAndSizes )
['0x10L']
>>> hex(pe.FILE_HEADER.NumberOfSections)
['0x3']

3- بررسی سکشن ها:

>>> for section in pe.sections:
... print (section.Name,
hex(section.VirtualAddress),
hex(section.Misc_VirtualSize),
section.SizeOfRawData )
...
('.text', '0x1000L', '0x6D72L', 28160L)
('.data', '0x8000L', '0x1BA8L', 1536L)
('.rsrc', '0xA000L', '0x8948L', 35328L)



4- بررسی توابع ورودی :

>>> for entry in pe.DIRECTORY_ENTRY_IMPORT:
... print entry.dll
... for imp in entry.imports:
... print '\t', hex(imp.address), imp.name
...
comdlg32.dll
0x10012A0L PageSetupDlgW
0x10012A4L FindTextW
0x10012A8L PrintDlgExW

[snip]
SHELL32.dll
0x1001154L DragFinish
0x1001158L DragQueryFileW



یا یه مثال دیگه:

for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols:
  print hex(pe.OPTIONAL_HEADER.ImageBase + exp.address), exp.name, exp.ordinal

0x7ca0ab4f SHUpdateRecycleBinIcon 336
0x7cab44c0 SHValidateUNC 173
0x7ca7b0aa SheChangeDirA 337
0x7ca7b665 SheChangeDirExA 338
0x7ca7b3e1 SheChangeDirExW 339
0x7ca7aec6 SheChangeDirW 340
0x7ca8baae SheConvertPathW 341



میتونید کل اطلاعات فایل رو با یکی از 2 متد زیر بدست بیارید:

pe.print_info()
یا
pe.dump_info()


کلاس PE تعداد زیادی متد داره که میشه باهاش اطلاعات مختلفی رو بدست آورد مثلا بدست آوردن Checksum فایل:


>>> pe.generate_checksum()
95152L


یا بدست آوردن اطلاعات جزئی از RVA یا آفست و ...

ماشااله اونقد متد داره که نمیشه دونه دونه توضیح داد.ولی کلا کار با pefile آسونه کافیه یه نگاه به سورس کدش بندازید.

به غیر از کلاس PE کلاس های دیگه ای هم هستند که فک نکنم نیاز به توضیح داشته باشند چونکه زیاد به کار نمیان و بیشترشون توسط خود کلاس PE استفاده شدن.

  • موافقین ۰ مخالفین ۰
  • ۹۳/۱۱/۰۹
  • ۳۰۱ نمایش

آنالیز استاتیک

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی