Struktur file PE: Difference between revisions
Created page with "Portable Execution (PE) adalah file executable yang digunakan dalam OS Windows (Kalo di Linux namanya ELF). Format ini menggantikan format MZ yang digunakan pada pendahulu Windows yaitu MS-DOS. PE memiliki struktur yang lebih fleksibel dan minim masalah. Menganalis PE file sangat krusial dalam malware analysis. File:Pe-structure.png <span id="mz-header"></span> = MZ Header = Pada era MS-DOS dan Windows masih berjalan berdampingan, kedua OS tersebut sama-sama memil..." |
|||
| (One intermediate revision by the same user not shown) | |||
| Line 139: | Line 139: | ||
[[File:Section-header.png|700px]] | [[File:Section-header.png|700px]] | ||
= Aplikasi Static Analysis PE File | = Aplikasi Static Analysis PE File = | ||
* | * CFF Explorer: https://ntcore.com/explorer-suite/ | ||
* | * PE Bear: https://github.com/hasherezade/pe-bear | ||
* | * pestudio: https://www.winitor.com/download | ||
Latest revision as of 13:13, 12 March 2025
Portable Execution (PE) adalah file executable yang digunakan dalam OS Windows (Kalo di Linux namanya ELF). Format ini menggantikan format MZ yang digunakan pada pendahulu Windows yaitu MS-DOS. PE memiliki struktur yang lebih fleksibel dan minim masalah. Menganalis PE file sangat krusial dalam malware analysis.
MZ Header
Pada era MS-DOS dan Windows masih berjalan berdampingan, kedua OS tersebut sama-sama memiliki file executable yang sama yaitu .exe. Lalu ada masalah yang muncul ketika aplikasi Windows dijalankan di MS-DOS, hal ini disebabkan oleh format eksekusi windows yang lebih kompleks dibandingkan MS-DOS. Solusi dari masalah ini adalah dengan menambahkan MZ Header yang akan menampilkan pesan “This program cannot be run in DOS mode.” Jika program tersebut dieksekusi pada MS-DOS.
MZ Header memiliki struktur utama yaitu:
- Signature (MZ / 0x4D5A) → Menandakan bahwa file ini adalah file eksekusi DOS.
- Pointer ke PE Header → Menunjukkan lokasi bagian Portable Executable (PE) yang berisi kode utama aplikasi Windows. Pointer ini ditandai dengan field e_lfanew
- Kode kecil DOS → Bertanggung jawab untuk mencetak pesan peringatan saat dijalankan di lingkungan DOS.
Jadi garis besar cara kerja MZ Header adalah:
Jika file
.exedijalankan di lingkungan DOS, kode kecil dalam MZ Header akan dijalankan dan menampilkan pesan peringatan.Jika file
.exedijalankan di Windows, sistem akan membaca pointer ke PE Header (e_lfanew) dan langsung melompati bagian DOS, lalu mengeksekusi bagian PE yang berisi kode aplikasi Windows.
PE Header
Setelah MZ Header dalam file Portable Executable (PE), terdapat struktur penting yang disebut PE Header. PE Header berfungsi sebagai titik awal bagi sistem operasi Windows untuk memahami bagaimana mengeksekusi program.
Struktur PE Header
PE Header dimulai dengan dua huruf “PE” (dalam heksadesimal: 0x50 0x45), yang merupakan signature yang menandakan bahwa file ini menggunakan format PE.
Setelah signature ini, PE Header terdiri dari dua bagian utama: File Header berisi informasi dasar tentang file PE, seperti:
File Header
Machine → Menunjukkan arsitektur prosesor yang dapat menjalankan file ini (misalnya,
0x8664untuk x86-64).Number of Sections → Jumlah section dalam file, seperti
.text,.data,.rdata, dll.TimeDateStamp → Waktu file dikompilasi.
Pointer to Symbol Table & Number of Symbols → Untuk debugging dan informasi simbol (jarang digunakan dalam executable final).
Size of Optional Header → Ukuran header opsional.
Characteristics → Properti file, misalnya apakah ini executable, DLL, dll.
Optional Header
Meskipun disebut “Optional”, sebenarnya header ini wajib ada untuk file executable (kecuali untuk file object). Bagian ini berisi informasi yang dibutuhkan sistem operasi untuk memuat file PE ke dalam memori. Berikut bagian-bagian optional header yang cukup penting:
- Magic → Menandakan apakah file ini untuk 32-bit (0x10B) atau 64-bit (0x20B)
- AddressOfEntryPoint*→ Alamat awal eksekusi program setelah dimuat ke memori.
- ImageBase → Alamat virtual dasar tempat file PE akan dimuat di memori.
- SectionAlignment & FileAlignment → Menentukan cara penyelarasan (alignment) data dalam memori dan dalam file.
- SizeOfImage & SizeOfHeaders → Ukuran total dari file ketika dimuat di memori.
- Subsystem → Menunjukkan apakah file ini adalah GUI, console, atau driver mode.
- DLL Characteristics → Berisi flag seperti DEP/NX compatibility, ASLR support, dll.
- subsystem →menunjukan jenis aplikasi yang dieksekusi. Contoh: menunjukan apakah itu aplikasi CLI, UI, atau POSIX (?)
Data Directory
adalah sebuah array yang menunjuk ke berbagai tabel atau header tambahan yang mungkin ada dalam file executable. Data Directory tidak selalu digunakan dalam setiap aplikasi, tetapi jika ada, ia akan menyimpan informasi penting mengenai bagaimana executable harus berinteraksi dengan sistem operasi.
Dua komponen utama Data Directory
| Field | Keterangan |
|---|---|
| Address | Pointer yang menunjuk ke awal header dalam memori |
| Size | Ukuran dari header atau tabel yang ditunjuk. |
Tidak semua entri dalam Data Directory relevan untuk analisis malware atau exploit development, tetapi berikut adalah beberapa yang paling sering digunakan:
- Import Table
- Menunjukkan daftar fungsi atau API yang digunakan oleh program, tetapi berasal dari file lain (seperti DLL – Dynamic Link Library ).
- Contoh: Jika sebuah aplikasi memanggil
MessageBoxA()dariuser32.dll, maka Import Table akan memiliki referensi ke fungsi tersebut. - Penting untuk malware analysis karena bisa menunjukkan fungsi API mana yang digunakan oleh malware untuk melakukan aksinya (seperti
WinExecatauLoadLibrary).
- Export Table
- Berisi daftar fungsi yang tersedia untuk dipakai oleh executable lain.
- Contoh:
kernel32.dllmengekspor banyak fungsi sepertiCreateFileA,ReadFile,WriteFile, dll. - Penting untuk exploit development , karena jika sebuah DLL memiliki fungsi yang bisa dieksploitasi (misalnya buffer overflow), kita bisa menyalahgunakannya.
- Resource Table
- Berisi informasi tentang sumber daya (resource) yang disertakan dalam executable, seperti ikon, gambar, string, dialog box, atau file lainnya .
- Penting dalam malware analysis , karena beberapa malware menyembunyikan kode berbahaya dalam resource section dan mengekstraknya saat runtime.
- Relocation Table
- Digunakan jika executable tidak bisa dimuat pada alamat memori yang diharapkan , sehingga alamat dalam kode harus disesuaikan (relokasi).
- Penting dalam exploit development , karena ASLR ( Address Space Layout Randomization ) sering memanfaatkan relocation untuk mencegah eksploitasi.
- TLS (Thread Local Storage) Table
- Digunakan untuk menjalankan kode sebelum
main()dipanggil . - Bisa digunakan untuk bypass debugger dengan mengeksekusi kode sebelum debugger mengambil kontrol atas program.
- Malware sering menggunakan TLS callbacks untuk menyembunyikan eksekusi awalnya dari debugger.
- Digunakan untuk menjalankan kode sebelum
Section Table
Section Table berisi daftar section dalam executable. Setiap section memiliki fungsi spesifik, seperti menyimpan kode program, data statis, atau informasi lainnya.Jumlah section dalam Section Table ditentukan oleh nilai dalam field NumberOfSections yang ada di FileHeader.
Struktur Section Table
Setiap section header memiliki beberapa field penting:
| Field | Keterangan |
|---|---|
| Name | Nama section (maksimal 8 byte, sering dalam format string). |
| VirtualAddress | Alamat awal section dalam memori (dalam bentuk RVA –Relative Virtual Address ). |
| VirtualSize | Ukuran section dalam memori (bisa lebih besar dari ukuran aslinya di disk karena padding). |
| SizeOfRawData | Ukuran section di hard disk (bisa lebih kecil dari ukuran di memori). |
| PointerToRawData | Offset awal section di dalam file PE di hard disk. |
| Characteristics | Flags yang menunjukkan izin akses (EXECUTE, READ, WRITE). |
Aplikasi Static Analysis PE File
- CFF Explorer: https://ntcore.com/explorer-suite/
- PE Bear: https://github.com/hasherezade/pe-bear
- pestudio: https://www.winitor.com/download





