Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Isse Kun
Emektar Üye
Katılım
15 May 2017
Mesajlar
4,801
Çözümler
5
Tepki puanı
2,106
Ödüller
15
Sosyal
9 HİZMET YILI
Hedef: Aşağıdaki laboratuvarlardan birkaçı
Bağlantıları görmek için lütfen Giriş Yap
hedef alacak. Bu oyun Quake motoruna dayalı bir FPS'dir.

Wesnoth gibi, bu oyun da açık kaynaklıdır ve entegre bir hile karşıtı yoktur. Ayrıca düşük özellikli donanımlarda da iyi çalışır. Wesnoth'un aksine, Chocolatey paketi bozuldu. Bu nedenle, oyunu kurmanın en iyi yolu, yükleyiciyi siteden indirip çalıştırmaktır.

Oyunun çalışması için VirtualBox'ta 3D hızlandırmayı etkinleştirmeniz gerekecektir. Bilgisayarınızın donanımına bağlı olarak, makinenizin bir VM içinde 3B oyun çalıştırması mümkün olmayabilir. Bu durumda, birkaç seçeneğiniz vardır. Bazıları diğerlerinden daha iyidir:​
  1. VMWare veya Hyper-V gibi başka bir hipervizörü keşfedin.​
  2. Başka bir makineyi özel bir bilgisayar korsanlığı bilgisayarı olarak kullanın ve ev ağınızdan izole edin.​
  3. Daha az gereksinime sahip başka bir hedef oyun bulun ve aşağıdaki laboratuvarların konseptlerini takip edin.​
  4. Sabit sürücünüzü bölümleyin ve çift önyükleme. Kişisel sürücünüzü şifreleseniz bile, kötü amaçlı araçların kişisel verilerinize erişmesi mümkündür.​
  5. Hedefi ve araçları kişisel makinenizde çalıştırın ve kötü amaçlı bir şey olmamasını umuyoruz.​
Tanımlama: Bu laboratuvardaki amacımız, diğer oyuncuları duvarlardan görmemizi sağlayan bir hack türü olan bir wallhack oluşturmaktır. Oyunun grafik fonksiyonlarının hiçbirini değiştirmeyeceğiz. Bunun yerine, oyunun oluşturma mantığını kullanacağız ve oyunun hafızasının bölümlerini değiştireceğiz.

Anlatım: 3D oyunlarda, bir öğenin oyuncunun görüş alanında ne zaman görünür olması gerektiğini belirlemek için derinlik testi kullanılır. Örneğin, bir oyuncu bir duvarın arkasındaysa, derinlik testi oyunun oluşturma mantığına oyuncuyu çizmemesini söyleyecektir.

Tüm wallhack'ler derinlik testini devre dışı bırakma prensibine göre çalışır. Bunu yapmanın bir yolu, oyunun grafik kütüphanesini bağlamak ve kütüphane işlevleri aracılığıyla derinlik testini devre dışı bırakmaktır. Bu yaklaşımı bir sonraki laboratuvarda ele alacağız. Bu laboratuvarda, hedefimize ulaşmak için oyunun yerleşik oluşturma mantığına güveneceğiz.

Oyunlar, oyuncular, silahlar ve kapılar gibi harita varlıkları da dahil olmak üzere birçok dinamik nesne çizmek zorundadır. Bu nesneler normalde varlıklar olarak adlandırılır. Geliştirme basitleştirmek ve performansı artırmak için, oyunlar genellikle tüm bu varlıkları çizmek için aynı işlevi kullanır.

Ancak, bu varlıkların genellikle farklı işleme konuları vardır. Bir oyun karakterlerin üzerine gölgeler çizmek isteyebilir, ancak açılabilen kapılar gibi statik varlıklara değil. Oyunlar genellikle her varlık için yapılara sahip olur ve bu işleme hususlarını varlığın yapısında depolar. Varlık oluşturulduğunda, oyun bu üyeyi kontrol edecek ve varlığı ona göre işleyecektir.

Su birikintileri veya cam birikintileri gibi bazı varlıklar için, oyunlar derinlik testini devre dışı bırakmak isteyecektir. Bu nedenle, varlık sınıfındaki render üyesi devre dışı bırakılmış bir derinlik testi değerine sahip olacaktır. Objelerin çiziminden sorumlu fonksiyonu bulabilirsek ve ardından tüm objeleri bu devre dışı bırakılmış derinlik testi değerini içerecek şekilde değiştirebilirsek, oyuncular duvarlardan görünecektir.

Hedef Kurulum: Quake motorunu temel alan tüm oyunların bir konsolu vardır. Bu konsola oyun sırasında tilde (~) tuşuna basılarak erişilebilir. Bu konsol, oynatıcıyı hareket ettirme veya haritayı değiştirme gibi komutları çalıştırmanıza olanak tanır. Bu komutlar genellikle ters eğik çizgi (\) ile başlar ve sekmeye basılarak otomatik olarak tamamlanabilir. Amaçlarımız için bazı yararlı komutlar şunlardır:​
  • \devmap manastırı - hileler etkinken Abbey haritasını başlatın​
  • \g_gametype 0 - varsayılan oyun modunu deathmatch olarak ayarlayın​
  • \bot_enable 1 - botların bir oyuna katılmasını sağlayın​
  • \reload - geçerli haritayı yeniden başlatın​
  • \addbot boa 1 - bot ekleme​
Bu komutlara ek olarak, Alt + Enter tuşlarına basarak oyunu kolayca pencereli bir moda geçirebiliriz.

Çizim Objelerini Bulma: Bize sunulan komutları keşfederek, \r_ altında birkaç çizim komutu bulabiliriz:

urbanterror1.f3a8d17f.png


Bizim için en önemli emir r_drawentities. Bu değer 0 olarak ayarlandığında, oyuncumuz da dahil olmak üzere oyunda varlıklar çizilmez:

urbanterror2.622111bf.png


Oyunun kodunun şöyle göründüğünü varsayabiliriz:

C++:
if(r_drawentities == 1) {
  draw_entities();   
}

Bu kodu bulmak için, r_drawentities değerini tutan değişkenin adresini bulmak için Cheat Engine'i kullanacağız. Bu değeri daraltmak için konsoldaki r_drawentities değerini 0'dan 1'e değiştirebiliriz. Ardından, bu değere erişen kodu bulmak için x64dbg'de erişimde bir kesme noktası kullanabiliriz. Kesme noktası aşağıdaki kodda açılır:

urbanterror3.83d4e901.png



r_drawentities değerinin ecx'e yüklendiğini ve daha sonra test edildiğini görebiliriz. Bir yazmacın kendisine karşı test edilmesi, o kaydın değerini 0 ile karşılaştırır. Değer 0'a eşitse, oyun . Bu çağrı büyük olasılıkla oyundaki varlıkların çiziminden sorumludur. Bu çağrıyı hayırlayarak bunu doğrulayabiliriz. Nop'd olduğunda, oyun herhangi bir varlık çizmez. 0x52F717

Varlıklar ve İşleme: Çağrının içine girersek , aşağıdaki kodu görürüz: 0x52F717

urbanterror4.610b6c21.png


Vurgulanan ikinci blokta, değerlerin birkaç kayda yüklendiğini ve belirli değerlerle karşılaştırıldığını görebiliriz. Bu değerler eşitse, oyun farklı konumlara atlar ve farklı oluşturma kodu yürütür. Yakından bakarsak, kayıtların ebx'te tutulan adresin değerlerine dayandığını görebiliriz. İlk vurgulanan bloğa bakarsak, ebx'in ayarlandığı en yakın konumu buluruz. Artık biliyoruz ki address , ebx, oluşturulacak mevcut varlığın büyük olasılıkla ne olduğunu içerir. Bu adreste bir kesme noktası belirlersek ve dökümde ebx'in adresini gözlemlersek, bir veri yığını görürüz: 0x52D2FD


urbanterror5.3131bd6b.png


Bu veri yığını diğer verilerden izole edildiğinden ve sürekli bir bölümde, bir tür yapıyı temsil ettiğini varsayabiliriz. Örneğin, şöyle bir şey görünebilir:

C++:
struct entity {
  int type;
  int render_type;
  float location[3];
  ...
}

Yapının hangi konumunun render türünü tuttuğunu belirlemek için bu yapıyı tersine çevirmeliyiz.

Varlık Yapısını Tersine Çevirme: Bir oyunda bilinmeyen bir yapıyı tersine çevirmenin birçok yolu vardır. Bunun bir yolu, geçerli değerlerden oluşan bir veri kümesi oluşturmak ve ardından bu değerlere dayalı çıkarımlar yapmaktır. Örneğin, tüm yapılar sürekli artan bir üye içeriyorsa, bu üyenin bir tür sayaç olarak kullanıldığını varsayabiliriz.

Bu durumda, amacımız varlık yapısını tamamen tersine çevirmek değil, yalnızca oluşturma türü değişkenini bulmak için yeterince ters çevirmektir. Objeleri çizmekten sorumlu kodu bulduğumuzdan, bu kodda bir kesme noktası ayarlayabilir ve varlık yapılarını gözlemleyebiliriz. Son bölümde tartıştığımız gibi, adres , ebx, oluşturulacak geçerli varlığın adresini tutar. 0x52D2FD

Kesme noktamıza her vurulduğunda ebx'in farklı bir değer içerdiğini fark edeceksiniz. Kesme noktasına her vurulduğunda dökümdeki ebx'i manuel olarak takip edebilsek de, x64dbg'nin Watch özelliğini kullanmanın daha uygun bir yoludur. İzleme paneline bir ifade eklemek, onu dökümden bağımsız olarak gözlemlememizi sağlar. Bu durumda, [ebx] ifadesini izleyebilir ve adresin geçerli değerini her zaman ebx cinsinden görüntüleyebiliriz.

İzlenecek bir değer eklemek için İzleme panelini açın (dökümlerin yanında), sağ tıklayın ve Ekle'yi seçin:


urbanterror6.28484244.png


Görüntülenen modal içine ifadenizi yazın. Bu durumda, sadece [ebx] ile başlamak istiyoruz:

urbanterror7.ca33749f.png


Varlık yapısının ilk parçasını da gözlemlemek istiyoruz. Şimdilik, tüm bu değerlerin 4 bayt uzunluğunda olduğunu varsayacağız. [ebx+4] ile [ebx+2C] arasındaki saatleri ekleyin. İşiniz bittikten sonra İzleme paneli şöyle görünmelidir:

urbanterror8.b0aec884.png



Tüm bunlar ayarlandıktan sonra, kesme noktanızı devre dışı bırakın ve suyla dolu bir haritaya yükleyin. Harita Manastırı, haritanın sol üst köşesinde bir çeşmeye sahiptir. Suya baktığınızdan ve altındaki zemini görebildiğinizden emin olun.


urbanterror9.28530eee.png


Tüm bunlar ayarlandıktan sonra, kesme noktanızı yeniden etkinleştirin ve anında açılmalıdır. Saat panelinin değerini gözlemledikten sonra yürütmeye devam edin. Birçok yinelemeyi gözlemledikten sonra, bazı eğilimleri fark etmeye başlamalısınız. 0x52D2FD

urbanterror10.fb0b7c5c.png


urbanterror11.f8cf73b8.png


urbanterror12.fb1209db.png


[ebx] (kırmızı) değeri her zaman 0 olarak görünür. [ebx+4] (mavi) değeri , , ve . [ebx+8] (beyaz) değeri tutarlı bir şekilde, 'den 'ye vb. artıyor gibi görünüyor. Pembe renkle vurgulanan değerler, görünüşte rastgele değerler ile 0 arasında değişiyor gibi görünür. Benzer şekilde, sarı renkle vurgulanan değerler rastgele görünür, ancak tutarlı bir şekilde [ebx+8] öğesine bağlıdır. 0xD0x400x820x830x790x800x81

Tüm bu veriler ezici olabilir, ancak umursamadığımız değerleri ortadan kaldırarak anlamlandırabiliriz. Ekranda en az üç varlığımız olduğunu biliyoruz: oyuncu modelimiz, silahımız ve su. Muhtemelen kapılar gibi başka varlıklar da olduğunu varsayabiliriz. Bu varlıkların çoğu birçok benzerliği paylaştığından, en az iki varlık arasında nispeten tutarlı veriler aramak istiyoruz. Ancak bazı varlıkların bu değeri paylaşmaması gerektiğini de biliyoruz.

Bu modelle, her zaman 0 olduğu için [ebx] (kırmızı) 'yı ortadan kaldırabiliriz. Ayrıca [ebx+8] (beyaz) öğesini de ortadan kaldırabiliriz, çünkü her varlık için benzersizdir. Hem pembe hem de sarı değerler, her nesne için benzersiz görünür. Bu bizi , , ve . arasında değişen [ebx+4] (mavi) ile bırakır. Şimdilik, bunun bizim oluşturma değerimiz olduğunu tahmin edeceğiz ve her bir değeri araştıracağız. 0xD0x400x820x83

İşleme ve Değerini Değiştirme: Her obje için [ebx+4] değerini ayarlarsak, draw entities işlevinin bir sonraki çağrılışında bunun üzerine yazılır. Varlık başka bir konumdan ebx'e yükleniyor gibi görünüyor. Bu nedenle, varsayılan işleme değerimizi keşfetmemizin en kolay yolu, konumu bağlamak ve her varlık için [ebx+4] ayarlamaktır. Bu kod mağarasını x64dbg'de oluşturabiliriz, ancak birden fazla değeri test etmemizi kolaylaştırmak için kancamızı bir DLL'de oluşturacağız. 0x52D2FD

Kancamız (Hook) şu noktada olacak, çünkü ebx'in o noktada doğru değeri içereceğini biliyoruz. Kancamızın kendisi nispeten basit olacak: kayıtları kaydedeceğiz, [ebx + 4] değerini ayarlayacağız, kayıtları geri yükleyeceğiz ve ardından orijinal mov talimatını uygulayacağız: 0x52D2FD

C++:
DWORD ret_address = 0x0052D303;

__declspec(naked) void codecave() {
  __asm {
    pushad
    mov dword ptr ds:[ebx+4], ???
    popad
    mov dword ptr ds:[0x102AE98], ebx

    jmp ret_address
  }
}

İlk değerimiz için, en yüksek uçtan başlayalım ve deneyelim: 0x83

C++:
mov dword ptr ds:[ebx+4], 0x83

DLL enjekte edildikten ve oyuna geri döndüğünüzde, hiçbir şeyin değişmediğini fark edeceksiniz. Aynı şekilde, denerseniz, bazı gölgelerin farklı göründüğünü fark edebilirsiniz, ancak her şey oldukça benzer görünür. Sonra, deneyelim : 0x400xD

C++:
mov dword ptr ds:[ebx+4], 0xD

Hemen, karakterinizin modelinin artık kameranın önünde şeffaf göründüğünü fark etmelisiniz:

urbanterror13.faa4183b.png


Bu, derinlik testinin devre dışı bırakılmış olabileceğinin iyi bir işaretidir. Ardından, üçüncü şahıs moduna geçin (cg_thirdperson) ve bazı botlar ekleyin. Hareket ettikçe, artık tüm botları duvarlardan görebildiğinizi fark etmelisiniz:

urbanterror14.b12a29c9.png


Bununla, derinlik testini devre dışı bırakmak için tüm varlıklar için işleme değerini başarıyla ayarladık. Silahlar ve merdivenler gibi diğer varlıkların da duvarlardan göründüğünü görebiliriz.

Bir iyileştirme, birinci şahıs modunun bozulmaması için oyuncu modelimiz için derinlik testini yeniden etkinleştirmektir. Bunu yapmak için oyuncu yapısını ve mevcut oyuncunuzu tanımlamanız gerekir.

Bu proje için tam kaynak kodu, karşılaştırma için
Bağlantıları görmek için lütfen Giriş Yap
mevcuttur.​
 
Seçkin Üye
Katılım
10 Ocak 2021
Mesajlar
351
Çözümler
1
Tepki puanı
35
Ödüller
4
Yaş
26
5 HİZMET YILI
Ellerine sağlık kardeşim. Şu kodlamayı bi çözersem kesinlikle deneyeceğim...
 
Donator
Katılım
10 Şub 2019
Mesajlar
1,034
Çözümler
5
Tepki puanı
104
Ödüller
9
7 HİZMET YILI
Çok geniş, detaylı, açıklayıcı bir anlatım olmuş. Yıldızlı like atabilsem atacaktım, teşekkürler.
 
Onaylı Üye
Katılım
20 Ocak 2022
Mesajlar
56
Tepki puanı
3
Ödüller
2
Yaş
21
4 HİZMET YILI
Güzel açıklamışsınız tebrikler
 
Ultra Üye
Katılım
18 May 2016
Mesajlar
1,534
Çözümler
3
Tepki puanı
377
Ödüller
11
Yaş
23
10 HİZMET YILI
Emeğine eline sağlık hocam. Gayet bilgilendirici ve gayet açık bir anlatım.
 
Fikirlere kurşun işlemez
Ultra Üye
Katılım
7 Nis 2020
Mesajlar
1,827
Çözümler
5
Tepki puanı
232
Ödüller
9
6 HİZMET YILI
Hocam kral adamsın valla , her detayına kadar anlatmışın.
 
Sanma şâhım herkesi sen sâdıkâne yâr olur
Ultra Üye
Katılım
11 Ara 2022
Mesajlar
1,736
Çözümler
372
Tepki puanı
246
Ödüller
5
Sosyal
3 HİZMET YILI
Elinize emeğinize sağlık . en kısa zamanda bunları direk kafaadan yapmak dileyi ile
 
Mai Sakurajima
Onaylı Üye
Katılım
26 Şub 2023
Mesajlar
102
Tepki puanı
8
Ödüller
2
Sosyal
3 HİZMET YILI
Daha gelişmiş yeni oyunlarda tersine mühendislik, veri madenciliği gibi şeyler kullanılıyor mu?
 
Isse Kun
Emektar Üye
Katılım
15 May 2017
Mesajlar
4,801
Çözümler
5
Tepki puanı
2,106
Ödüller
15
Sosyal
9 HİZMET YILI
Daha gelişmiş yeni oyunlarda tersine mühendislik, veri madenciliği gibi şeyler kullanılıyor mu?
Daha gelişmiş oyunlarda aynı mantaliteyi kullanabilirsiniz ancak projeye dökerken daha gelişmiş kodlamalar yapmanız gerekir. Örneğin CSGO hile kodlama mantığında yaptığınız proje valorantta kullanamazsınız. Ayrıca gelişmiş oyunlar için anti-cheat bypass yapmanız gerekir.
 
Mai Sakurajima
Onaylı Üye
Katılım
26 Şub 2023
Mesajlar
102
Tepki puanı
8
Ödüller
2
Sosyal
3 HİZMET YILI
Daha gelişmiş oyunlarda aynı mantaliteyi kullanabilirsiniz ancak projeye dökerken daha gelişmiş kodlamalar yapmanız gerekir. Örneğin CSGO hile kodlama mantığında yaptığınız proje valorantta kullanamazsınız. Ayrıca gelişmiş oyunlar için anti-cheat bypass yapmanız gerekir.
Öğrenen bypass sistemi yapamaz mıyım? Veya kullanıcılar banlandığında tekrar undetected olan bir hile? Sonuçta yapay zeka çok ilerledi..
 
Isse Kun
Emektar Üye
Katılım
15 May 2017
Mesajlar
4,801
Çözümler
5
Tepki puanı
2,106
Ödüller
15
Sosyal
9 HİZMET YILI
Öğrenen bypass sistemi yapamaz mıyım? Veya kullanıcılar banlandığında tekrar undetected olan bir hile? Sonuçta yapay zeka çok ilerledi..
Hile DT olduktan sonra UD şekilde tekrar güncellemen gerekir hileyi örneğin bypass fix yemiştir tekrardan bypass yapman gerekir
 
Üstümde Emporio Armani Senin ise Waikiki
Uzman Üye
Katılım
30 Eyl 2018
Mesajlar
187
Tepki puanı
73
Ödüller
9
7 HİZMET YILI
ben bunu okusam gene anlamam.
 
Süper Üye
Katılım
24 Tem 2020
Mesajlar
1,499
Çözümler
4
Tepki puanı
87
Ödüller
5
Yaş
25
5 HİZMET YILI
Eline sağlık hocam çok güzel anlatmış
 
Onaylı Üye
Katılım
14 Ocak 2018
Mesajlar
62
Tepki puanı
3
Ödüller
6
Yaş
28
8 HİZMET YILI
Hocam emeğine sağlık baya uğraşılmış belli.
 
Onaylı Üye
Katılım
18 Kas 2017
Mesajlar
135
Tepki puanı
8
Ödüller
6
Yaş
26
8 HİZMET YILI
diğer paylaşımlarınada göz attım başlayanlar için geliştirici içerikler eline sağlık :panhype:
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst