• Silahkan bergabung dengan chat kami di Telegram group kami di N3Forum - https://t.me/n3forum
  • Welcome to the Nyit-Nyit.Net - N3 forum! This is a forum where offline-online gamers, programmers and reverser community can share, learn, communicate and interact, offer services, sell and buy game mods, hacks, cracks and cheats related, including for iOS and Android.

    If you're a pro-gamer or a programmer or a reverser, we would like to invite you to Sign Up and Log In on our website. Make sure to read the rules and abide by it, to ensure a fair and enjoyable user experience for everyone.

N3 [C++] Membuat Address Logger

rcd

3 SD
Level 2
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(…);

Code:
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


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

Code:
01002FF5 |. FF05 9C570001		 INC DWORD PTR DS:[100579C]
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 :
Code:
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 boleh
MEMwrite((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
Tips : Mencari sygnature dapat dilakukan dengan bantuan sygmaker
http://n3.vc/11A2

Oke itu dulu dari saya, kalo masih ada yang bingung tanyakan saja ^^
View attachment minesweeper.zip
 

N3Gantengs

TK A
Level 1
bang RCD, aq mau nanya!!

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

azzfarrN3

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

Anonymous

5 SD
Level 2
>eror.cpp(42): error C3861: 'MEMwrite': identifier not found
bisa minta tolong ini harus di tambah tambah apa ya ?
Code:
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);
}
 

azzfarrN3

4 SD
Level 2
error C2664: 'MEMwrite' : cannot convert parameter 3 from 'const char [2]' 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

Sub Mod Pangya
Level 4
error C2664: 'MEMwrite' : cannot convert parameter 3 from 'const char [2]' 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
}
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,,
MEMwrite((void*)dwLog, (PBYTE) "\x90\x90\x90\x90\x90\x90","6" );//opsional
pindahkan ke tempat lain.


regards
1642EQ
 

apaaja948

PAUD
Level 1
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:
 

jazzybecker

4 SD
Level 2
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:
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..
 

Anonymous

5 SD
Level 2
^
kan di tambah sama
Code:
DWORD dwBase = (DWORD)GetModuleHandle(“minesweeper.exe”);
minesweeper.exe + 00420000 = 00820000
 

apaaja948

PAUD
Level 1
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 :
Code:
//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

Code:
#define OFS_PIN 0xF20000
#define OFS_BR 0xF20000
#define OFS_OTP 0xF20000
Yang Salah Apa Coba, Bingung Disitu

Nie AOB Yang Saya Gunakan

Code:
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:
 
Top