C İle Memory Hacking (Serinin Devamı)
-
Merhaba müridler serinin kısa olan, tamamiyle koddan oluşan ikinci bölümündeyiz. Bu bölümde önceki dökümanda gördüğümüz bilgiler ile nasıl bir hile programı yazacağımızı anlatmaya çalıştım , lütfen önceki dökümanı okumadan bu dökümanı okumayınız…
Bu örneğimde yapımı derlemesi çalıştırması kolay olacağından dolayı C dilini seçiyorum. Söylememe gerek yok sanırım, kodları en azından anlamanız için temel seviyede dil bilgisi gerektirir :)
Soru : Örneği neden C# veya bir başka dilde yapmadın ?
1. C ye çoğu kişi aşina olduğu ve Read/Write Process Memory işlemleri daha kolay olduğundan
2. .NET dillerinde netframework uyuzluğu ve Read/Write Process Memory karmaşasından kurtulmak için C yi seçtim.C# dilinde de bir örnek hazırladım, onu da paylaşacağım.
Herneyse gelelim konumuza.. Fazla uzatmayacağım, bize lazım olan şeyi anlatıp sizlere örnek olması için hazırladığım “Heroes of Might and Magic III ” +7 trainerinı paylaşıp dökümanı bitireceğim. Heroes of Might and Magic III için kodladığım programın satırlarını tek tek okuyup anlarsanız işi kaparsınız sevgili müridler
Gelelim kodlara :)
#include #include int main() // main { // değerleri tanımlıyoruz *1 DWORD Ptr; DWORD Bfr; DWORD Pid; HANDLE hHandle; HWND hWinHandle; Ptr = 0; Bfr = 0x01; // Memorye yazdıracağımız hex değer örnek 0x01 = 1,0x3939 = 99 gibi *2 Pid = 0; hHandle = INVALID_HANDLE_VALUE; // Handle işlemleri *3 hWinHandle = 0; hWinHandle = FindWindowA( NULL, "Oyun" ); // etki edilecek pencere ismi if( hWinHandle == NULL ) // kapalıysa return 0; GetWindowThreadProcessId( hWinHandle, &Pid ); hHandle = OpenProcess( PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, Pid ); // processin açılması if( hHandle == NULL ) // handle değeri alınamadıysa return 0; ReadProcessMemory( hHandle, (LPVOID)0x00PointerBuraya, &Ptr, 4, NULL ); // Okuma işlemi *4 Ptr += 0xOFfsetBuraya; // Pointer ekleme işlemi *5 WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); // yazdırma işlemi *6 CloseHandle( hHandle ); printf("Basarili! \n"); system("Pause"); return EXIT_SUCCESS; }
Notlar;
1. Gerekli olan değerlerimizi tanımlıyoruz. Bu değerler Pointer, Offset, ProcID ve Handle .
2. Memory de pointer ve offset aracılığı ile ulaştığımız değer’e yazacağımız değeri burada tanımlıyoruz.
4. Hafızadan okuma işlemini gerçekleştiriyoruz, incelemek isteyenler, parametreleri görmek isteyenler için winapi->BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID lpBaseAddress, __out LPVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T *lpNumberOfBytesRead );
5. Base adresimize pointer değerimizi ekleiyoruz.
6. Hafızaya yazdırma işlemi de burada gerçekleşiyor, aynı şekilde winapi->BOOL WINAPI WriteProcessMemory( __in HANDLE hProcess, __in LPVOID lpBaseAddress, __in LPCVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T *lpNumberOfBytesWritten );
Kodlar bu kadar :) Umarım C de bu işin ne kadar kolay olduğunu bu blok ile anlatabilmişimdir.
Bu kod bloğu herhangi bir RWProcessMemory örneğinin en sade halidir. Herhangi bir C derleyicisinde çalıştırıp geliştirebilir kafanızdakini yapabilirsiniz. Yeni teknikler oluşturmak sizlere kalmış.
Şimdi sizlerle benim yaptığım “Heroes of might and magic III” isimli oyunun +7 trainerini paylaşacağım kaynak içerisinde bir trainer içerisinde bulunması gereken hemen hemen herşey var (hotkey vs). Yararlanmanız dileği ile :)
/* _ _ _ | | | | | | | |_| | ___ | |_ _ _______ _ __ ___ | _ |/ _ \| | | | |_ / _ \| '_ \ / _ \ | | | | (_) | | |_| |/ / (_) | | | | __/ \_| |_/\___/|_|\__, /___\___/|_| |_|\___| __/ | |___/ */ #include #include #include using namespace std; DWORD Ptr; DWORD Bfr; DWORD Pid; HANDLE hHandle; HWND hWinHandle; void holyzone(){ Ptr = 0; Bfr = 0x39393939; Pid = 0; hHandle = INVALID_HANDLE_VALUE; hWinHandle = 0; hWinHandle = FindWindowA( NULL, "Heroes of Might and Magic III" ); if( hWinHandle == NULL ){std::cout << "\n ERROR : Open game first" << std::endl;} GetWindowThreadProcessId( hWinHandle, &Pid ); hHandle = OpenProcess( PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, Pid ); if( hHandle == NULL ){std::cout << "\n CRASH!" << std::endl; } ReadProcessMemory( hHandle, (LPVOID)0x0069CCB0, &Ptr, 4, NULL ); for(short character=8;character<=222;character++){ if(GetAsyncKeyState(character)==-32767) switch(character) { case 0x75: // SINIRSIZ GOLD 0x75 = F6 std::cout << "\n infinity GOLD" << std::endl; Ptr += 0xb4; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x76: // SINIRSIZ WOOD 0x76 = F7 std::cout << "\n infinity WOOD" << std::endl; Ptr += 0x9C; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x77: // SINIRSIZ ORE 0x77 = F8 std::cout << "\n infinity ORE" << std::endl; Ptr += 0xA4; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x78: // SINIRSIZ MERCURY 0x78 = F9 std::cout << "\n infinity MERCURY" << std::endl; Ptr += 0xA0; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x79: // SINIRSIZ SULFUR 0x79 = F10 std::cout << "\n infinity SULFUR" << std::endl; Ptr += 0xA8; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x7A: // SINIRSIZ CRYSTAL 0x7a = F11 std::cout << "\n infinity CRYSTAL" << std::endl; Ptr += 0xAC; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; case 0x7B: // SINIRSIZ GEM 0x7B = F12 std::cout << "\n infinity GEM" << std::endl; Ptr += 0xB0; WriteProcessMemory( hHandle, (LPVOID)Ptr, &Bfr, 4, NULL ); CloseHandle( hHandle ); break; } } } int main(int argc, char **argv) { system("Title HMM III"); system("Color 1A"); std::cout << "\t\tHeroes of Might and Magic III - (+7)Trainer" << std::endl; std::cout << "\nNFO" << std::endl; std::cout << "[ ] F6 GOLD \n[ ] F7 WOOD \n[ ] F8 ORE \n[ ] F9 MERCURY \n[ ] F10 SULFUR \n[ ] F11 CRYSTAL \n[ ] F12 GEM" << std::endl; while(1) { holyzone(); } }
Kaynak Kod -> İndir
Şimdilik bu kadar :)
Serinin devamında online oyunlardaki hile mantığı üzerinde duracağım. Kolay gelsin. -
online oyun oldugunu dusun exe protection altinda nasil exeye erisip degerleri degistiricez? bunlari yapmak kolay onemli olan antihileyi kirmak :W
-
c# çalışırken merak saldığım bi konu. teşekkür ederim
-
x3uqm4 bunu yazdı:
-----------------------------
online oyun oldugunu dusun exe protection altinda nasil exeye erisip degerleri degistiricez? bunlari yapmak kolay onemli olan antihileyi kirmak :W
-----------------------------exe koruma altına pack edilerek alınır onu unpack etmekte senin crack bilgine kalmış hacım :D fakat exeyi packleseler korusalar bile zaten olydbg ile açıp pointer buldurtmadım. attach yaptık. onu engelleyen yazılımlarda var ama çoğunu sandboxie gibi programlarla bile geçebiliyorsun :)
-
Hocam avira exe ye uyarı verdi switch case teki key değerleri yüzünden sanırım onu nasıl düzeltebiliriz ? bide compiler olarak ne kullanıyorsun öğrenebilir miyim
-
online oyun vs gibi ekstra korumalı şeylerde korumayı aşmak/hile yapmak için rootkit tarzı kernel-mode çalışmak lazım.
dll injection > ring0/ring3 = hile.dll > oyuna enjekte.
kaynaklar;
http://en.wikipedia.org/wiki/DLL_injection
http://en.wikipedia.org/wiki/Ring_%28computer_security%29
-
SinusX bunu yazdı:
-----------------------------
Hocam avira exe ye uyarı verdi switch case teki key değerleri yüzünden sanırım onu nasıl düzeltebiliriz ? bide compiler olarak ne kullanıyorsun öğrenebilir miyim
-----------------------------VS C++, DEV C++ hacım
-
Online için yapsakta zengin olsak