Topic: Create DLL Hack

saya masih bingung dalam pembuatan dll.. masih belajar C/C++ di MS.DOS..

bagaimana cara membuat dll hack untuk suatu aplikasi atau game contoh PointBlank ^^

2 (edited by mbah_gosang 16-01-2011 21:49:07)

Re: Create DLL Hack

Maksudnya "hack dll" gimana ya ?
Mau buat dll ?
Mau lihat nama fungsi yang ada di dll ?
Mau lihat "function signature" pada dll ?
Ato ngubah "secara binary" file dll ?
atau bagaimana ?

Re: Create DLL Hack

maksud saya membuat dll hack itu membuat dll dengan thread baru pada suatu aplikasi.. ^^
contoh kita mengganti fungsi dalam aplikasi tersebut jadi bug.. ^^

Re: Create DLL Hack

@Menthol

DLL itu adalah pustaka fungsi yang dapat di-linked secara dinamis, jadi:

1. anda harus tahu fungsi-fungsi apa yang terdapat di dalam DLL yang mau anda ganti.
2. anda harus tahu argumen apa yang dikirimkan ke fungsi-fungsi tersebut, apa yang harus dilakukan oleh fungsi-fungsi tersebut, dan nilai apa yang harus dikembalikan oleh fungsi-fungsi tersebut.
3. anda harus membuat fungsi-fungsi pengganti.
4. anda harus menempatkan fungsi-fungsi pengganti tersebut ke dalam suatu DLL baru.

Dari keempat hal di atas, hal-hal mana yang telah anda siapkan/kuasai?

http://www.id-ddns.net/images/ddns-small.jpg

Re: Create DLL Hack

Saya sekalian numpang tanya ah coz ga tau juga

Bukane dll itu berbentuk Binary, lalu bagaimana membaca code binary tersebut agar dapat dimengerti manusia. Setau saya code binary paling mentok di dikonversi ke 16 bit sehingga bisa kebaca dikit2 kaya waktu praktek cracking software big_smile mohon penjelasan.

Promosi Sedikit
===========================================
Calosa | Jasa Pembuatan Website Murah | Jual Parfum

6 (edited by mbah_gosang 20-01-2011 15:24:34)

Re: Create DLL Hack

Bukane dll itu berbentuk Binary...

Betul

Akan tetapi dimungkinkan untuk melihat nama fungsi (function name) yang di "export" oleh library tersebut dengan menggunakan dumpbin.exe (bawaan window SDK)
Apabila yang ingin dilihat adalah "function signature", saya rasa tanpa file header yang lengkap dari library tersebut, tidak mungkin. Kalaupun bisa, saya tidak tahu utility apa yang dipakai.
Untuk mengubah library secara "binary" mungkin yang dibutuhkan adalah disassembler, tetapi hati-hati, beberapa software license tidak memperbolehkan kan anda untuk men "disassembler" (reverse engineer) file binary. Sebaiknya anda baca dulu license nya baik2.

Re: Create DLL Hack

mustofa wrote:

@Menthol

DLL itu adalah pustaka fungsi yang dapat di-linked secara dinamis, jadi:

1. anda harus tahu fungsi-fungsi apa yang terdapat di dalam DLL yang mau anda ganti.
2. anda harus tahu argumen apa yang dikirimkan ke fungsi-fungsi tersebut, apa yang harus dilakukan oleh fungsi-fungsi tersebut, dan nilai apa yang harus dikembalikan oleh fungsi-fungsi tersebut.
3. anda harus membuat fungsi-fungsi pengganti.
4. anda harus menempatkan fungsi-fungsi pengganti tersebut ke dalam suatu DLL baru.

Dari keempat hal di atas, hal-hal mana yang telah anda siapkan/kuasai?

iya mas.. aku kan jga baru belajar tntang bahasa C ^^.. maaf mas ^^

Re: Create DLL Hack

@Mbah: Suwun mbah...jadi ngerti sekarang big_smile

Promosi Sedikit
===========================================
Calosa | Jasa Pembuatan Website Murah | Jual Parfum

9 (edited by /dev/null 27-01-2011 12:29:58)

Re: Create DLL Hack

mungkin maksud dari sodara Menthol adalah file DLL yang diinjeksi (dengan bantuan program injector) ke program target (eg. PointBlank.exe) dan file DLL tersebut melakukan sebuah tugas tertentu (bisa itu patching byte memory pada badan program, patching pointer, dsb.)

ok ane coba dulu dari apa yang harus dilakukan.

pertama buat sebuah fungsi sebuah file DLL yang merupakan entry point (fungsi yang dipanggil pertama kali) bernama DllMain dengan beberapa parameter pendukungnya. lihat kode (dalam bahasa C++) di bawah:

#include <windows.h>

bool __stdcall DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved) {
    switch(dwReason) {
        case DLL_PROCESS_ATTACH:
            DisableThreadLibraryCalls(hDll);
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MainThread, 0, 0, 0);
            break;
        
        case DLL_PROCESS_DETACH:        
            FreeLibrary(hDll);
            break;
    }
    
    return true;
}

pada fungsi switch menentukan nilai yang dibawa oleh variabel dwReason yang merupakan faktor penentu apakah file DLL tersebut sudah terpasang (attach) atau tidak (detach) pada proses target. jika dwReason bernilai DLL_PROCESS_ATTACH (attached) maka lakukan rutin DisableThreadLibraryCalls yang beguna proses yang diinjeksi tidak memakan banyak resource memory (CMIIW, lihat MSDN), dan kemudian funsgi rutin yang paling penting adalah CreateThread yang merupakan thread utama dalam melakukan proses yang diminta oleh pengguna.

adapun rutin untuk thread tersebut (MainThread) adalah sebagai berikut:

void MainThread(void) {
    DWORD dwTargetModuleAddr;
    while(!dwTargetModuleAddr) {
        // dalam kasus ini, PointBlank.i3Exec adalah modul yang akan di-patch
        // dapatkan address base dari module tersebut
        dwTargetModuleAddr = (DWORD)GetModuleHandle("PointBlank.i3Exec");
        Sleep(100); // berikan jeda, menghindarkan proses loop membebani CPU (dalam milidetik)
    }
    
    // jika base address didapatkan, kemudian lanjutkan menerima instruksi pengguna
    while(1) { // infinite loop
        if(GetAsyncKeyState(VK_F1)&) {
            MessageBox(0, "Halo ini adalah pesan dari fungsi MessageBox, kemudian akan memanggil fungsi PatchByte()", "Pesan", MB_OK | MB_ICONINFORMATION);
            
            // atau bisa anda tambahkan dengan fungsi patching memory yang dibuat sendiri (lihat kode di bawah untuk selengkapnya)
            PatchByte<BYTE>(dwTargetModuleAddr + 0x12345, 0xC3);
            // fungsi tersebut menulis pada alamat base address + offset, dengan menulis byte hex 0xC3 dan berukuran 1 byte
            // BYTE = 1 byte
            // WORD/usigned short = 2 byte
            // DWORD/int = 4 byte
        }
        Sleep(10); // berikan jeda, menghindarkan proses loop membebani CPU (dalam milidetik)
    }
}

jadi pada saat user menekan tombol keyboard F1, maka akan menginstruksikan penggunaan fungsi MessageBox atau fungsi2 lainnya (contoh: PatchByte).

mungkin gitu yang dimaksud si TS, dan berikut ini kode selengkapnya:

#include <windows.h>

template <typename T>
bool PatchByte(DWORD dwAddress, T Data) {
    DWORD oldProtect;
    
    if(!IsBadReadPtr((void*)dwAddress, 4)) {
        VirtualProtect((void*)dwAddress, sizeof(T), 0x40, &oldProtect);
        memcpy((void*)dwAddress, &Data, sizeof(T));
        VirtualProtect((void*)dwAddress, sizeof(T), oldProtect, 0);
        return true;
    }
    return false;
}

void MainThread(void) {
    DWORD dwTargetModuleAddr;
    while(!dwTargetModuleAddr) {
        dwTargetModuleAddr = (DWORD)GetModuleHandle("PointBlank.i3Exec");
        Sleep(100);
    }
    
    while(1) {
        if(GetAsyncKeyState(VK_F1)&1) {
            MessageBox(0, "Halo ini adalah pesan dari fungsi MessageBox, kemudian akan memanggil fungsi PatchByte()", "Pesan", MB_OK | MB_ICONINFORMATION);
            PatchByte<BYTE>(dwTargetModuleAddr + 0x12345, 0xC3); // 0xC3: OPCODE-nya ada RET/RETURN
        }
        Sleep(10);
    }
}

bool __stdcall DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved) {
    switch(dwReason) {
        case DLL_PROCESS_ATTACH:
            DisableThreadLibraryCalls(hDll);
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MainThread, 0, 0, 0);
            break;
        
        case DLL_PROCESS_DETACH:        
            FreeLibrary(hDll);
            break;
    }
    
    return true;
}

HTH

/dev/null aka AJ

http://i12.tinypic.com/8axbxgz.gif
http://i17.tinypic.com/6jns6e0.gif
http://i17.tinypic.com/8eaeih0.gif

10 (edited by Menthol 30-01-2011 00:52:16)

Re: Create DLL Hack

^ dev/null

iya.. maksud saya seperti itu.. btw mas memainkan suatu game pointblank?
sya sewaktu itu mendapatkan source code dari salah satu forum dan saya masih bingung akan semua yang ada disana.. karena saya masih baru belajar ^^
dan sya yang dapatkan seperti ini

addys.h

 /*
  Name: RCDBase2
  Copyright: RCD
  Author: RCD
  Date: 18/12/10 14:27
  Description: Base dasar agar lebih mudah membuat Hack dengan RCDLogger3
  ChangLog : Perubahan pada beberapa string yang telah terdeteksi
*/
// PASTE hasil logging RCD Logger 3 ke sini !

//BEGIN C&P KE ADDYS
//ADDYS GENERATED BY RCD LOGGER 3.0
#define OFS_MINIMIZE1                0x
#define OFS_MINIMIZE2                0x
#define ADR_WALLSHOT                 0x
#define ADR_WALLSHOT_NOBT            0x499B3
#define ADR_AMMO                     0x
#define OFS_BOMBERMAN                0x
#define OFS_UNLGRENADE               0x
//END C&P KE ADDYS

cbase2.c

 /*
  Name: RCDBase2
  Copyright: RCD
  Author: RCD
  Date: 20/12/10 14:27
  Description: Base dasar agar lebih mudah membuat Hack dengan RCDLogger3
  ChangLog : Perubahan pada beberapa string yang telah terdeteksi
*/
#include "cbase2.h"
#include "addys.h"
LPTSTR i3engine = "PointBlank.i3Exec"; // handle PointBlank.i3Exec
DWORD adrWSOn, adrWSOff, OldProtection; // deklarasi variabel
BYTE RET[] = {0xC3}; //deklarasi byte untuk RET
BYTE PUSH_EBP[]= {0x55}; //deklarasi byte untuk PUSH_EBP

/*
Karena memwrite sudah terdeteksi HACKSHIELD, maka saya berupaya membuatkan
fungsi alternative selain memwrite dan undetected bernama MEMpatch
*/

//Check Apakah address tersebut di protect ?
void UnProtectAndModify(DWORD Offset, DWORD Pointer, DWORD Length){
VirtualProtect((void *)Offset, Length, PAGE_EXECUTE_READWRITE, &OldProtection); // check apakah address tsb dikunci / protected ? kalau iya, lakukan unprotect
RtlMoveMemory((void *)Offset, (const void*)Pointer, Length); // ubah address tsb menjadi writeable, dan lakukan patch dengan MEMpatch
VirtualProtect((void *)Offset, Length, OldProtection, &OldProtection); // protect lagi address tsb biar gk kena satpam
}

// Lakukan patch terhadap memory
void MEMpatch( BYTE *Offset, BYTE *ByteArray, DWORD Length){
for(DWORD i = 0; i < Length; i++)
UnProtectAndModify((DWORD)Offset + i, (DWORD)ByteArray + i, 1);
}

DWORD WINAPI InitAllHacks(LPVOID param) // thread telah dipatch. undetected 20 desember 2010
{     
      while (1) { // jika thread telah aktif
        if (GetAsyncKeyState(VK_INSERT)&&GetAsyncKeyState(VK_F1)) { // jika hotkey ditekan.
            DWORD dwI3CubeExec = (DWORD)GetModuleHandleA(i3engine);
            if (dwI3CubeExec > 0) { // jika PointBlank.i3exec telah di inject ke PointBlank.exe    
                adrWSOn = dwI3CubeExec + (DWORD)ADR_WALLSHOT_NOBT; // deklarasiikan dulu nih adrWSOn @_@
                MEMpatch((BYTE*)adrWSOn, RET, 1); // lakukan hack terhadap memory
                MessageBeep(1); // Beritahukan jika cheat telah sukses di eksekusi
                    }
            }
        if (GetAsyncKeyState(VK_DELETE)&& GetAsyncKeyState(VK_CONTROL)) { // jika hotkey ditekan.
                DWORD dwI3CubeExec = (DWORD)GetModuleHandleA(i3engine);
                if (dwI3CubeExec > 0) { // jika PointBlank.i3exec telah di inject ke PointBlank.exe
                adrWSOff = dwI3CubeExec + (DWORD)ADR_WALLSHOT_NOBT;
                MEMpatch((BYTE*)adrWSOff, PUSH_EBP, 1); // lakukan hack terhadap memory
                MessageBeep(1); // Beritahukan jika Hack telah sukses di eksekusi
                    }
            }
        Sleep(80); // jeda untuk menghindari overheat / kelebihan beban
    }
    return (0); // kembalikan nilai ke 0 agar thread menjadi loop selama-nya
}

BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
{
    DisableThreadLibraryCalls(hDll); // mencegah boros memori. SAVE Resource :D
    if (dwReason == DLL_PROCESS_ATTACH) { // jika dll ter-attach
        MessageBox (0,"[PointBlank] Simple Hack powered by RCD Logger 3 and RCD Base 2 !\nCredits to :\n-MEMpatch [Credit RCD]\n-RCD Logger [Credit RCD]\n-RCD Base 2 [Credit RCD]\n-Check Handle I3Exec [hrd]\n\nYang gak ngasih credit leecher permanen hohohohoho","Welcome", MB_OK | MB_ICONINFORMATION); // berikan salam pembuka jika dll telah ter-attach ke PROCESS
                CreateThread(0, 0, (LPTHREAD_START_ROUTINE)InitAllHacks, 0, 0, 0); // jalanin thread-nya
    }
    return TRUE; // mencoba berulang kali sampai thread ter-attach
}

cbase.h

 /*
  Name: RCDBase2
  Copyright: RCD
  Author: RCD
  Date: 18/12/10 14:27
  Description: Base dasar agar lebih mudah membuat Hack dengan RCDLogger3
  ChangLog : Perubahan pada beberapa string yang telah terdeteksi
*/

#ifndef __RCD_BASE2_H
#define __RCD_BASE2_H
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
DWORD WINAPI InitAllHacks(LPVOID param);
#endif

bisa kah anda mengoreksi ini?
ini yang saya dapatkan dalam salah satu forum

^^

11 (edited by /dev/null 30-01-2011 12:26:35)

Re: Create DLL Hack

intinya fungsi tetap sama dan ane kasih lebih simple.

bandingkan aja antara:

        if (GetAsyncKeyState(VK_INSERT)&&GetAsyncKeyState(VK_F1)) { // jika hotkey ditekan.
            DWORD dwI3CubeExec = (DWORD)GetModuleHandleA(i3engine);
            if (dwI3CubeExec > 0) { // jika PointBlank.i3exec telah di inject ke PointBlank.exe    
                adrWSOn = dwI3CubeExec + (DWORD)ADR_WALLSHOT_NOBT; // deklarasiikan dulu nih adrWSOn @_@
                MEMpatch((BYTE*)adrWSOn, RET, 1); // lakukan hack terhadap memory
                MessageBeep(1); // Beritahukan jika cheat telah sukses di eksekusi
                    }
            }

dan kode dari ane:

if(GetAsyncKeyState(VK_INSERT) && GetAsyncKeyState(VK_F1)) {
    PatchByte<BYTE>(dwTargetModuleAddr + ADR_WALLSHOT_NOBT, 0xC3); // 0xC3 = opcode RET
    MessageBeep(0);
}

intinya semua sama aja, dan yang penting kode2 itu jangan cuman di-copy paste, tetapi yg penting harus lebih memahami logika dan penguasaan sintak kode2 tsbt, dsb.

terakhir, ane gk bisa koreksi kode dari anda, sorry.

http://i12.tinypic.com/8axbxgz.gif
http://i17.tinypic.com/6jns6e0.gif
http://i17.tinypic.com/8eaeih0.gif

Re: Create DLL Hack

^
^

boleh mnta YM mas? untuk di kontak lebih lanjut?

Re: Create DLL Hack

berarti itu masih buat *.dllny kan , masih perlu injektorny kah.? ato sudah + injektor.?
sory OOT

Re: Create DLL Hack

met pg semuannya ane pendatang baru nih..ikut nyimak ja ya..hehehe..by : momok.killer maker newby

Re: Create DLL Hack

adminnya yg mana ya mo nannya dunk master,,gimana caranya nyari offset..hehehe,,tquuuuu