folder Tahribat.com Forumları
linefolder C - C++
linefolder C İle Memory Hacking (Serinin Devamı)



C İle Memory Hacking (Serinin Devamı)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Holyzone
    Holyzone's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    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 Dil%20çıkarma, 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 Gülümseme

    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.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anarsistherif
    anarsistherif's avatar
    Kayıt Tarihi: 27/Ağustos/2009
    Erkek

    online oyun oldugunu dusun exe protection altinda nasil exeye erisip degerleri degistiricez? bunlari yapmak kolay onemli olan antihileyi kirmak :W


    =)
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    c# çalışırken merak saldığım bi konu. teşekkür ederim


    :)
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Holyzone
    Holyzone's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

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

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    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


    Si vis pacem para bellum.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Naacal
    Naacal's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    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

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Holyzone
    Holyzone's avatar
    Üstün Hizmet Madalyası
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    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

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YuNnY
    YuNnY's avatar
    Kayıt Tarihi: 15/Aralık/2009
    Erkek

    Online için yapsakta zengin olsak


    Asalet-i Sabıka
Toplam Hit: 3238 Toplam Mesaj: 8