C++ OBJ [Module Base] Kontrolü

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Słyszę, słyszę letni powiew.
Kurucu
Katılım
20 Haz 2015
Mesajlar
7,666
Çözümler
136
Tepki puanı
20,724
Ödüller
25
10 HİZMET YILI
Merhaba arkadaşlar, birçok defa bu konu ile ilgili yardım istediğinizi görüyorum. Eskiden arkadaşların tw sine bağlanıp yardımcı olmaya çalışıyordum fakat artık bundan sıkıldım ve algoritmayı son defa sizlerle bu kadar açık bir biçimde paylaşıyorum. Öncelikle bilmeniz gereken şey şuan buraya vereceğim kodları zamanında bende kullandım. Yani çalışırlığı garantidir, algoritma denenmiştir. Size biraz karışık gelebilir, kontrollerden kafanız patlayabilir. Bilmenizi isterimki işimi kolaylaştırsın diye bu kodları baya bir düzenledim. Size "düzenlenmemiş" halini veriyorum. Kendi çabalarınızla adam edersiniz artık. Diğer türlü görüntü kirliliği oluşturuyor. Fakat mantık çalışmaktadır. Mantığı anladığınız zaman aynı şekil dilerseniz VB.Net hilenize de yapabilirsiniz. Bu sayede amele gibi kullanıcı oyun biterken obj li adreslerin checkboxunu kaldırmak zorunda kalmaz.

Wolftü ile artık uğraşmadığımızdan dolayı gönül rahatlılığı ile bu paylaşımı yapıyorum. Dilediğiniz gibi kullanabilirsiniz.
Credits: Algoritma dışında kodların bir çoğu public arkadaşlar. Ayriyetten yüksek ihtimal @LeftSpace büyük katkısı olmuştur. Dediğim gibi, aşağıdaki kodları ve algoritmayı uzun zaman önce kullanıyorduk. Size biraz amele işi gibi geliyor olabilir.


Mantık basit. Öncelikle ihtiyacımız olan adresler var. :

1: ingame_adr. Bu pointerin valuesi oyun içi 1, oyun dışı 0 oluyor.
2: wolfteambase. Bu hepimizin bildiği .bin li base adresi. Pointer değişken olmadığından dolayı GetModuleHandle fonksiyonu ile direk olarak base adresini çekebileceğiz.
2: objbase. Bu her oyun değişen objbasemiz. Algoritmamız ile bunu her yeni oyunda sadece 1 kere çekeceğiz. Bu sayede hem performanstan ödün vermeyeceğiz, hemde özellikler crash atmayacak.
3: takla_adr. Bu pointer takla pointeri. Örnek olsun diye obj li adres olarak bunu koydum.


Yukarıdaki ingame_adr ve takla_adr yi aşağıdaki kodlar ile "otomatik" olarak bulacağız. Bu sayede her yamada uğraşmayacaksınız. Bunun için "FindSignature" fonksiyonunu kullanıyoruz.

Kurulan algoritma:
1-Wolfteambase adresini ve base adresinin sizesini çekiyoruz. FindSignature fonksiyonunu kullanarak ingame_adr yi buluyoruz.
2-ingame_adr nin valuesini okuyarak ingame_value adlı değişkene atıyoruz. ingame_value 'nin değeri oyun içi 1, oyun dışı 0 oluyor.
3-Eğer ingame_value 0 sa objbase ve objli tüm adresleri (mesela takla_pointer)= 0 diyoruz. Eğer ingame_value 1 se ve objbase 0 sa "GetObj" fonksiyonunu kullanarak objbase değişkenine obj base adresini atıyoruz.
Her yeni oyunda obj basesi değiştiğinden dolayı obj adresini bir kere çektiğiniz vakit yeni oyuna girdiğinizde eski kaydettiğiniz obj adresinin basesini kullandığınızdan dolayı obj li özellikler çalışmayacaktır. Bundan dolayı eğer ingame_value 0 sa objbase = 0 diyoruz. Kullanıcı oyun dışında çıktığında objbase adresi 0 oluyor. Oyun içine girdiği vakit "Eğer obj adresi 0 a eşitse obj yi çek" diyoruz. Her oyundan çıktığında obj adresini sıfırladığımız için her oyuna girdiğinde yeni obj base adresini elde ediyoruz.
4- Eğer objbase 2 den büyükse (yani baseyi çektiysek) , ingame_adr 1 se (yani oyun içindeysek) ve takla_adr = 0 sa, FindSignature fonksiyonunu kullanarak takla adresimizi buluyoruz.


Kafanızada oluşabilecek sorular:
*FindSignature fonksiyonu nedir ?
Bu fonksiyon sayesinde belirlediğimiz base adresinin içerisinde bizim verdiğimiz array dizinini arıyor.
*Neden base adreslerinin sizesini çekiyoruz ?
FindSignature fonksiyonunu kullanarak aradığımız array dizinine uyan adresi bulabilmemiz için, base adresinin başlangıcını ve sonunu bilmemiz lazım. Yani sizeyi kullanarak sadece belirttiğimiz modülde tarama yapıyoruz.
*Adreslerin arrayını nasıl bulabilirim ?

Cheat Engine ile MemoryView kullanarak adrese gidin. Daha sonra bulmak istediğimiz adresten başlayarak aşağıya doğru byteleri tek tek yazmaya başlayın. Her yeni byte girdiğinizde cheat engine ile array scan yaparak kaç sonuç bulduğuna bakın. 1 sonuç bulana kadar byte eklemeye devam edin.

Örnek:
pnQrzJ.png

Mesela ben devenv.exe + 4615 adresini her yeni yamada uğraşmadan bulmak istiyorum. Gördüğünüz gibi adresimiz push 04 , bytesi 6A 04. Yani ben 6A 04 taraması yaptığımda bu adresi ve bu adresle birlikte oyundaki tüm push 04 leri bulacağım. Sadece bu adresi bulmak istediğimden dolayı bir altındaki mov eax, devenv.exe+3CECA adresinin bytelerini de 6A 04 ün sağına ekliyorum. Bu sayede artık sadece push 04 değil, push 04 mov eax taraması yapıyorum. Böyle böyle tek sonuç bulana kadar gidiyoruz.
6A 04 B8 CA CE 99 2F


Sanırsam bu kadar anlatım yeter. Kafanıza takılan bir soru olursa ve eğer bu soru bu yazıların içinde değilse cevaplarım. İyi kodlamalar :)

Gerekli Fonksiyonlar:
C++:
MODULEINFO GetModuleInfo(HMODULE hModule){
    MODULEINFO modinfo={0};
    if(hModule == 0)
    return modinfo;
    GetModuleInformation(GetCurrentProcess(),hModule, &modinfo,sizeof(MODULEINFO));
    return modinfo;
}

DWORD GetOBJ() //obj base çekme
{
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32;
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
me32.dwSize = sizeof(MODULEENTRY32);
Module32First(hModuleSnap, &me32);
do
{
string modulename = string(me32.szModule);
if(modulename.find("obj")!= -1 && modulename.find(".tmp" != -1){
CloseHandle(hModuleSnap);
return (DWORD)GetModuleHandleA(modulename.c_str());
break;
}
} while(Module32Next(hModuleSnap, &me32));
CloseHandle(hModuleSnap);
return 0;
}

bool compare(PBYTE sig, PCHAR mask, PBYTE adr)
{
    for (unsigned int i = 0; i < strlen(mask); i++)
    if (mask[i] == 'x' && sig[i] != adr[i]) return false;
    return true;
}

DWORD FindSignature(PBYTE sig, PCHAR mask, DWORD dwBase, DWORD dwLen, int iIndex)

{
    int cIndex = 0;
    if (!dwBase || !mask || !dwLen || !sig) return false;
    for (PBYTE i = (PBYTE)dwBase; i != (PBYTE)(dwBase + dwLen); i++)
    if (compare(sig, mask, i))
    if (iIndex == cIndex++) return (DWORD)i;
    return false;

}
Adres bulma ve obj kontrol Voidi:
C++:
DWORD takla_adr = 0, ingame_adr = 0, objbase = 0, objsize = 0, wolfsize = 0;
int ingame_value;
void ObjAdresleri(){
while(true){
DWORD wolfteambase = (DWORD)GetModuleHandleA("wolftü.bin");

if(wolfteambase > 0 && wolfsize == 0){ //Bir seferlik base adresinin size'sini çekiyoruz.
MODULEINFO getwolfptrbase =  GetModuleInfo((HMODULE)wolfteambase);
wolfsize = getwolfptrbase .SizeOfImage; // Base adresinin sizesini çekiyoruz.
}
if (ingame_adr == 0)
ingame_adr = FindSignature((PBYTE)"\x72\x00\x64\x00\x65\x72\x00\x65\x72\x00\x40","x?x?xx?xx?x",wolfteambase,wolfsize ,NULL) - 0x23;
ingame_value= *(DWORD*)(ingame_adr ); //ingame_value int değişkenine ingame_adr pointerimizin valuesini anlık atarıyoruz. Değer oyun içi 1, oyun dışı 0 oluyor.

if (ingame_value == 1 && objbase == 0) //Eğer kullanıcı oyun içindeyse ve daha obj yi çekmediysek obj yi bir seferlik çekiyoruz.
objbase = GetObj();

if(ingame_value == 0){ // Eğer kullanıcı lobby de ise OBJ li adresleri ve OBJ Base adresini 0 a eşitliyoruz. Çünkü her yeni oyunda obj basesi değiştiğinden dolayı, adreslerde değişecektir. Eğer sıfırlamayı yapmazsak bir sonraki oyun obj li özellikler çalışmayacaktır.
takla_adr = 0;
objbase = 0;
}

if(objbase>2 && objsize == 0) //Bir seferlik base adresinin sizesini çekiyoruz{
MODULEINFO getobjptrbase =  GetModuleInfo((HMODULE)objbase);
objsize= getobjptrbase .SizeOfImage; // Obj adresinin sizesini çekiyoruz
}

if(takla_adr == 0 && ingame_value == 1 && objbase > 2) //Obj çekildiyse,takla_adr çekilmediyse, oyun içindeysek bir seferlik obj li takla adresini çekiyoruz.
takla_adr =  FindSignature((PBYTE)"\x84\xc0\x75\x00\x68\x00\x00\x00\x00\x8b\xcf\xe8\x00\x00\x00\x00\x84\xc0\x75\x00\x8b\x16\x8b\x82\x00\x00\x00\x00\x8b\xce\xff\xd0\x83\xf8\x00\x75\x00\x8b\xce\xe8\x00\x00\x00\x00\x0f\xb6\x00\x51\xe8\x00\x00\x00\x00\x83\xc4\x00\x85\xc0\x74\x00\x68\x00\x00\x00\x00\x8b\xc8\xe8\x00\x00\x00\x00\x84\xc0\x74\x00\x8b\x16","xxx?x????xxx????xxx?xxxx????xxxxxx?x?xxx????xx?xx????xx?xxx?x????xxx????xxx?xx",objbase,objsize ,NULL) ; 


Sleep(1000); 
}
}
Hack Voidi:
C++:
void HackThread(){
while(true){
if (ingame_value > 0 && objbase > 2) //Eğer kullanıcı oyun içindeyse ve obj adresi çekildiyse
{
if (takla_adr > 0) //Eğer takla adresi bulunduysa
//Burada writeprocessmemory ile yada başka fonksiyonla adresin değerini değiştirin..
}
Sleep(1000);
}
}
 
Son düzenleme:
E- Sporcu Orkun
Onaylı Üye
Katılım
21 Şub 2018
Mesajlar
88
Tepki puanı
42
Yaş
34
8 HİZMET YILI
Güzel konu ama bunu paylaşmana rağmen kodlayamıycaklar , bir de Ingame için daha kullanışlı bir ptr daha var . Bu ptr tüm oyun içindeki durumlarımızı gösteriyor (lobi , oyun içi , oda , sunucu kısmı vs.) , bunu bulmak isteyenler envanterdeki slotların bulunduğu class'a bakabilir ...
 
Onaylı Üye
Katılım
13 Ara 2015
Mesajlar
51
Tepki puanı
18
Ödüller
9
10 HİZMET YILI
Güzel konu ama bunu paylaşmana rağmen kodlayamıycaklar , bir de Ingame için daha kullanışlı bir ptr daha var . Bu ptr tüm oyun içindeki durumlarımızı gösteriyor (lobi , oyun içi , oda , sunucu kısmı vs.) , bunu bulmak isteyenler envanterdeki slotların bulunduğu class'a bakabilir ...
benim kullandığım sisteme ne kadar da benziyo be
 
ÖLÜYÜM
Süper Moderator
Katılım
21 Eki 2015
Mesajlar
5,105
Çözümler
51
Tepki puanı
4,553
Ödüller
20
10 HİZMET YILI
Thank you Nader :rem:
 
Üye
Katılım
5 Eki 2017
Mesajlar
2
Tepki puanı
0
Yaş
24
8 HİZMET YILI
bilenler bana Driver sys Unload kodunu verebilirmi birde her exeyi suspend edebilecek kodu vb.net için her yere bakdım yok
 
Üye
Katılım
28 Eki 2018
Mesajlar
9
Tepki puanı
1
Yaş
25
7 HİZMET YILI
bu kadar bilgiyi burdan bakıpda yapabilene helal olsun yaklaşık 1 sene önce wolftü hileler daha kaliteliydi kolayca yapabiliyordum ama şuan baya zorlaşmış ve her yapmaya çalıştığımda hata veriyor:(
 
Üye
Katılım
19 Nis 2019
Mesajlar
8
Tepki puanı
0
Ödüller
2
Yaş
24
7 HİZMET YILI
ya ben birşey soracagım ben konu paylaşmak istiyorum ama olmuyor neden acaba nasıl yapabilirim bunu
 
Banlı Üye
Katılım
15 Eki 2018
Mesajlar
703
Çözümler
1
Tepki puanı
120
Yaş
25
7 HİZMET YILI
teşşekürler işime yarıyacak.
 
Boş
Süper Üye
Katılım
11 Nis 2018
Mesajlar
725
Tepki puanı
258
Ödüller
6
8 HİZMET YILI
Cheat engineyi oyun açıkken nasıl kullanabiliyorsunuz
oyunların güvenlik duvarları vardır bu duvarlar chet engine gibi 3.parti yazılımların oyun içine erişmesini engelliyen duvarlardır sen bu duvarları by pass ederek yani devre dışı bırakarak cheat engine gibi programları kullanabilrisin by pass nedir araştır daha çok bilgi bulursun
 
Onaylı Üye
Katılım
9 Eyl 2019
Mesajlar
145
Tepki puanı
12
Ödüller
4
6 HİZMET YILI
Using the FindSignature function, we need to know the beginning and end of the base address
 
Onaylı Üye
Katılım
19 Ocak 2020
Mesajlar
79
Tepki puanı
10
Ödüller
3
Yaş
33
6 HİZMET YILI
For me dont working, but i think i need watch more tutorials videos, but thanks for share it
 
Uzman Üye
Katılım
23 Ocak 2019
Mesajlar
174
Çözümler
1
Tepki puanı
13
Ödüller
6
Yaş
26
7 HİZMET YILI
bunu çoktandır vb.nette kullanıyorduk
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst