Başlangıç > Dökümanlar, Saldırı teknikleri > C ile Memory Hacking

C ile Memory Hacking

Merhaba arkadaşlar serinin ikinci dökümanıyla beraberiz , lütfen önceki dökümanı okumadan bu dökümanı okumayınız…
Önceki dökümanda Memory hackinge giriş yaptık ve bir hile programı yazabilmek için gerekli olan değerleri nasıl elde edebileceğimizi&bu değerlerin ne olup ne olmadığını izah etmeye çalıştık 🙂

Şimdi sıra geldi kolay kısma, bilgileri program’a dökmeye
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.

Gelelim kodlara 🙂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <windows.h>
#include <iostream>
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->

1
2
3
4
5
6
7
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->

1
2
3
4
5
6
7
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 🙂

Kaynak Kod -> İndir

Şimdilik bu kadar 🙂
Serinin devamında online oyunlardaki hile mantığı üzerinde duracağız. Kolay gelsin.

Kaynak: http://www.selimonder.com

Reklamlar
  1. 02/10/2011, 16:51

    iyi günler kardeş,çok güzel açıklamlar yapmışın ama ben c bilmiyorum,c# bilgim var bu kodları c #da nasıl yazabilirim.

    Beğen

  2. murat
    11/09/2012, 13:18

    slm ben 4 adet pointer girçem nasıl bi degişiklik yapabilirim

    Beğen

  3. murat
    11/09/2012, 13:20

    yani 4 adet pointer var aynı yeri işaret eden 4dünüde aynı anda degiştirmek programın üzerinde nasıl bi degişiklik yapabilirim

    Beğen

  4. Yiğit
    18/04/2014, 20:36

    linklere sahip olan birisi varsa benimle iletişime geçebilir mi lütfen ?

    Beğen

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: