Hile Yapımı - Internal Hile Yapımı [Video Ders + Rehber]

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üye
Katılım
11 Tem 2016
Mesajlar
43
Tepki puanı
40
Ödüller
6
9 HİZMET YILI
Merhaba arkadaşlar,
öncelikle şunu bilmenizi isterimki bu konuyu
Bağlantıları görmek için lütfen Giriş Yap


Başlarken

İçten 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

C++:
#include <windows.h>
#include <iostream>
void mainHack(); //prototypedir main fonk. altında esas fonk. tanımlayabiliriz

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID 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;
}

void 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.

C++:
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
Geçenki dersimizde bahsetmiştim:
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.
örenek olarak aşağıdaki resmi inceleyin;
ram.png




C++:
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;
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,

C++:
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.


C++:
DWORD base = *(DWORD*)0x50F4F4;
std::cout << base;
Kod:
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;

C++:
void 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.

C++:
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;
C++:
*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.


Videolu Anlatım

 
Banlı Üye
Katılım
13 Ara 2018
Mesajlar
652
Tepki puanı
234
Yaş
27
7 HİZMET YILI
Yeni Başlayanlar İçin Yararlı Olmuş Kalemine Sağlık.
 
Onaylı Üye
Katılım
17 Şub 2019
Mesajlar
105
Tepki puanı
13
Ödüller
6
Yaş
33
7 HİZMET YILI
güzel çalışma olmuş fakat benim gibi hiç bişiden anlamayıp sadece hilleyi kulanan birileri için zor olacaktır :D
 
Uzman Üye
Katılım
2 Ağu 2018
Mesajlar
261
Tepki puanı
35
Ödüller
8
7 HİZMET YILI
güzel çalışma olmuş fakat benim gibi hiç bişiden anlamayıp sadece hilleyi kulanan birileri için zor olacaktır :D
Katılıyorum Bende Pek Bşy Anlamıyorum Bi Ara Çok Uğraştım Kodlamayı Öğrenmeye Ama Bir Pok Anlamadım.:brainfree::2iq::ensarcry::ensarcry::ensarcry:
 
Moderatörün son düzenlenenleri:
Üye
Katılım
16 Şub 2019
Mesajlar
4
Tepki puanı
0
Yaş
51
7 HİZMET YILI
Elde Ettiğimiz client.dll+11D438 şeklinde pointerleri nasıl kullanıcaz?
 
Son düzenleme:
CoreCheat CSGO
Griffin Premium
Katılım
10 May 2016
Mesajlar
1,766
Çözümler
5
Tepki puanı
720
Ödüller
14
Yaş
25
Sosyal
10 HİZMET YILI
Teknik oalrak pointeri önceden tanımlıyosun yani external sayılır. Ilk olarak hook atmak ve attachdebugconsole koyulur ama onu da derlemeye göre tanımlarsın release derlenirse console oyuna bağlanmaz. VMTable, VEH (Detected boi) etc. şekilde hook atma, class tanımlama vsvs. anlatman gerekir.
 
Uzman Üye
Katılım
18 Eyl 2017
Mesajlar
152
Çözümler
1
Tepki puanı
24
Ödüller
8
8 HİZMET YILI
eline sağlık kardeşim güzel olmuş iş görür
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst