# (C++) Membuat Address Logger

Sumber: https://nyit-nyit.net/threads/c-membuat-address-logger.99358/
Forum: N3 Source Codes dan Tutorials
Dibuat: 2012-05-05 oleh rcd
Balasan: 75, dilihat: 46801

## Post pertama

Credits : d0m1n1k (FindPattern), Gecko [http://n3.vc/11A1](http://n3.vc/11A1), All Member TTK

**1. FindPattern**
Tambahkan code ini ke projectmu agar bisa menggunakan FindPattern(…);

```
bool 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;
}
```

**2. Mendapatkan signature dari suatu address**
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

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:
01002FFB |. E8 B5F8FFFF CALL 010028B5
01003000 |. 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;
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 boleh
MEMwrite((void*)dwLog, (PBYTE)”\x90\x90\x90\x90\x90\x90”,6 );//opsional

```

Oke itu dulu dari saya, kalo masih ada yang bingung tanyakan saja ^^
11904.IPB

## Balasan

### HydroPlus, 2012-05-05

KK RCD kelupaan satu orang :D

```

Findpattern = d0m1n1k
Olly SigMaker = P47R!CK
Logger base = Gecko

```

### azzfarrN3, 2012-05-08

built pake apa bang ini ?

### N3Gantengs, 2012-05-09

bang RCD, aq mau nanya!!

cara cari assambleny gimana ya??
paling ga mudeng aq pada assambleny @_@ :bingung: :dizzy:

### rcd, 2012-05-09

Microsoft Visual C++

### sinwae, 2012-05-09

di dpt dari mana kk

### Anonymous, 2012-05-09

dapet dari OllyDbg

### azzfarrN3, 2012-05-09

>eror.cpp(42): error C3861: 'MEMwrite': identifier not found
bisa minta tolong ini harus di tambah tambah apa ya ?

### Anonymous, 2012-05-09 (+1)

```

void MEMwrite(void *adr, void *ptr, int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
}

```

### sinwae, 2012-05-09 (+1)

kalo misal target game pb itu yang mana yg di cari

### azzfarrN3, 2012-05-09

error C2664: 'MEMwrite' : cannot convert parameter 3 from 'const char ' to 'int'
error lagi bang ,
kaya gini bukan posisinya ?
void MEMwrite(void *adr, void *ptr, int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
MEMwrite((void*)dwLog, (PBYTE) "\x90\x90\x90\x90\x90\x90","6" );//opsional
}

### 1642EQ, 2012-05-09 (+1)

itu manggil MEMwrite(...) jgn disitu bro,, bisa looping selamanya, untungnya error diparameter ketiga,
harusnya input tipe int, alias angka 6 saja, bukan string "6".

itu fungsi MEMwrite(..) bukan fungsi rekursif kan,,

pindahkan ke tempat lain.

regards
1642EQ

### HydroPlus, 2012-05-12

Sigmaker untuk IDA, **pw: www.nyit-nyit.net**

### apaaja948, 2012-05-14

Numpang Nanya Bang RCD
FindPattend Itu Apakah Bisa Mencari Dengan Offset
Misal Offsetnya 456003
Bisa Di Jadikan Seperti ini Atau Tidak
\x45\x60\x03 , xxx"
Bisa Gk Bang RCD ^_^ Mohon Pencerahnya :cool:

### rcd, 2012-05-14

gk bisa kk

### jazzybecker, 2012-05-15

wkwkkw kalo mau kek gitu, yg bisa di log itu value dari offset itu..
jadi klo offset geser, otomatis dia nunjuk ke offset yg baru..

### thebakuras, 2012-05-15

Bang RCD membuat logger bisa ngga mengunakan Dev-C++ ???
Maaf Jika Saya Oot ... :Sorry:

### azzfarrN3, 2012-05-24

Bang Bisa bantu nggak , ini kenapa ya ko yang keluar addressnya malah 00420000 bukan 00820000 .

(gambar hilang)

### Anonymous, 2012-05-25

^
kan di tambah sama 
```

DWORD dwBase = (DWORD)GetModuleHandle(“minesweeper.exe”);

```

minesweeper.exe + 00420000 = 00820000

### apaaja948, 2012-05-26

Nih Saya Membuat Logger Audition.exe
Disitu Sii Saya Berhasil
Tapi KaLo Di AOBnya Itu Saya Ada Yang Salah, Menuju Ke Address F20000
Maksudnya itu Apa Ya,

Gni Nie :

```

//while (!Ready())
Sleep(500);
dwStartAddress = 0x400000;
do {
dwStartAddress = (DWORD)GetModuleHandle(ModulGame);
Sleep(100);
}
while(!dwStartAddress);
dwSize = 0x500000;
DWORD dwPF = FindPattern(dwStartAddress,dwSize,(PBYTE)"\x7D\x3F\x33\x33\x73\x3F\x9A\x99\x59\x3F\x14\xAE\x47\x3F\x00\x00","xxxxxxxxxxxxxx??");
DWORD dwOTP = FindPattern(dwStartAddress,dwSize,(PBYTE)"\x3F\x1F\x85\x2B\x3F\xCD\xCC\xCC\x3E","xxxxxxxxx");
DWORD dwBR = FindPattern(dwStartAddress,dwSize,(PBYTE)"\x00\x00\x00\x0F\x00\x00\x00\x1B\x00\x00","???x???x??");
DWORD dwBU = FindPattern(dwStartAddress,dwSize,(PBYTE)"\x03\x02\x01\x00\x01\x02\x03\x00\x01\x01","xxx?xxx?xx");
DWORD dwPIN = FindPattern(dwStartAddress,dwSize,(PBYTE)"\x01\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\xFF\xFF\xFF","x???x???x???xxx");

adrPF = dwPF - dwStartAddress;
adrOTP = dwOTP - dwStartAddress;
adrBR = dwBR - dwStartAddress;
adrBU = dwBU - dwStartAddress;
adrPIN = dwPIN - dwStartAddress;

Writelog("#define OFS_PF 0x%X", adrPF);
Writelog("#define OFS_OTP 0x%X", adrOTP);
Writelog("#define OFS_BR 0x%X", adrBR);
Writelog("#define OFS_BU 0x%X", adrBU);
Writelog("#define OFS_PIN 0x%X", adrPIN);

```

Malah Addressnya Menuju

```
#define OFS_PIN 0xF20000
#define OFS_BR 0xF20000
#define OFS_OTP 0xF20000
```

Yang Salah Apa Coba, Bingung Disitu

Nie AOB Yang Saya Gunakan

```

Perfect Normal:
AOB: 7D 3F 33 33 73 3F 9A 99 59 3F 14 AE 47 3F 00 00

Perfect OTP:
AOB: 3F 1F 85 2B 3F CD CC CC 3E CD CC 4C 3E 00 00 00 00 42 61 6C

Perfect BR 1 :
AOB : 03 02 01 00 01 02 03 00 01 01 01 01 00 00 00 00

Perfect BU 1
AOB: 00 00 00 0F 00 00 00 1B 00 00 00 28 00 00 00 37

Skip Pin 2nd:
AOB: 01 00 00 00 01 00 00 00 08 00 00 00 FF FF FF

```

Mohon Pencerah Yang Udh Pro ^_^ :cool:

### RoLLin, 2012-06-13

masih bingung bang cara buatnya :D

### graceda, 2012-06-22

kalo ane compile di DevCpp succes tapi dapet warning 

di function Match

"NULL is used in arithmetic"

gak papa tuh?

### tomwitzky, 2012-06-23

wah mantap bang **RCD** work tutorialnya ..

mungkin AOB yang ditujuh tidak akurat atau pass ke address yang ditujuh
BTW itu mau buat logger Skip pin .. kalo nd salah skip pin kan address ny jauh dari start address 400 rbu ..
maav kalau salah kk .. maklum masih belajar juga ..

### sasa, 2012-06-23 (+1)

hehhe...mudah2an benar...startaddress untuk skip pin = 0x4146EC;
DWORD SKIP = FindPattern(0x400000,0x500000,(PBYTE)"\x01\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00","xxxxxxxxxxxx");
Writelog("#define OFS_SKIP_PIN 0x%X", SKIP+ startaddress);
hasil di test hari ini keluar = 0xCE0C84;

### boysdayax08, 2012-06-23

@TS

kk RCD ini kan untuk V C++ misalnya mau pake Dev C++ Cara nya sama atau tidak ??

:ngacir: :ngacir:

### AanSayudi, 2012-06-27

@UP

Kalo Address yang keluar Begitu Berarti Address yang di tuju tidak ada offset nya

saya Juga udah Sering Begitu

### Ri7N, 2012-06-28

Beda Dikit lah , Susah kalau mau convert gan

### apaaja948, 2012-06-29

Saya Coba DuLu ^_^ Thx Ya Sob

### RavenGa, 2012-06-29

kok waktu saya nyoba tes ke pointblank tahadi gk muncul log ny ya . . . :bingung:
:mad:

need pencerahan kak :cry:

### 7sovanz, 2012-06-29

Kak mau nanya, untuk. . .Writelog

```

Writelog("#define adr01 0x%X", adrPF01);
Writelog("#define adr01 0x%X", adrPF02);
Writelog("#define adr01 0x%X", adrPF03);

```

itu penulisan Writelog-nya dia bisa sekali,
atau harus ada disetiap pemencetan Hotkeys

atau bisa langsung aja kayak gini. . .

```

if(GetKeyState(VK_F10)&0x8000){
Sleep(200);
DWORD dwBase = 0x400000;
DWORD dwLog = FindPattern(dwBase, 0x5000000, (PBYTE)”\xFF\x05\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x6A\x01”, “xx????x????xx”);
MEMwrite((void*)dwLog, (PBYTE)”\x90\x90\x90\x90\x90\x90”,6 );
}

```

kira'' bisa gak kak ?

### apaaja948, 2012-07-01

Mau Buat Cheat Permanen Ya Sob ^_^

(45 balasan lain ada di halaman thread.)
