Portable-Executable-ファイルフォーマットについて詳しく調べた
マルウエアデータサイエンス本を読み始めて少し触れたので、 Microsoft Docsとかcorkamiとか0xRick’s Blogを参考に調べた。
まずは用語から
今は飛ばして、後でわからなかったら戻ってきて。
用語 | 意味 |
---|---|
COFF | UNIXで使用される実行ファイル、オブジェクトファイル、共有ライブラリのフォーマット。PEはCOFFの拡張。 |
RVA | Relative Virtual Address でメモリ上でのImage Baseからの相対的なアドレス |
image file | EXE、DLL等の実行ファイル |
object file | リンカへの入力として与えられるファイル。リンカはobject fileからimage fileを生成し、それがローダーによる入力として使用される |
Relocation、再配置 | プログラムがメモリにロードされるときは基本OptionalHeader にあるImageBase にロードされるが、すでに使用されていたりメモリの確保に失敗した場合に行われる操作。 |
フォーマット
ざっくりいうと、以下から構成される。
- DOSヘッダ
- NTヘッダ(PEヘッダ)
- セクションヘッダ * セクションの数(セクションテーブルとも)
- セクション * セクションの数
ここからは詳しく見ていく。
DOSヘッダ
e_magic
:PEの場合マジックナンバーとして0x5A4D
(MZ)e_lfanew
:NTヘッダのOffset
NTヘッダ(PEヘッダ)
-
Signature
:PEの場合0x50450000
(PE\0\0) -
FileHeader
:構造体、詳細はこちらMachine
:使用されるCPUを記載。0x014c
=i386、0x8664
=x64NumberOfSections
TimeDateStamp
:ファイルが作成された日時PointerToSymbolTable
:シンボルテーブルのOffsetNumberOfSymbols
:シンボルテーブルのエントリの数SizeOfOptionalHeader
Characteristics
:ファイルの属性
-
OptiaonalHeader
:構造体、optionalって名前だけど必須、詳細はこちらMagic
:0x10b
=PE、0x20b
=PE32+MajorLinkerVersion
MinorLinkerVersion
SizeOfCode
:textセクションのサイズ、複数あれば合計でSizeOfInitializedData
:dataセクションのサイズ、複数あれば合計でSizeOfUninitializedData
:BSSセクションのサイズ、複数あれば合計でAddressOfEntryPoint
:メモリ上におけるimage baseからのエントリーポイントの相対的なアドレスBaseOfCode
:メモリ上におけるimage baseからのtextセクションの開始位置の相対的なアドレス
移行はWindows特有のフィールド
ImageBase
:PEがメモリにロードされるときのperferredなアドレス。デフォルトはDLL=0x10000000
、Windows CE EXE=0x00010000
、Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98, and Windows Me=0x00400000
SectionAlignment
:各セクションがメモリにロードされる際のAlignmentFileAlignment
:各セクションのファイル内のAlignmentMajorOperatingSystemVersion
/MinorOperatingSystemVersion
MajorImageVersion
/MinorImageVersion
MajorSubsystemVersion
/MinorSubsystemVersion
Win32VersionValue
SizeOfImage
:メモリロード時のサイズ、SectionAlignment
の倍数になるSizeOfHeaders
:DOSヘッダ、NTヘッダ(PEヘッダ)、セクションヘッダの合計サイズをFile Alignment
の倍数で切り上げた値CheckSum
Subsystem
:詳細はこちらDllCharacteristics
:詳細はこちらSizeOfStackReserve
:確保したいスタックのサイズSizeOfStackCommit
:確約されるスタックのサイズSizeOfHeapReserve
SizeOfHeapCommit
LoaderFlags
NumberOfRvaAndSizes
:OptiaonalHeader
の残り部分にある各Data Directoryエントリの位置とサイズ(DIRECTORY_ENTRY_EXPORT
、DIRECTORY_ENTRY_EXPORT
から始まってIMAGE_DIRECTORY_ENTRY_RESERVED
までのことを言ってるっぽい)Note that the number of directories is not fixed. Before looking for a specific directory, check the NumberOfRvaAndSizes field in the optional header. の記載あり
セクションヘッダ
以下のフィールドがセクションの数だけ存在する。
Name
VirtualSize
:メモリロード時のそのセクションの合計サイズVirtualAddress
:メモリロード時のそのセクションのImage Baseからの相対的なアドレスSizeOfRawData
:ファイル上でのセクションのサイズPointerToRawData
PointerToRelocations
:そのセクションのrelocation
エントリへのファイルポインタPointerToLinenumbers
NumberOfRelocations
NumberOfLinenumbers
Characteristics
:各セクションにつける属性。詳細はこちら
セクション
セクションの数だけ存在する。
セクション | 説明 |
---|---|
.text | 実行可能なコード |
.data | 初期化されたデータ |
.bss | 初期化されていないデータ |
.rdata | Read-Onlyの初期化されたデータ |
.eata | Export Tableが含まれる |
.idata | Import Table |
.reloc | 再配置に関する情報 |
.rsrc | 画像やアイコンや埋め込まれたバイナリなど、プログラムによって使われるリソース |
.tls | プログラムの実行中のスレッドが使用するストレージ(Thread Local Storage) |
pythonのpefileで分析
まずはprint_info()で全体を見る
{% highlight python %} import pefile
pe = pefile.PE(“xxx.exe”) pe.print_info() {% endhighlight %}
----------Parsing Warnings----------
AddressOfEntryPoint lies outside the sections' boundaries. AddressOfEntryPoint: 0xcc00ffee
----------DOS_HEADER----------
[IMAGE_DOS_HEADER]0x0 0x0 e_magic: 0x5A4D0x2 0x2 e_cblp: 0x900x4 0x4 e_cp: 0x30x6 0x6 e_crlc: 0x00x8 0x8 e_cparhdr: 0x40xA 0xA e_minalloc: 0x00xC 0xC e_maxalloc: 0xFFFF0xE 0xE e_ss: 0x00x10 0x10 e_sp: 0xB80x12 0x12 e_csum: 0x00x14 0x14 e_ip: 0x00x16 0x16 e_cs: 0x00x18 0x18 e_lfarlc: 0x400x1A 0x1A e_ovno: 0x00x1C 0x1C e_res:0x24 0x24 e_oemid: 0x00x26 0x26 e_oeminfo: 0x00x28 0x28 e_res2:0x3C 0x3C e_lfanew: 0xE0
----------NT_HEADERS----------
[IMAGE_NT_HEADERS]0xE0 0x0 Signature: 0x4550
----------FILE_HEADER----------
[IMAGE_FILE_HEADER]0xE4 0x0 Machine: 0x14C0xE6 0x2 NumberOfSections: 0x50xE8 0x4 TimeDateStamp: 0x4F79D506 [Mon Apr 2 16:34:14 2012 UTC]0xEC 0x8 PointerToSymbolTable: 0x00xF0 0xC NumberOfSymbols: 0x00xF4 0x10 SizeOfOptionalHeader: 0xE00xF6 0x12 Characteristics: 0x10FFlags: IMAGE_FILE_32BIT_MACHINE, IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LINE_NUMS_STRIPPED, IMAGE_FILE_LOCAL_SYMS_STRIPPED, IMAGE_FILE_RELOCS_STRIPPED
----------OPTIONAL_HEADER----------
[IMAGE_OPTIONAL_HEADER]0xF8 0x0 Magic: 0x10B0xFA 0x2 MajorLinkerVersion: 0x60xFB 0x3 MinorLinkerVersion: 0x00xFC 0x4 SizeOfCode: 0x32A000x100 0x8 SizeOfInitializedData: 0x642000x104 0xC SizeOfUninitializedData: 0x00x108 0x10 AddressOfEntryPoint: 0xCC00FFEE0x10C 0x14 BaseOfCode: 0x10000x110 0x18 BaseOfData: 0x10000x114 0x1C ImageBase: 0x4000000x118 0x20 SectionAlignment: 0x10000x11C 0x24 FileAlignment: 0x2000x120 0x28 MajorOperatingSystemVersion: 0x40x122 0x2A MinorOperatingSystemVersion: 0x00x124 0x2C MajorImageVersion: 0x00x126 0x2E MinorImageVersion: 0x00x128 0x30 MajorSubsystemVersion: 0x40x12A 0x32 MinorSubsystemVersion: 0x00x12C 0x34 Reserved1: 0x00x130 0x38 SizeOfImage: 0x9A0000x134 0x3C SizeOfHeaders: 0x10000x138 0x40 CheckSum: 0x00x13C 0x44 Subsystem: 0x20x13E 0x46 DllCharacteristics: 0x00x140 0x48 SizeOfStackReserve: 0x1000000x144 0x4C SizeOfStackCommit: 0x10000x148 0x50 SizeOfHeapReserve: 0x1000000x14C 0x54 SizeOfHeapCommit: 0x10000x150 0x58 LoaderFlags: 0x00x154 0x5C NumberOfRvaAndSizes: 0x10DllCharacteristics:
----------PE Sections----------
[IMAGE_SECTION_HEADER]0x1D8 0x0 Name: .text0x1E0 0x8 Misc: 0x328300x1E0 0x8 Misc_PhysicalAddress: 0x328300x1E0 0x8 Misc_VirtualSize: 0x328300x1E4 0xC VirtualAddress: 0x10000x1E8 0x10 SizeOfRawData: 0x32A000x1EC 0x14 PointerToRawData: 0x4000x1F0 0x18 PointerToRelocations: 0x00x1F4 0x1C PointerToLinenumbers: 0x00x1F8 0x20 NumberOfRelocations: 0x00x1FA 0x22 NumberOfLinenumbers: 0x00x1FC 0x24 Characteristics: 0x60000020Flags: IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READEntropy: 4.457650 (Min=0.0, Max=8.0)MD5 hash: c3a764364d86547f51d0635201e60562SHA-1 hash: 3d2230cbe03391be7e5c3766a189b70e0579cb03SHA-256 hash: 46c2cd9f69b24ce045edeb26a2ebbbaf218974428c493ad6dc8626bed681b7ddSHA-512 hash: 86ad1fb65a5643128fb53751be0534f3d2b2625f2ec13fe40dad3a762b24fe6f86290128ace56bc62f95eb8598629a1de07cb6145d30e50e965fadb07f4c2d1e
[IMAGE_SECTION_HEADER]0x200 0x0 Name: .rdata0x208 0x8 Misc: 0x427A0x208 0x8 Misc_PhysicalAddress: 0x427A0x208 0x8 Misc_VirtualSize: 0x427A0x20C 0xC VirtualAddress: 0x340000x210 0x10 SizeOfRawData: 0x44000x214 0x14 PointerToRawData: 0x32E000x218 0x18 PointerToRelocations: 0x00x21C 0x1C PointerToLinenumbers: 0x00x220 0x20 NumberOfRelocations: 0x00x222 0x22 NumberOfLinenumbers: 0x00x224 0x24 Characteristics: 0x40000040Flags: IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READEntropy: 5.164174 (Min=0.0, Max=8.0)MD5 hash: 17fb67e3c303ff7092caa8336ecd7343SHA-1 hash: c6b2ea68634623aebbb6cdb8c750af9593c6c440SHA-256 hash: 6be910898286e002634e51239fabac5d4323f99094829072f43d14cc4293c9c8SHA-512 hash: 3861674650879fcfd123f9695254b8e3e49b9eab710fcd98c97c4b3f5003dfc7e18072aa4ab7f7858519e469d9f56b979402122c0e15e164979a12e3535d624a
[IMAGE_SECTION_HEADER]0x228 0x0 Name: .data0x230 0x8 Misc: 0x5CFF80x230 0x8 Misc_PhysicalAddress: 0x5CFF80x230 0x8 Misc_VirtualSize: 0x5CFF80x234 0xC VirtualAddress: 0x390000x238 0x10 SizeOfRawData: 0x2A000x23C 0x14 PointerToRawData: 0x372000x240 0x18 PointerToRelocations: 0x00x244 0x1C PointerToLinenumbers: 0x00x248 0x20 NumberOfRelocations: 0x00x24A 0x22 NumberOfLinenumbers: 0x00x24C 0x24 Characteristics: 0xC0000040Flags: IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITEEntropy: 2.528280 (Min=0.0, Max=8.0)MD5 hash: 40bb262272a927dfc9de741f931df366SHA-1 hash: f8c680d52fc42186397201d7e1b9959796278ccbSHA-256 hash: 642649d18a65bffdb10cf2273eddb4b35de4283bf65c627bd8557bc2c15756a3SHA-512 hash: ab7f61643074084fa9ed52ae2e2f02baa98f8599b0cef025d6b43ce7cab64064ee06b9ced3469fd0094f1862bb7f212f88f377371cc8e0a26e0c51a0f0768600
[IMAGE_SECTION_HEADER]0x250 0x0 Name: .idata0x258 0x8 Misc: 0xBB00x258 0x8 Misc_PhysicalAddress: 0xBB00x258 0x8 Misc_VirtualSize: 0xBB00x25C 0xC VirtualAddress: 0x960000x260 0x10 SizeOfRawData: 0xC000x264 0x14 PointerToRawData: 0x39C000x268 0x18 PointerToRelocations: 0x00x26C 0x1C PointerToLinenumbers: 0x00x270 0x20 NumberOfRelocations: 0x00x272 0x22 NumberOfLinenumbers: 0x00x274 0x24 Characteristics: 0xC0000040Flags: IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITEEntropy: 3.487657 (Min=0.0, Max=8.0)MD5 hash: 4f5feb5038667a10ab5d11233c82be9aSHA-1 hash: 2fb0d65ec13c59f2d8a58dca8e956da73fd1db50SHA-256 hash: 346075b0245609ed4a673f4db7a5b2b335835f41b3b3fe0ff97fa853d73e8a70SHA-512 hash: 7e6b255f8fdb315423d923e6b77ea46050018fafac4b15553e5ee2896c73c30f6b5980406cdd14ae2413de03f89784906d9f38ce859b1d7781b79e9ae5357a41
[IMAGE_SECTION_HEADER]0x278 0x0 Name: .reloc0x280 0x8 Misc: 0x211D0x280 0x8 Misc_PhysicalAddress: 0x211D0x280 0x8 Misc_VirtualSize: 0x211D0x284 0xC VirtualAddress: 0x970000x288 0x10 SizeOfRawData: 0x22000x28C 0x14 PointerToRawData: 0x3A8000x290 0x18 PointerToRelocations: 0x00x294 0x1C PointerToLinenumbers: 0x00x298 0x20 NumberOfRelocations: 0x00x29A 0x22 NumberOfLinenumbers: 0x00x29C 0x24 Characteristics: 0x42000040Flags: IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READEntropy: 0.000000 (Min=0.0, Max=8.0)MD5 hash: d946c4e00b10be82f8d142f508ece41dSHA-1 hash: 87149ca9fc689d0d02866276f9112adbdeea06f2SHA-256 hash: e8b31e302d11fbf7da124b537ba2d44f88e165da03c6557e2b0f6dc486e025bbSHA-512 hash: b30f8b91e7591ec872bf52a792bc1a6f97bc368c7ebe7538d87d220608d1d7d3dca20afb27b711a6b81b70c477507df3dac27095b01e2864dee6e21404998872
----------Directories----------
[IMAGE_DIRECTORY_ENTRY_EXPORT]0x158 0x0 VirtualAddress: 0x00x15C 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_IMPORT]0x160 0x0 VirtualAddress: 0x960000x164 0x4 Size: 0x3C[IMAGE_DIRECTORY_ENTRY_RESOURCE]0x168 0x0 VirtualAddress: 0x00x16C 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_EXCEPTION]0x170 0x0 VirtualAddress: 0x00x174 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_SECURITY]0x178 0x0 VirtualAddress: 0x00x17C 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_BASERELOC]0x180 0x0 VirtualAddress: 0x00x184 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_DEBUG]0x188 0x0 VirtualAddress: 0x00x18C 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_COPYRIGHT]0x190 0x0 VirtualAddress: 0x00x194 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_GLOBALPTR]0x198 0x0 VirtualAddress: 0x00x19C 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_TLS]0x1A0 0x0 VirtualAddress: 0x00x1A4 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG]0x1A8 0x0 VirtualAddress: 0x00x1AC 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]0x1B0 0x0 VirtualAddress: 0x00x1B4 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_IAT]0x1B8 0x0 VirtualAddress: 0x00x1BC 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT]0x1C0 0x0 VirtualAddress: 0x00x1C4 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR]0x1C8 0x0 VirtualAddress: 0x00x1CC 0x4 Size: 0x0[IMAGE_DIRECTORY_ENTRY_RESERVED]0x1D0 0x0 VirtualAddress: 0x00x1D4 0x4 Size: 0x0
----------Imported symbols----------
[IMAGE_IMPORT_DESCRIPTOR]0x39C00 0x0 OriginalFirstThunk: 0x00x39C00 0x0 Characteristics: 0x00x39C04 0x4 TimeDateStamp: 0x0 [Thu Jan 1 00:00:00 1970 UTC]0x39C08 0x8 ForwarderChain: 0x00x39C0C 0xC Name: 0x964240x39C10 0x10 FirstThunk: 0x96230
KERNEL32.DLL.GetLocalTime Hint[0]KERNEL32.DLL.ExitThread Hint[0]KERNEL32.DLL.CloseHandle Hint[0]KERNEL32.DLL.WriteFile Hint[0]KERNEL32.DLL.CreateFileA Hint[0]KERNEL32.DLL.ExitProcess Hint[0]KERNEL32.DLL.CreateProcessA Hint[0]KERNEL32.DLL.GetTickCount Hint[0]KERNEL32.DLL.GetModuleFileNameA Hint[0]KERNEL32.DLL.GetSystemDirectoryA Hint[0]KERNEL32.DLL.Sleep Hint[0]KERNEL32.DLL.GetTimeFormatA Hint[0]KERNEL32.DLL.GetDateFormatA Hint[0]KERNEL32.DLL.GetLastError Hint[0]KERNEL32.DLL.CreateThread Hint[0]KERNEL32.DLL.GetFileSize Hint[0]KERNEL32.DLL.GetFileAttributesA Hint[0]KERNEL32.DLL.FindClose Hint[0]KERNEL32.DLL.FileTimeToSystemTime Hint[0]KERNEL32.DLL.FileTimeToLocalFileTime Hint[0]KERNEL32.DLL.FindNextFileA Hint[0]KERNEL32.DLL.FindFirstFileA Hint[0]KERNEL32.DLL.ReadFile Hint[0]KERNEL32.DLL.SetFilePointer Hint[0]KERNEL32.DLL.WriteConsoleA Hint[0]KERNEL32.DLL.GetStdHandle Hint[0]KERNEL32.DLL.LoadLibraryA Hint[0]KERNEL32.DLL.GetProcAddress Hint[0]KERNEL32.DLL.GetModuleHandleA Hint[0]KERNEL32.DLL.FormatMessageA Hint[0]KERNEL32.DLL.GlobalUnlock Hint[0]KERNEL32.DLL.GlobalLock Hint[0]KERNEL32.DLL.UnmapViewOfFile Hint[0]KERNEL32.DLL.MapViewOfFile Hint[0]KERNEL32.DLL.CreateFileMappingA Hint[0]KERNEL32.DLL.SetFileTime Hint[0]KERNEL32.DLL.GetFileTime Hint[0]KERNEL32.DLL.ExpandEnvironmentStringsA Hint[0]KERNEL32.DLL.SetFileAttributesA Hint[0]KERNEL32.DLL.GetTempPathA Hint[0]KERNEL32.DLL.GetCurrentProcess Hint[0]KERNEL32.DLL.TerminateProcess Hint[0]KERNEL32.DLL.OpenProcess Hint[0]KERNEL32.DLL.GetComputerNameA Hint[0]KERNEL32.DLL.GetLocaleInfoA Hint[0]KERNEL32.DLL.GetVersionExA Hint[0]KERNEL32.DLL.TerminateThread Hint[0]KERNEL32.DLL.FlushFileBuffers Hint[0]KERNEL32.DLL.SetStdHandle Hint[0]KERNEL32.DLL.IsBadWritePtr Hint[0]KERNEL32.DLL.IsBadReadPtr Hint[0]KERNEL32.DLL.HeapValidate Hint[0]KERNEL32.DLL.GetStartupInfoA Hint[0]KERNEL32.DLL.GetCommandLineA Hint[0]KERNEL32.DLL.GetVersion Hint[0]KERNEL32.DLL.DebugBreak Hint[0]KERNEL32.DLL.InterlockedDecrement Hint[0]KERNEL32.DLL.OutputDebugStringA Hint[0]KERNEL32.DLL.InterlockedIncrement Hint[0]KERNEL32.DLL.HeapAlloc Hint[0]KERNEL32.DLL.HeapReAlloc Hint[0]KERNEL32.DLL.HeapFree Hint[0]KERNEL32.DLL.HeapDestroy Hint[0]KERNEL32.DLL.HeapCreate Hint[0]KERNEL32.DLL.VirtualFree Hint[0]KERNEL32.DLL.VirtualAlloc Hint[0]KERNEL32.DLL.WideCharToMultiByte Hint[0]KERNEL32.DLL.MultiByteToWideChar Hint[0]KERNEL32.DLL.LCMapStringA Hint[0]KERNEL32.DLL.LCMapStringW Hint[0]KERNEL32.DLL.GetCPInfo Hint[0]KERNEL32.DLL.GetACP Hint[0]KERNEL32.DLL.GetOEMCP Hint[0]KERNEL32.DLL.UnhandledExceptionFilter Hint[0]KERNEL32.DLL.FreeEnvironmentStringsA Hint[0]KERNEL32.DLL.FreeEnvironmentStringsW Hint[0]KERNEL32.DLL.GetEnvironmentStrings Hint[0]KERNEL32.DLL.GetEnvironmentStringsW Hint[0]KERNEL32.DLL.SetHandleCount Hint[0]KERNEL32.DLL.GetFileType Hint[0]KERNEL32.DLL.RtlUnwind Hint[0]KERNEL32.DLL.SetConsoleCtrlHandler Hint[0]KERNEL32.DLL.GetStringTypeA Hint[0]KERNEL32.DLL.GetStringTypeW Hint[0]KERNEL32.DLL.SetEndOfFile Hint[0]
[IMAGE_IMPORT_DESCRIPTOR]0x39C14 0x0 OriginalFirstThunk: 0x00x39C14 0x0 Characteristics: 0x00x39C18 0x4 TimeDateStamp: 0x0 [Thu Jan 1 00:00:00 1970 UTC]0x39C1C 0x8 ForwarderChain: 0x00x39C20 0xC Name: 0x964310x39C24 0x10 FirstThunk: 0x963F4
USER32.dll.MessageBoxA Hint[0]
各セクションを見る
{% highlight python %} import pefile
pe = pefile.PE(“ircbot.exe”)
for section in pe.sections: print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData) {% endhighlight %}
インポートされたシンボルを見る
{% highlight python %} import pefile
pe = pefile.PE(“ircbot.exe”)
for entry in pe.DIRECTORY_ENTRY_IMPORT: print(entry.dll) for i in entry.imports: print(‘\t’, i.name, ‘\t’, hex(i.address)) {% endhighlight %}
おまけ
icoutilsのwrestoolで画像を取り出す
mkdir imagesmkdir output
# xxx.exeに含まれる画像をimagesに吐き出して、wrestool -x xxx.exe -o images
# pngに変換してoutputに吐き出すicotool -x -o output images/*
stringsコマンドででファイル内の文字列を表示する
strings xxx.exe
このexeファイルが持っていそうな機能に見当をつけることができる。例えば
- ファイルをダウンロードすることができそう
- Webサーバの機能を持っていて外部からの通信を待ち受けることができそう など。