Tuesday, January 10, 2012

Tutorial Injeksi Executable – Splash Screen

Pernahkah Anda melihat Splash Screen bergambar pada sebuah software, entah itu software
trial utilities, Game dan lainnya? Artikel ini akan menunjukkan kepada Anda bagaimana cara
menyisipkan sebuah Splash Screen bergambar dengan menggunakan bitmap yang akan muncul secara
otomatis setiap kali software dijalankan. Artikel ini sedikit banyak hampir sama dengan artikel
sebelumnya “Tutorial Injeksi Executable – MessageBox”. Pembahasan masih dalam lingkup
Portable Executable (PE). Yang membedakan pada artikel kali ini adalah teknik pada penerapan injeksi.
Sebelum membaca artikel ini Saya harap Anda mempunyai latar belakang atau dasar
pemrograman bahasa C/C++/ASM, Portable Executable dan Reverse Engineering. Hal tersebut akan
membantu dan mempermudah Anda untuk memahami artikel ini. Maaf, Saya sudah berusaha
menyederhanakan pembahasan pada artikel ini agar bisa dipahami oleh semua orang, namun jika masih
sulit dipahami Saya mohon maaf. Karena dasar ilmu Saya adalah dunia peternakan bukan komputer, jadi
Saya tidak bisa menjelaskan dengan gaya bicara programmer pada umumnya.. :)
Beberapa hal yang perlu Anda persiapkan adalah :
  1. IID King v1.0 buatan SantMat dari tim Reverse Engineering Immortal Descendants.
  2. Notepad atau teks editor yang Anda sukai.
  3. Assembler (Saya menggunakan Microsoft Macro Assembler atau MASM link download silahkan cari di Google).
  4. Target file executable.
  5. Palmall cigarettes, a cup of coffe and Cradle of Filth-Beyond Eleventh Hour.mp3 (Anti ngantuk :) )
  6. MRHPx Splash Add, program ini mampu menyisipkan Splash Screen bitmap secara instant. Anda
bisa mempergunakan program ini jika Anda bosan membaca artikel Saya.
CATATAN : File target, source code dan tool telah disertakan bersama artikel ini. Jika tidak tersedia Anda
bisa mendownloadnya di website Saya. Untuk mendapatkan source code yang lain, silahkan melalui
kontak email Saya.

Teori Yang Membosankan
Sedikit berbicara tentang teori. Menyisipkan sebuah kode Splash Screen seperti Dialog Window
(Jendela) dan resource eksternal pada file executable bukanlah hal yang mudah, semuanya tergantung
pada keahlian Reverse Engineering yang Anda miliki, karena jika terjadi kesalahan akan membuat file
executable menjadi rusak. Terlebih lagi persoalan menjadi semakin rumit jika Anda menghadapi file
executable yang tidak memiliki resource ataupun IMPORT API LIBRARY yang diperlukan. Karena tidak
seorangpun di dunia ini yang rela menghabiskan waktunya di depan komputer melakukan puluhan
proses injeksi hanya untuk membuat jendela dialog membosankan yang bernama “Splash Screen” pada
sebuah file executable..:)
Untuk menyisipkan sebuah file bergambar atau bitmap image sebenarnya sangat mungkin untuk
diterapkan pada file Portable Executable (PE). Cara yang bisa dipergunakan salah satunya adalah dengan
membuat file DLL (Dinamic Link Library) sebagai resource dari Splash Screen bitmap. Setelah proses
injeksi, program akan menjalankan fungsi EXPORT LIBRARY yang terdapat pada file DLL. Meskipun hal
tersebut mungkin sedikit menghabiskan waktu daripada menyisipkan sebuah kode sederhana.

Step 1 : Membuat file Dynamic Link Library (DLL) dengan Assembly
a) The DLL
Fungsi DllEntryPoint adalah suatu metode masukan opsional ke dalam sebuah dynamic-link
library (DLL). Jika fungsi dipergunakan, maka akan dipanggil oleh sistem saat proses dan thread
diinisialisasi dan diakhiri, atau saat dipanggil ke fungsi LoadLibrary dan FreeLibrary.
DllEntry Proc hInst:DWord, reason:DWord, reserved1:DWord
.If reason==DLL_PROCESS_ATTACH
Push hInst
Pop hInstance
Call ShowBitMap
.EndIf
Mov Eax,TRUE
Ret
DllEntry EndP
b) The Bitmap
Proses ini dipergunakan untuk menampilkan Bitmap image Splash Screen yang berada pada
resource. Pada proses ini terdapat beberapa struktur yang dipergunakan antara lain :
- WNDCLASSEX
Import Library : -
Header File : winuser.h
Struktur WNDCLASSEX berisi informasi kelas window. Dipergunakan bersama fungsi
RegisterClassEx dan GetClassInfoEx. Struktur WNDCLASSEX mirip dengan struktur WNDCLASS.
Terdapat 2 perbedaan. WNDCLASSEX meliputi anggota cbSize, yang menetapkan struktur
ukuran, dan anggota hIconSm, yang berisi handle terhadap sebuah ikon kecil yang berhubungan
dengan kelas jendela.
- MSG
Import Library : -
Header File : winuser.h
Struktur MSG berisi informasi pesan dari suatu thread urutan pesan.
- CreateWindowEx
Import Library : user32.lib
Header File : winuser.h
Fungsi CreateWindowEx menciptakan suatu overlap, pop-up, atau anak jendela dengan suatu
perluasan gaya. Fungsi ini identik dengan fungsi CreateWindow.
ShowBitMap Proc
Local wc:WNDCLASSEX
Local msg:MSG
Local hwnd:HWND
Mov wc.cbSize, SizeOf WNDCLASSEX
Mov wc.style, CS_HREDRAW Or CS_VREDRAW
Mov wc.lpfnWndProc, Offset WndProc
Mov wc.cbClsExtra, NULL
Mov wc.cbWndExtra, NULL
Push hInstance
Pop wc.hInstance
Mov wc.hbrBackground, COLOR_WINDOW+1
Mov wc.lpszMenuName, NULL
Mov wc.lpszClassName, Offset NamaKelas
Invoke LoadIcon, NULL, IDI_APPLICATION
Mov wc.hIcon, Eax
Mov wc.hIconSm, 0
Invoke LoadCursor, NULL, IDC_ARROW
Mov wc.hCursor, Eax
Invoke RegisterClassEx, Addr wc
Invoke CreateWindowEx, NULL, Addr NamaKelas, NULL,\
WS_POPUP, CW_USEDEFAULT,\
CW_USEDEFAULT, 257, 309, NULL, NULL,\
hInstance, NULL
Mov hwnd, Eax
Invoke ShowWindow, hwnd, SW_SHOWNORMAL
.While TRUE
Invoke GetMessage, Addr msg, NULL, 0, 0
.Break .If (!Eax)
Invoke TranslateMessage, Addr msg
Invoke DispatchMessage, Addr msg
.EndW
Mov Eax, msg.wParam
Ret
ShowBitMap EndP
c) The Window
Proses ini dipergunakan untuk menampilkan jendela dialog. Pada proses ini terdapat beberapa
struktur yang dipergunakan antara lain :
- PAINTSTRUCT
Import Library : -
Header File : winuser.h
Struktur PAINTSTRUCT berisi informasi untuk sebuah aplikasi. Informasi ini bisa dipergunakan
untuk mengecat area klien pada suatu jendela yang dimiliki oleh aplikasi.
- RECT
Import Library : -
Header File : windef.h
Struktur RECT menggambarkan kordinat sudut kiri atas dan kanan bawah sebuah segi empat.
- Timer
Import Library : user-defined
Header File : winuser.h
Fungsi TimerProc adalah suatu fungsi gambaran-aplikasi callback yang memproses pesan
WM_TIMER.
WndProc Proc hWnd:DWord,uMsg:DWord,wParam:DWord,lParam:DWord
Local ps:PAINTSTRUCT
Local hdc:HDC
Local hMemoryDC:HDC
Local hOldBmp:DWord
Local bitmap:BITMAP
Local DlgHeight:DWord
Local DlgWidth:DWord
Local DlgRect:RECT
Local DesktopRect:RECT
.If uMsg==WM_DESTROY
.If PenangananBitmap!=0
Invoke DeleteObject, PenangananBitmap
.EndIf
Invoke PostQuitMessage, NULL
.ElseIf uMsg==WM_CREATE
Invoke GetWindowRect, hWnd, Addr DlgRect
Invoke GetDesktopWindow
Mov Ecx, Eax
Invoke GetWindowRect, Ecx, Addr DesktopRect
Push 0
Mov Eax, DlgRect.bottom
Sub Eax, DlgRect.top
Mov DlgHeight, Eax
Push Eax
Mov Eax, DlgRect.right
Sub Eax, DlgRect.left
Mov DlgWidth, Eax
Push Eax
Mov Eax, DesktopRect.bottom
Sub Eax, DlgHeight
Shr Eax, 1
Push Eax
Mov Eax, DesktopRect.right
Sub Eax, DlgWidth
Shr Eax, 1
Push Eax
Push hWnd
Call MoveWindow
Invoke LoadBitmap, hInstance, Addr NamaBitmap
Mov PenangananBitmap, Eax
Invoke SetTimer, hWnd, 1, 5000, NULL
Mov Timernya,Eax
.ElseIf uMsg==WM_TIMER
Invoke SendMessage, hWnd, WM_LBUTTONDOWN, NULL, NULL
Invoke KillTimer, hWnd, Timernya
.ElseIf uMsg==WM_PAINT
Invoke BeginPaint, hWnd, Addr ps
Mov hdc, Eax
Invoke CreateCompatibleDC, hdc
Mov hMemoryDC, Eax
Invoke SelectObject, Eax, PenangananBitmap
Mov hOldBmp, Eax
Invoke GetObject, PenangananBitmap, SizeOf BITMAP, Addr bitmap
Invoke StretchBlt, hdc, 0, 0, 257, 309,\
hMemoryDC, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY
Invoke SelectObject, hMemoryDC, hOldBmp
Invoke DeleteDC, hMemoryDC
Invoke EndPaint, hWnd, Addr ps
.ElseIf uMsg==WM_LBUTTONDOWN
Invoke DestroyWindow, hWnd
.Else
Invoke DefWindowProc, hWnd, uMsg, wParam, lParam
Ret
.EndIf
Xor Eax, Eax
Ret
WndProc EndP
d) The Export
Agar file DLL bisa berjalan normal, Anda harus membuat file *.DEF, misal : Splash.Def. Agar fungsi export
bisa berada dalam export tabel DLL. Kode “Splash.asm” sebenarnya tidak secara spesifik menggunakan
export seperti program “DLL NORMAL” pada umumnya, jadi sebagai contoh Saya sengaja memasukkan
2 buah proses yang ada. Bagi Saya yang penting program bisa berjalan sesuai harapan, untuk hal lain
seperti teori silahkan mempelajarinya di bangku kuliah, karena Saya tidak menyukai kuliah bidang
komputer! Biayanya terlalu mahal.. :(
LIBRARY SPLASH.DLL
EXPORTS ShowBitMap
EXPORTS WndProc
CATATAN : Jangan menyalin kode pada halaman ini untuk menghindari kesalahan coding. Silahkan
pergunakan kode yang telah disertakan. Saya sarankan Anda membaca terlebih dahulu penjelasan yang
terdapat dalam Source Code.

Step 2 : CRACKadabra®.. Jadilah program ajaib!
Untuk melakukan proses compile, silahkan Anda klik ganda file dengan nama “Compile.bat”.
Jangan lupa sebelum melakukan proses compile, sesuaikan terlebih dahulu konfigurasi compiler MASM
yang terdapat pada komputer Anda.
Contoh :
set letak=C:\masm32\bin
set include=C:\masm32\include
set lib=C:\masm32\lib

Screenshot Compile.bat

Step 3 : Proses injeksi file executable.

Screenshot Target.exe
  • Jalankan tool “IID King” load file “Target.exe”.. Jangan lupa berilah tanda cek pada menu Backup agar jika terjadi kesalahan pada saat injeksi, Anda bisa mengembalikan semua lagi.
  • Pada kolom “Dll’s Name” masukkan nama file DLL yang akan Anda pergunakan, misal “Splash.dll”
  • Pada kolom “Function’s Name (case sensitive)” Masukkan salah satu fungsi export yang diperlukan, Anda bisa mendapatkan fungsi export ini pada file “Splash.def”. Misal masukkan fungsi export “ShowBitmap” (tanpa tanda kutip). Untuk menambahkan fungsi export cukup klik tombol “+”, untuk menghapus fungsi export yang tidak Anda inginkan cukup klik tombol “-“.
  • Setelah itu klik tombol “Add them!!” untuk melakukan injeksi pada target executable. Jika semua berjalan lancar, maka file target yang telah Anda injeksi akan menampilkan Splash Screen setiap kali executable dijalankan.

Screenshot IID King

Final notes :
File “Target.exe” yang dijalankan, secara otomatis akan me-load semua link statis DLL pada Import
Table, misal “Splash.dll” dan kemudian mengirim DLL_PROCESS_ATTACH kepada program target.
Perhatikan section baru dengan nama “.IIDKing” setelah terjadi proses injeksi. Dari sini bisa diketahui
tentang cara kerja file DLL tersebut beserta injeksinya. Mudah bukan? Saya harap Anda tidak menemui
kesulitan dalam mempelajari injeksi executable dari artikel “Tutorial Injeksi Executable –
MessageBox” sampai dengan artikel “Tutorial Injeksi Executable – Splash Screen”. Bagi Anda
yang tidak sempat membaca artikel ini atau mungkin bosan membaca artikel ini, dan ingin
menggunakan cara instant langsung jadi seperti memasak mie instant, Anda bisa menggunakan software
MRHPx Splash Add..

Screenshot MRHPx Splash Add
Teknik ini juga bisa dipergunakan untuk melakukan injeksi yang lain, tidak hanya Splash Screen.
Bayangkan saja jika ada orang yang melakukan injeksi program worm, exploit dan malware lainnya yang
merugikan ke dalam executable? Bukan MessageBox ataupun Splash Screen? Tentunya hal tersebut
akan sangat merugikan. Solusi dari Saya adalah lakukan “Section Dump” atau “Extract Overlay”
kemudian lakukan analisa Reverse Engineering (Bukan begitu saudara Apakekdah? ). Hal tersebut
setidaknya akan membantu Anda memperoleh informasi yang cukup tentang malware yang disisipkan di
dalam executable. Sebagai catatan, Antivirus tidak selalu bisa diandalkan untuk hal seperti ini. Semoga
artikel ini bisa memberi manfaat bagi Anda dan membantu Anda menjaga diri Anda dari kejahatan
cyber. Terima kasih.
Download Executable Injection Tutorial – Part 2 : Splash Screen Part 1

Download Executable Injection Tutorial – Part 2 : Splash Screen Part 2
MRHPx regards and messages :
  • My family for love, peace and emphaty.. Allah SWT and Muhammad SAW for life, light and everything..
  • Reverse Code Engineering scene, Astalavista.MS, Blackhat Community, 0day,Indonesia veteran hAxx0r (You know who you are.. :) )
  • Source code semua program atau hack tool (EXCEPT PRIVATE-SECRET TOOLS!) dari seluruh artikel dan rilis NeMeSiS_ByTe dan MRHPx bisa diperoleh dengan cara kontak melalui email baru Saya di atas.. Ehm, sori ganti Nickname sejak 2008 tidak lagi sebagai NeMeSiS_ByTe :) Juga ganti email, ganti website, ganti peruntungan! :) Long live reverser..!
PENTING :
  • Jika Anda request software atau tool yang tidak terdapat di website Saya atau sulit didapatkan (baik software gratis atau berbayar), harap mengganti biaya bandwith internet (Download Broadband) dan biaya pengiriman (CD Distribusi Pos). Harap maklum, Saya bukan milyuner yang mempunyai banyak uang, Saya tidak mungkin membiayai setiap request software dan tool yang Anda butuhkan.
  • Untuk keperluan apapun harap menghubungi Saya melalui email Yahoo atau Facebook, karena nomer telpon Saya hanya untuk keperluan bisnis dan pekerjaan. Bukan dipergunakan untuk CHAT dan tanya jawab.

No comments: