Ü
Üye silindi 25
Thread Starter
Selam realitycheats ailesi nasılsınız umarım keyifler yerindedir bu konum tam size göre bir konu efsane bir konu konuma yorum ve like atmayı unutmayın arkadaşlar yorum ve likeleriniz bana fayda değil sitenin seo googlede öne çıkmasını sağlar
geçelim konuya
İlkten hack yapmak için bizim dll oluşturmamız lazım, bu dll bizim hilemiz olacak, oyuna enjekte edilecek ve
böylelikle bizim kodumuz oyunun bir parçası olacak. Bu harika bir şey çünkü biz adreslere direk erişebileceğiz
ve ReadProcessMemory yada WriteProcessMemory gibi fonksiyonlara ihtiyacımız kalmayacak.Şimdi dll giriş noktasını
oluşturmamız lazım

İlkten hack yapmak için bizim dll oluşturmamız lazım, bu dll bizim hilemiz olacak, oyuna enjekte edilecek ve
böylelikle bizim kodumuz oyunun bir parçası olacak. Bu harika bir şey çünkü biz adreslere direk erişebileceğiz
ve ReadProcessMemory yada WriteProcessMemory gibi fonksiyonlara ihtiyacımız kalmayacak.Şimdi dll giriş noktasını
oluşturmamız lazım
Code:
#include <windows.h>
#include <iostream>
**** mainHack(); //prototypedir main fonk. altında esas fonk. tanımlayabiliriz
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LP**** lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hModule);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)mainHack, NULL, NULL, NULL); //yeni bir thread oluşturur ve mainHack fonksiyonunu başlatır
}
else if (dwReason == DLL_PROCESS_DETACH) {
}
return TRUE;
}
**** mainHack()
{
}
Enjekte edildikten sonra, DllMain'deki parametreler doldurulur ve başarıyla enjekte edilirse dwReason, DLL_PROCESS_ATTACH değerini döndürür.
Kodumuzun tümü şimdilik mainHack () içinde olacak ve DllMain'e () hiçbir şey eklenmeyecek. Yeni bir iş parçacığı oluşturmak ve kodunuzu yeni iş parçacığında çalıştırmak istiyoruz. Kodunuzu DllMain'in içine koymayın çünkü burada yeni bir iş parçacığı oluşturulur. Şimdi hackMain () içine yararlı olabilecek bazı çok temel şeyler ekleyeceğiz.
Kodumuzun tümü şimdilik mainHack () içinde olacak ve DllMain'e () hiçbir şey eklenmeyecek. Yeni bir iş parçacığı oluşturmak ve kodunuzu yeni iş parçacığında çalıştırmak istiyoruz. Kodunuzu DllMain'in içine koymayın çünkü burada yeni bir iş parçacığı oluşturulur. Şimdi hackMain () içine yararlı olabilecek bazı çok temel şeyler ekleyeceğiz.
Code:
AllocConsole(); //Console ekranı açar
freopen("CONOUT$", "w", stdout); //std::cout kullanmamız için yetki verir
std::cout << "We Can Use Console For Debugging!\n"; //yazdırmak istediğimiz şeyi böyle yazdırabiliriz.
Bu üç satırlık kod hangi programa eklediyseniz ona dahil edilir, ayrıca bu konsol değişken değerlerini görebilmek için çok kullanışlı olur.
Pointerlar
bir pointer oluşturmak için
int *a;
gibi bir tanım yapmamız lazımdı. Bu neyi tutuyodu "herhangi bir adresi"
eğer biz bunu
"std::cout<<*a"
konsolda yazdırmak istersek "*a" yaptığımız için, "a" zaten herhangi bir adresi tutuyordu, başına tekrar "*"koyduğumuz için ise bu "a" nın içindeki değeri verir.
örnek olarak aşağıdaki resmi inceleyin;
https://mh.org/attachments/ram-png.15955
Pointerlar
bir pointer oluşturmak için
int *a;
gibi bir tanım yapmamız lazımdı. Bu neyi tutuyodu "herhangi bir adresi"
eğer biz bunu
"std::cout<<*a"
konsolda yazdırmak istersek "*a" yaptığımız için, "a" zaten herhangi bir adresi tutuyordu, başına tekrar "*"koyduğumuz için ise bu "a" nın içindeki değeri verir.
örnek olarak aşağıdaki resmi inceleyin;
https://mh.org/attachments/ram-png.15955
Code:
int x = 10; //x isimli bir değişken oluşturur ve içine 10 atar
int* pX; //integer bir pointer oluşturur
pX = &x; //pX pointerına x değişkeninin adresini atar.
std::cout << *pX; //pX adresinin referans ettiği ram kümesinin içindeki değeri gösterir.
Şimdi bu bilgileri kullanarak StaticAddress imizi işleyelim;
Şimdi bu bilgileri kullanarak StaticAddress imizi işleyelim;
static adresimiz 0x50F4F4; id bu bir adrestir bunu kullanmak için bize işte şimdi bir pointer değişkeni lazım, genelde hile yaparken bu tür değişkenler için DWORD data type ı kullanılır,
static adresimiz 0x50F4F4; id bu bir adrestir bunu kullanmak için bize işte şimdi bir pointer değişkeni lazım, genelde hile yaparken bu tür değişkenler için DWORD data type ı kullanılır,
Code:
DWORD * base = (DWORD*)0x50F4F4;
Burda ne yaptık = base pointeri oluşturduk ve "(DWORD*)0x50F4F4" ilede "0x50F4F" adresinin başına "(DWORD*)" koyarak bir adres olduğunu belirttik;
eğer bu noktada std::cout base yazdırırsak bize 0x50F4F4 gösterecektir.
eğer bu noktada std::cout base yazdırırsak bize 0x50F4F4 gösterecektir.
Code:
DWORD base = *(DWORD*)0x50F4F4;
std::cout << base;
Code:
DWORD * base = (DWORD*)0x50F4F4;
std::cout << *base;
bu ikisi arasındaki farkı anlarsanız bu iş çözülür.
bukadar açıklamadan sonra mainHack() ' in son görünümü şöyle olması lazım;

bukadar açıklamadan sonra mainHack() ' in son görünümü şöyle olması lazım;
Code:
**** mainHack()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "We Can Use Console For Debugging!\n";
DWORD base = *(DWORD*)0x50F4F4;
std::cout << base;
}
Buradan sonra işin içine ofsetlerimiz dahil oluyor. Tekrar söylüyorum "*a" bize o adresin içindeki değeri veriyodu değil mi ozaman şu tanım "*(DWORD*)0x50F4F4" bize "50F4F4" adresini içindeki değeri verecek eğer dersleri sıkı takip ediyorsanız burayı anlamanız lazım ve o tanım bize "Local Player Adresi"mizi verecek olduğunu da tahmin edersiniz.
Assault Cube de can ofsetimiz "0xF8" idi hatırlarsanız.
Assault Cube de can ofsetimiz "0xF8" idi hatırlarsanız.
Code:
DWORD * can = (base+0xF8)
yukarıdaki kod "CAN" adresni tutan bir pointer oluşturdu. Ve biz buna yeni bir atamak yapmak istersek de şöyle yapıcağız;
Code:
*can = 150;
Gibi bir satır yazarsak bunun anlamı şudur: "*can" -> can adresi içindeki değeri "= 150;" yap demektir aslında bu satır.
Buraya kadar aslında bir "Internal Trainer" hazırlamış olduk. Bu dll yi build edip herhangi bir enjektör ile oyuna enjekte edip sonuca bakabilirsiniz.
Buraya kadar aslında bir "Internal Trainer" hazırlamış olduk. Bu dll yi build edip herhangi bir enjektör ile oyuna enjekte edip sonuca bakabilirsiniz.