Sunday, August 19, 2012

Find Base Address Module

untuk suatu alasan tertentu seperti bypass DEP misalnya anda harus mengerti dulu letak baseaddress kernel32 dan juga alamat fungsi2 yang akan digunakan di modul itu, lalu bagaimana kalau system yang kita gunakan di proteksi ama ASLR...? bukannya letak base address juga akan berubah2...? anda tidak perlu cemas... berikut ini cara untuk menemukan base address suatu module berdasarkan urutannya...

include \masm32\include\masm32rt.inc
.data
.code
start:
ASSUME FS:NOTHING
XOR ESI,ESI
XOR ECX,ECX            ; ECX = 0
MOV ESI,FS:[ECX + 30h] ; ESI = &(PEB) ([FS:0x30])
MOV ESI,[ESI + 0Ch]    ; ESI = PEB->Ldr
MOV ESI,[ESI + 1Ch]    ; ESI = PEB->Ldr.InInitOrder
xor ebx,ebx
next_module1:
inc ebx
MOV EBP,[ESI + 08h]    ; EBP = InInitOrder[X].base_address
MOV EDI,[ESI + 20h]    ; EBP = InInitOrder[X].module_name (unicode)
MOV ESI,[ESI]          ; ESI = InInitOrder[X].flink (next module)
mov ecx,3h
mov edx,ecx            ; ecx = 3 kernel32 berada di urutan ke 3
CMP ebx,edx
JNE next_module1       ; No: mencoba module berikutnya.
                       ; EBP berisi base address kernel32

call ExitProcess
end start

kita cukup mengganti ecx sesuai dengan urutan module yang akan kita gunakan... di atas saya isi ecx dengan 3 yaitu urutan dari module kernel32 kemudian base address dari kernel32 tersebut di simpan di register EBP..



Berikut beberapa urutan module di os yang saya gunakan (Windows 7)

1. ntdll.dll
2. KERNELBASE.dll
3. kernel32.dll
4. msvcrt.dll
5. USP10.dll
6. LPK.dll
7. GDI32.dll
8. user32.dll

No comments:

Post a Comment