TrainerOnlineHileYapimi
ONLİNE OYUNLARDA HİLE NASIL YAPILIR?
HİLE/TRAİNER YAPMAK İÇİN NE GEREKLİDİR?
HER OYUNA HİLE NASIL YAPILIR?
~ JoJoPaPi Şubat 2011 ~
Aşağıdaki konu tamamiyle alıntıdır. Çok yakında kendi hazırladığım dökümanı sizlerle paylaşacağım. Aşağıda ne anlatıldığından bahsetmek gerekirse; kısaca oyundaki bazı kodları değiştirerek hile yapmak diyebiliriz.Yani herhangi bir oyunda belli bir miktar paramız var diyelim biz bu paranın tekabül ettiği kodu değiştirerek paranın miktarını artırıcaz.
2011
HİLE/TRAİNER YAPMAK İÇİN NE GEREKLİDİR?
HER OYUNA HİLE NASIL YAPILIR?
~ JoJoPaPi Şubat 2011 ~
Aşağıdaki konu tamamiyle alıntıdır. Çok yakında kendi hazırladığım dökümanı sizlerle paylaşacağım. Aşağıda ne anlatıldığından bahsetmek gerekirse; kısaca oyundaki bazı kodları değiştirerek hile yapmak diyebiliriz.Yani herhangi bir oyunda belli bir miktar paramız var diyelim biz bu paranın tekabül ettiği kodu değiştirerek paranın miktarını artırıcaz.
2011
TRAİNER YAPIMINA GİRİŞ |
---|
BAŞLANGIÇDökümanın tamamı Tahribat.com için gVeR 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 TerimlerWindow 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
![]() Dökümanın İçeriğiBu 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 Olanlar1-)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çıklamaWindowsta 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 olustun"); } else { printf("Basariyla tamamlandin"); } CloseHandle(hProcess); //OpenProcess ile açtığımız handleyi kapatıyoruz getch(); //Program kapanmadan tuşa basılmasını beklesin return 0; } 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 EtmekWindowsta 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 basinizn"); 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 olustun"); } else { printf("Basariyla tamamlandin"); } 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 |