Trainer yapımına giriş (Oyunlar için hile programları)

TRAİNER YAPIMINA GİRİŞ

BAŞLANGIÇ

Dökümanın tamamı Tahribat.com için j4x tarafından yazılmıştır, VK listesi hariç, herhangi bir alıntı yapılmamıştır.Dökümanın amacı konu hakkında bilgisi olmayan arkadaşların trainer işine başlamasını sağlamaktır.Dökümanın tamamını yada bir kısmını alıntı yapmaz, izinsiz bir yerde yayınlamazsanız mesud oluruz.

Kullanılan Terimler

Window Handle(hWnd):Pencere tutamacı.Windowsta her pencereyi ifade eden bir handle(tutamaç) vardır.
Process:İşlem.
Process Id(pId):Windowsta çalışan processleride ifade eden bir Id vardır,OpenProcess gibi API lerin kullanımı için gereklidir.
Buffer:Değer yazımı ve okunması sırasında kullanılan geçici değişken.
VirtualKey:Klavye üzerindeki bir tuşu temsil eden anahtar kod.

Trainer Nedir?

Bilmiyorsanız burda işiniz ne :).Kısaca açıklamak gerekirse trainer oyunlar üzerine yazılan,kısa yoldan hile,oyun uzerinde değişiklik v.b yapmanızı sağlayan küçük programlardır.

Dökümanın İçeriği

Bu dökümanda trainer yapımına başlangıç için gerekli herşeyi elimden geldiğince anlatmaya çalışacağım.Adam gibi okuyup,anlayan;uygulayan kişilerin kendi trainerlerini yapabileceğini sanıyorum.
Bu dökümandaki kod örnekleri VB ve C++ programlama dilleri için verilecektir.

İhtiyacımız Olanlar

1-)Herhangi bir memory searcher(hafızada arama programı) örneğin Cheat Engine(tavsiye ederim)/ArtMoney/GameWiz32/Cheat-O-Matic v.b.Ben kendi adresimi kendim bulacam diyorsanız indirmenize gerek yok.(kendi bulacak adam bu dökümanı okurmu bilemem :))
2-)Compiler ve biraz programlama bilgisi(en azından WinAPI kullanabilecek kadar,bilmiyorsanızda bir compiler indirip vereceğim kodları düzenleyip derleyebilirsiniz.)

Kullanacağımız WinAPIler:

FindWindow
GetWindowThreadProcessId
OpenProcess
WriteProcessMemory
ReadProcessMemory
CloseHandle
GetAsyncKeyState

Kullanacağımız Sabit Değer:

PROCESS_ALL_ACCESS (OpenProcess API sine parametre olarak girilir, process üzerinde tam yetki için gereklidir.)

Nasıl yapacağız?

Programlar belirli değerleri çeşitli hafıza adreslerinde tutarlar.Basitçe yapacağımız iş, bu adresleri bulup,buradaki değerleri değiştirmek.Örneğin oyunda altın değerini tutan adres 100 ken bunun değerini 10000 yaparsak, etkisi oyunda görülecektir.

Detaylı Açıklama

Windowsta her pencerenin bir handle numarası vardır ve hWnd adını alır.FindWindow API fonksiyonu,pencere başlığı verilen pencereye ait hWnd yi bulmakta kullanılır.FindWindow ile oyun penceresinin hWnd'sini alacağız.Daha sonra GetWindowThreadProcessId API fonksiyonuyla hWnd sini gireceğimiz pencerenin PID(Process ID) sini alacağız.ProcessId, bir processi OpenProcess ile açabilmek için gereklidir.Aldığımız Id deki processi OpenProcess API siyle ve PROCESS_ALL_ACCESS(tam yetki) yetkisiyle açacağız.Açılmış process üzerinde hafıza bloğuna yazmak için WriteProcessMemory,okumak için ise ReadProcessMemory API fonksiyonları kullanılır.Processi açtığımıza göre WriteProcessMemory API fonksiyonuyla bu processteki belirttiğimiz hafıza bloğuna istediğimiz değeri yazacağız ve burdaki değeri değiştirmiş olacağız.ReadProcessMemory komutu şart değil fakat keyfinize göre varolan değeri okumakta kullanabilirsiniz.GetAsyncKeyState API fonksiyonu basılan tuşu belirlemede işimize yarayacaktır,bunun için ilgili örneği inceleyebilirsiniz.


Anlamadıysanız da dert etmeyin gVeR amcanızın verdiği kodlardaki adres ve değeri değiştirerek kendi trainerlerinizde kullanabilirsiniz.Şimdilik bu kadar açıklama yeter,icraata geçelim.Ben örnek olarak Windows'un standart oyunu Mayın Tarlası için bir trainer yazacağım.

İLK TRAİNERİMİZ

İlk olarak Başlat>Programlar>Oyunlar>Mayın Tarlası konumundaki Mayın Tarlası oyunumuzu açıyoruz. Daha sonra Cheat Engineyi açıyoruz(farklı bir memory searcher kullanıyorsanız onu açın,örneklerde Cheat Engine'den ekran görüntüleri kullanılacaktır).Cheat Engine programının sol üst köşesinde parlayan simgeyi farkettinizmi?



Bu ikona tıklıyoruz ve çıkan listeden winmine.exe yi seçiyoruz(mayın tarlasının exe adı).Daha sonra Mayın Tarlasından yeni bir oyun başlatıyoruz.



10 rakamını gördünüzmü.Burdaki rakam bayrak sayımızı gösteriyor.Şimdi Cheat Engineye dönüyoruz ve 'Value' kutucuğuna 10 yazıyoruz-scan type Exact value,value type ise 4 byte kalıyor- ve 'First Scan' butonuna tıklıyoruz.Sol taraftaki listede birsürü adres çıktı değilmi.Bu adresler 10 değerinin bulunduğu yerlerdir.Bende 103 değer çıktı.Listede 103 değer var fakat bize 1 değer lazım.Bu arama işlemi sırasındaki amacımız değer sayısını en aza düşürebilmek.Onun için mayın tarlasında herhangi bir kutucuğa sağ tıkla bayrak koyuyoruz böylece bayrak sayımız 9 a düşüyor yani değişmiş oluyor.Şimdi Cheat Engine ye dönelim.Value kutusundaki 10 değerini silerek 9 yazalım ve 'Next Scan' butonuna basalım ki bu buton bir önceki yaptığımız aramada çıkan sonuçlar üzerinde yeniden arama yapmaya yarar.



Evet bende 1 değer kaldı.Burda bizim için önemli olan değerin 'Address' kısmı yani örnekte '01005194'.Eğer daha fazla değer varsa tekrar bir bayrak koyup, 8 diye aratabilirsiniz.1 değer çıkana kadar bu işlemi tekrarlayın.Tabi illa bayrak değerini düşüreceksiniz diye birşey yok önemli olan değiştirmek..Neyse değeri bulduğumuza göre bu değeri istediğimiz gibi değiştiren programı yazalım.

Visual Basic İçin Örnek Kodlar

'İlk olarak WinAPI tanımlamalarımız
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

'Forma bir TextBox(Text1) bir CommandButton(Command1) ekliyoruz.Ve kodlar..

Private Sub Command1_Click()
On Error Resume Next 'Hata oluşursa görmezden gel devam et
Dim hWnd As Long, pID As Long, hProcess As Long, adres As Long, buffer As Long 'Değişken tanımlamaları Long olarak tanımlıyoruz çünkü integerin sınırı olan 32767 den büyük değerler var
adres = &H1005194 'Buraya Cheat Enginede bulduğunuz adresi başına '&H" koyarak yazın,&H hexi(16 lık sayı sistemini) ifade ediyor
buffer = CLng(Text1.Text) 'Text1 de yazanı sayıya çeviriyoruz
hWnd = FindWindow(vbNullString, "Mayın Tarlası") 'Pencere handlesi alınıyor
GetWindowThreadProcessId hWnd, pID 'Process Id aliyoruz
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pID) 'Processi tam yetkiyle açıyoruz
If (WriteProcessMemory(hProcess, ByVal adres, buffer, 4, 0&)) = 1 Then 'Eğer hafızaya yazılmışsa 1 değeri döner
MsgBox "İşlem başarıyla tamamlandı", vbInformation
Else
MsgBox "Bir hata oluştu", vbCritical
End If
CloseHandle (hProcess) 'OpenProcess ile açtığımız handleyi kapatıyoruz..
End Sub




Programdan bir görünüm:



İşte mayın tarlasındaki değişiklik:



Aşağıdada aynı programın konsol versiyonunu C++ için veriyorum..

C++ İçin Örnek Kodlar

//C++ da WinAPI tanımlamasına gerek yoktur bunun yerine windows.h başlık dosyası include edilmelidir. Yeni bir Console Application açıp,cpp dosyanızı ekleyin.Kodlar aşağıdaki gibidir.

#include "windows.h" //Windows fonksiyon ve tanımları için
#include "stdio.h" // printf,scanf gibi standart giriş/çıkış işlemleri için
#include "conio.h" // getch için

int main()
{
//Değişken tanımlamaları
HWND hWnd;
DWORD pID;
HANDLE hProcess;
DWORD adres=0x1005194; //0x hexi(16 lık sayı sistemini) ifade ediyor
int buffer;
printf("Kac bayrak istiyorsunuz?\n");
scanf("%d",&buffer); //Kullanıcıya bayrak sayısını soruyoruz..
hWnd=FindWindow(NULL,"Mayın Tarlası"); //Pencere handlesini alıyoruz
GetWindowThreadProcessId(hWnd,&pID); //Process Id alıyoruz
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pID); //Processi tam yetkiyle açıyoruz
if (WriteProcessMemory(hProcess,(LPVOID)adres,&buffer,4,NULL)==0) //Hafızaya yazıyoruz,başarısız olursa 0 döner
{
printf("Bir sorun olustu\n");
}
else
{
printf("Basariyla tamamlandi\n");
}
CloseHandle(hProcess); //OpenProcess ile açtığımız handleyi kapatıyoruz
getch(); //Program kapanmadan tuşa basılmasını beklesin
return 0;
}




Aşağıdaki gibi bir görünümü olacaktır..



Evet ilk trainer örneklerimizi yaptık ama trainerlar genelde belirli bir tuşa basıldığında hileleri aktive ederler.Bu işlem için GeyAsyncKeyState API fonksiyonunu kullanabiliriz.

Tuş Basımlarını Tespit Etmek

Windowsta her tuşun ayrı bir VirtualKey i vardır.GetAsyncKeyState komutu kodu verilen tuşun durumunun belirlenmesinde kullanılır.Basıldığında -32767 değerini alır.Belirli tuşta bu değeri aldığımızda trainera işlem yaptıracağız.Sürekli tespit için timer(zamanlayıcı) kullanabiliriz.

Visual Basic İçin 2. Örnek Kodlar

'WinAPI tanımlamalarımız Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

'Forma bir Timer(Timer1) ekliyoruz.Form Load olayında "Timer1.Enabled=True" komutuyla timeri aktif ediyoruz.Timer in Interval özelliği, kac milisaniyede bir aktif olacağını belirtir(1 saniye=1000 milisaniye).Ben örnekte 10 yaptım,siz istediğinizi yapabilirsiniz,tuş duyarlılığı bununla doğru orantılı olacaktır.Ve kodlar..

Private Sub Timer1_Timer()
On Error Resume Next
Dim hWnd As Long, pID As Long, hProcess As Long, adres As Long, buffer As Long
If GetAsyncKeyState(&H4B) = -32767 Then
adres = &H1005194
buffer = 100
hWnd = FindWindow(vbNullString, "Mayın Tarlası")
GetWindowThreadProcessId hWnd, pID
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pID)
If (WriteProcessMemory(hProcess, ByVal adres, buffer, 4, 0&)) = 1 Then
MsgBox "İşlem başarıyla tamamlandı", vbInformation
Else
MsgBox "Bir hata oluştu", vbCritical
End If
CloseHandle (hProcess)
End If
End Sub




Kodlarda GeyAsyncKeySatet fonksiyonuna parametre olarak verdiğimiz &H4B,hex 4B yi ifade ediyor.Buda 'k' tuşunun VirtualKey kodudur.Programdan bir görünüm:



Mayın Tarlası'nı açıp 'k' tuşuna bastığımızda,program ön planda olmasa bile etkisini gösterecektir.



C++ İçin 2. Örnek Kodlar

Şimdi aynı örneği C++ için konsol uygulaması olarak yapıyoruz,yeni bir Console Application açıp cpp dosyanızı ekleyin.Kodlar:

#include "windows.h"
#include "stdio.h"
#include "conio.h"

int main()
{
HWND hWnd;
DWORD pID;
HANDLE hProcess;
DWORD adres=0x1005194;
int buffer=100;
printf("Mayin tarlasinda 100 bayrak icin c tusuna basiniz\n");
while(true)
{
Sleep(100);
if (GetAsyncKeyState(0x43)==-32767)
{
hWnd=FindWindow(NULL,"Mayın Tarlası");
GetWindowThreadProcessId(hWnd,&pID);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pID);
if (WriteProcessMemory(hProcess,(LPVOID)adres,&buffer,4,NULL)==0)
{
printf("Bir sorun olustu\n");
}
else
{
printf("Basariyla tamamlandi\n");
}
CloseHandle(hProcess);
break;
}
}
getch();
getch();
return 0;
}




Buradaki '0x43' hex 43 anlamındadır,buda 'c' tuşunun VirtualKey kodudur.43 yerine aşağıda vereceğimiz VirtualKey listesinden bir tuş seçebilir,böylece istediğiniz tuşa basıldığında istediğiniz hileyi yaptırabilirsiniz.

Son olarak sıklıkla kullanabileceğiniz VirtualKey lerin listesini verelim,MSDN den alınıp düzenlenmiştir,tamamına bakmak için buraya tıklayın(bu kodları Visual Basic' te kendiniz tanıtacaksınız,C++ da ise windows.h include edilmesi yeterlidir.):

VirtualKey Listesi

(30):0 key
(31):1 key
(32):2 key
(33):3 key
(34):4 key
(35):5 key
(36):6 key
(37):7 key
(38):8 key
(39):9 key
(41):A key
(42):B key
(43):C key
(44):D key
(45):E key
(46):F key
(47):G key
(48):H key
(49):I key
(4A):J key
(4B):K key
(4C):L key
(4D):M key
(4E):N key
(4F):O key
(50):P key
(51):Q key
(52):R key
(53):S key
(54):T key
(55):U key
(56):V key
(57):W key
(58):X key
(59):Y key
(5A):Z key
VK_F1 (70):F1 key
VK_F2 (71):F2 key
VK_F3 (72):F3 key
VK_F4 (73):F4 key
VK_F5 (74):F5 key
VK_F6 (75):F6 key
VK_F7 (76):F7 key
VK_F8 (77):F8 key
VK_F9 (78):F9 key
VK_F10 (79):F10 key
VK_F11 (7A):F11 key
VK_F12 (7B):F12 key
VK_RETURN (0D):ENTER key

SONUÇ

Bu kadar işin amacı mayın tarlasında bayrak yapmak değil tabiki.Eğer ki anlatmaya çalıştıklarımı anladıysanız, ne mutlu size ki trainer yapımına başlangıç için gerekli bilgilere sahipsiniz..Şimdi gidip sevdiğiniz oyunlara kendi hile aracınızı yazabilirsiniz :),şimdiden kolay gelsin..

Tarih:
Hit: 497437
Yazar: j4x

Taglar: hile trainer hile yapma trainer yapımına giriş oyunlar için hile oyun hile


Yorumlar


Yorum yapabilmek için üye girişi yapmalısınız.

Yorumlar

GuArDiAn55 tarafından yazıldı. Tarih: 11/Eyl/18 14:32
Mükemmel makale. hitten belli zaten yarım milyon. Çok teşekkürler.
RockZs tarafından yazıldı. Tarih: 24/Haz/15 12:20
Çok teşekkürler, bunu yazan insan olamaz :D