Credits : d0m1n1k (FindPattern), Gecko http://n3.vc/11A1, All Member TTK
Tools yang dibutuhkan :
1. FindPattern
2. Address Sygnature
1. FindPattern
Tambahkan code ini ke projectmu agar bisa menggunakan FindPattern(…);
2. Mendapatkan signature dari suatu addressbool Match(const BYTE* pData, const BYTE* bMask, const char* szMask){for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask ) return false;return (*szMask) == NULL;}DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask){for(DWORD i=0; i < dwLen; i++) if(Match( (BYTE*)( dwAddress+i ),bMask,szMask) ) return (DWORD)(dwAddress+i);return 0;}
Mungkin bagian ini adalah hal yang membingungkan bagi pemula ^^ karena berhubungan dengan bytes.
Setelah kita dapat mengetahui FindPattern hal selanjutnya yang paling penting adalah Sygnature. Sygnature yang akan dipasang di FindPattern harus Static (tidak berubah) bukan Dinamyc (berubah) karena kalau Sygnaturenya salah/dinamyc maka FindPattern tidak akan menemukan address yang akan dicari. Contoh bytes yang Static/Dinamyc seperti ini
E9 15480523 JMP 23456789
FF15 98104000 CALL DWORD PTR DS:[0xDEAD]
Hijau = Static
Merah = Dinamyc
Kenapa E9 bisa dikatakan Static??? ^^ karena E9 tidak akan berubah walaupun game direstart/game patch. Dan sebaliknya Address dalam bentuk byte (Merah) dinamyc karena akan berubah setelah game patch. Gampang nya kalo lihat di Olly ada spasi diantara dua tipe bytes tersebut untuk lebih mudah, liat gambar kalo belom mudeng ^^. (Noh liat yang dikasih gambar panah). Dah mudeng belum beda static sama dinamyc? Kalo belum mudeng silahkan reply di thread :D
Pada tutor kali ini saya akan mencari address yang membuat timer di minesweeper bertambah. Setelah saya breakpoint saya menemukan address ini (tutor mencari asm-nya diskip) : 1002FF5
01002FF5 |. FF05 9C570001 INC DWORD PTR DS:[100579C]01002FFB |. E8 B5F8FFFF CALL 010028B501003000 |. 6A 01 PUSH 1
Dari address tersebut didapatkan signature : FF 05 ?? ?? ?? ?? E8 ?? ?? ?? ?? 6A 01
Versi C++ :
Pattern : \xFF\x05\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x6A\x01
Mask : xx????x????xx
Pattern untuk byte yang dinamyc kita tulis dengan 00
Mask untuk byte yang dinamyc kita tulis dengan ?
Mask untuk byte yang static kita tulis dengan x
Contoh Penggunaan :
DWORD dwBase = (DWORD)GetModuleHandle(“minesweeper.exe”);DWORD dwLog = FindPattern(dwBase, 0x5000000, (PBYTE)”\xFF\x05\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x6A\x01”, “xx????x????xx”);char cbuffer[255];sprintf(cbuffer, “Logged Address : 0x%X”, dwLog);MessageBox(NULL, cbuffer, “Result”, 0); // Pop-up hasil log lewat msgbox// Saat ini ente sudah mendapatkan hasil dari logging terserah mau diapain, mau di hack juga bolehMEMwrite((void*)dwLog, (PBYTE)”\x90\x90\x90\x90\x90\x90”,6 );//opsional
Q: Pada FindPattern mengapa dwLen kita isi dengan 0x500000?
A: Karena kita akan mencari address yang berada pada 0x01002FF5, maka dwLen harus diisi lebih besar dari address yang akan dicari.
01003000 |. 6A 01 PUSH 1
Q: Mengapa menjadikan 01 static sedangkan di ollydbg diantara 6A dan 01 ada spasi?
A: Karena 01 itu bukan byte berbentuk address sehingga kecil kemungkinan akan berubah saat game patch
0 komentar:
Posting Komentar