İşinize Yarayabilecek bir Fonksiyon

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üye
Katılım
10 Ara 2018
Mesajlar
47
Tepki puanı
10
Ödüller
3
Yaş
29
7 HİZMET YILI
C++:
uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
    uintptr_t addr = ptr;
    for (unsigned int i = 0; i < offsets.size(); ++i)
    {
        ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
        addr += offsets[i];
    }
    return addr;
}
}

Bu fonksiyonu internette buldum gerçekten çok faydalı.
Özellikle multi-lvl pointerlarda işinizi baya hafifletecek^^. Ham haliyle aldım herhangi bir değişiklik yapmadım siz isterseniz yaparsınız.

uintptr_t = Bir veri pointer(işaretçi) saklamak için kullanılır. "_t" burada "data" anlamına geliyor.

FindDMAAddy = fonksiyonun adı, siz kendiniz bir ad koyabilirsiniz önemli bir ayrıntı değil.

Gelelim Parametrelere;
3 adet parametresi var bu fonksiyonun arkadaşlar.

  1. HANDLE hProc= Bir handle veriyoruz.
bu handleyi ise "OpenProcess" API si ile alabiliriz.
Oda şu şekilde oluyor.
C++:
HANDLE hProcess = 0;
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, procId);
Yani birinci parametreye bu hProcess in döndüğü değeri veriyoruz.

2. uintptr_t ptr= Bulduğumuz Base adresi veriyoruz arkadaşlar. (ac_client.exe+0x00000)

3. std::vector<unsigned int> offsets= Burada ise offsetleri veriyoruz bunu şu şekilde yapabiliriz her bir offseti tek tek yazıp toplamak yerine.

std::vector<unsigned int> ammoOffsets = { 0x000, 0x00, 0x0 };
Burada "ammoOffsets" 3. parametre yerine yazılır.
uint bir vector tanımlanmıs ve icerisinde 3 tane offset var. (3 tane bu yuzden vektor mantıklıdır.)

Fonksiyonun içindeki işlemler ise arkadaşlar;

uintptr_t tipinde addr isimli bir değişken ptr ye eşitleniyor.

For döngüsüyle her bir offseti base adrese ekliyor.
daha sonra döndürdüğü değer olan addr bize şimdiki ammo adresini vermiş oluyor.
bunu her yaptığında;
ReadProcessMemory
yapıyor ve bir offset kadar daha ekliyor taa ki son offsete kadar.

Neticede bu fonksiyon bize şimdiki obje addresini veriyor ve biz bu adres üzerine "WriteProcessMemory" apisini kullanabiliyoruz.

Örneğin;
C++:
int newAmmo = 5000;
    WriteProcessMemory(hProcess, (BYTE*)ammoAddr, &newAmmo, sizeof(newAmmo), nullptr);
Gördüğünüz gibi ihtiyacımız olan process handlesi, ammo adresi, ve yeni atadığımız ammo.
Bkz.
Burada bir cin komutu ile kullanıcıya yeni istediği ammo değerini yazdırabiliriz.

Umarım faydalı olmuştur. İyi forumlar ^^

*** bunun ile alakalı detaylı bir gerçek hile yapma mekanizması da yakında gelecek takipte olun^^
 
Son düzenleme:
Seçkin Üye
Katılım
18 Nis 2019
Mesajlar
335
Tepki puanı
36
Ödüller
4
Yaş
35
7 HİZMET YILI
becerebilirsek tabi yinede teşekkürler
 
Üye
Katılım
10 Ara 2018
Mesajlar
47
Tepki puanı
10
Ödüller
3
Yaş
29
7 HİZMET YILI
Beceremeyecek bir şey yok anlamadığın yeri sor anlatırım detaylı bir şekilde.
 
Süper Üye
Katılım
22 Mar 2020
Mesajlar
608
Çözümler
5
Tepki puanı
71
Ödüller
5
Yaş
26
6 HİZMET YILI
güzel olmuş kardeşim detaylı bir şekilde anlatmışsın teşekkürler çok anlamıyorum bu işlerden ama çok zor gerçekten helal olsun
 
HardcoreX
Seçkin Üye
Katılım
30 Ara 2017
Mesajlar
302
Çözümler
2
Tepki puanı
17
Yaş
34
8 HİZMET YILI
teşekkürler emeğine sağlık hocam
 
Uzman Üye
Katılım
19 Nis 2020
Mesajlar
298
Çözümler
6
Tepki puanı
38
Ödüller
4
6 HİZMET YILI
Bir prosesin bellekte tutulan verilerine erişme ve değiştirme. Bilgisayar mühendisliği 3. sınıf nostaljisi yaşattın bana teşekkürler.
 
Onaylı Üye
Katılım
25 Şub 2018
Mesajlar
64
Çözümler
1
Tepki puanı
1
Ödüller
5
Yaş
31
8 HİZMET YILI
bu nedir açıklayabilcek var mı
 
GhosT
Seçkin Üye
Katılım
22 Mar 2019
Mesajlar
393
Tepki puanı
24
Ödüller
4
7 HİZMET YILI
emeğine sağlık teşekkürler
 
Süper Üye
Katılım
3 Eyl 2018
Mesajlar
602
Çözümler
2
Tepki puanı
42
Yaş
36
7 HİZMET YILI
teşekkürler emeğine sağlık kardo
 
Seçkin Üye
Katılım
27 Nis 2020
Mesajlar
549
Çözümler
6
Tepki puanı
73
Yaş
28
6 HİZMET YILI
teşekkürler uğraşmışsın emeğin var eline sağlık
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst