- Katılım
- 3 Ara 2010
- Konular
- 11
- Mesajlar
- 52
- Online süresi
- 3d 15h
- Reaksiyon Skoru
- 20
- Altın Konu
- 0
- TM Yaşı
- 15 Yıl 6 Ay 6 Gün
- Başarım Puanı
- 93
- MmoLira
- 747
- DevLira
- 6
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Merhaba sevgili kardeşlerim bu konuda size hedef oyununuzda bulduğunuz fonksiyonları inline asm ile nasıl kullanabileceğinizi ve nasıl revers edeceğinizi anlatacağım konuya başlamadan önce belirtmek isterim ki bu konuda okuyacaklarınızı anlayabilmeniz için orta seviye ASM x86 ve Revers Eng. bilginizin olması gerekmektedir , ben yine de elimden geldiğince herkesin anlayabileceği şekilde anlatmaya çalışacağım fakat unutmayın ki bu konu en az ORTA SEVIYE REVERS ENG. bilgisi olanlar için hazırlanmıştır. REGISTER okuması yapacağız Fonksiyonları Revers Edeceğiz , ASM okuması yapacağız vb...
öncelikle tüm online oyunların çalışma prensibini anlayarak başlayabiliriz temel olarak oyunlar kendi içlerinde nasıl kodlandılarca o fonksiyonlarla çalışırlar fakat bu fonksiyonların bir şekilde sunucuya iletilmesi gerekiyor burada devreye windows api'ları giriyor bunu dissamda" WS2_32.send" olarak görebilirsiniz bunun sayesinde client istekleri server tarafına iletilebiliyor haliyle bu isteklerin tutulduğu bir pointerda olmak zorunda önceliğimiz bunları bulmak .
İlk önce C.E yardımı ile memory de CTRL+G = "send" yazıp adrese gidiyoruz ve BP koyuyoruz tabi ki server iletişimi sürekli olduğu için ki bu önemli bir konu etrafta ki objeler güvenlik önlemleri anti cheat bunlar sürekli servera iletilmek zorunda o yüzden BP koyduğunuz anda tetiklenecektir
Aşağıda ki görselde ECX registerının tuttuğu adres servere giden bilginin tutulduğu pointerın değeridir , EIP ise send Fonksiyonumuzun adresi oluyor .
Burada EAX ve diğer registerlara girmek istemiyorum fakat pointer işlenirken pointer + gamebaseaddres kullanılarak bir takım veriler tutuyor şu an sizin için önemsiz.
Sırada sunucuya giden verinin hangi adreste tutulduğunu öğrenmek var halihazırda elimizde ki bilgileri kullanabiliriz hatırlarsanız ECX registerinda tutulan değer bizi doğrudan paket pointerına götürebilirdi az önce bulduk çünkü.
Aşağıda görselde gördüğünüz gibi ECX registerının değerini c.e de arattığımızda bizi doğrudan paket pointerına götürüyor
şimdi elimizde ki verileri toplayalım ve bir algoritma kuralım burada algoritma oluşturma becerisi ve her zaman bahsettiğim programların nasıl çalıştığını anlama becerisi devreye giriyor bunu her zaman üstüne basarak söylerim dünyada ki tüm dilleri EZBERE BİLSENİZ DAHİ ALGORİTMA OLUŞTURMA VE PROGRAMLARIN ÇALIŞMA PRENSİBİ becerileriniz olmadan bu noktaya gelemezsiniz.
Elimizde ki veriler sunucuya bilginin aktarıldığı fonksiyonun adresi yani EIP = 0x2323DF0 && sunucuya aktarılan verinin tutulduğu adres yani ECX = 0x3CBDF8 geriye sadece bu bilginin nasıl aktarıldığını çözmek kalıyor hemen inceleyelim
Aşağıda ki görseli ECX registerının işaret ettiği pointera memoryde giderek bulabilirsiniz burada ASM bilginiz devreye giriyor ve bu kod bloğunun ne yaptığını anlamanız gerekiyor farkettiyseniz tüm bu işlemlerin sonuna geldik sadece işlemlerin sonunda ASM bilgimizi kullandık daha doğrusu kullanacağız bu kod bloğunu revers ederek kendi yazdığımız DLL de kullanabiliriz, ben revers kısmını uzun uzun anlatmayacağım kısaca burada yapılan işlem sunucuya giden paket bir pointera aktarılıyor ardından paketin boyutu hesaplanıyor ardından send fonksiyonu call ediliyor ve paket gitmiş oluyor ben bunu revers ettim görsele ekledim .
en sonunda ortaya çıkan kodlarımız ; buraya ben hem inline asm kullanımını hemde doğrudan fonksiyon çağrısını ekledim şu an fonksiyon çağrısında ki mantığı anlatmaya gerek yok o çok farklı bir konu onu farklı bir şekilde anlatmayı planlıyorum kodlarda gördüğünüz gibi üstte ki görselde bulduğumuz kod bloğunu revers ettik oyunda inline olarak kullandık .
her türlü soruyu sorabilirsiniz aklınıza takılan revers alanında yada asm kod bloklarında yada register okumalarında ne olursa
VE BU DÜNYA DAKİ EN GÜZEL HİSSİYATA GEÇELİM EMEK VERİLEN BİR İŞİN KARŞILIĞINI CANLI OLARAK GÖRME BUDA SONUÇ ;
öncelikle tüm online oyunların çalışma prensibini anlayarak başlayabiliriz temel olarak oyunlar kendi içlerinde nasıl kodlandılarca o fonksiyonlarla çalışırlar fakat bu fonksiyonların bir şekilde sunucuya iletilmesi gerekiyor burada devreye windows api'ları giriyor bunu dissamda" WS2_32.send" olarak görebilirsiniz bunun sayesinde client istekleri server tarafına iletilebiliyor haliyle bu isteklerin tutulduğu bir pointerda olmak zorunda önceliğimiz bunları bulmak .
İlk önce C.E yardımı ile memory de CTRL+G = "send" yazıp adrese gidiyoruz ve BP koyuyoruz tabi ki server iletişimi sürekli olduğu için ki bu önemli bir konu etrafta ki objeler güvenlik önlemleri anti cheat bunlar sürekli servera iletilmek zorunda o yüzden BP koyduğunuz anda tetiklenecektir
Aşağıda ki görselde ECX registerının tuttuğu adres servere giden bilginin tutulduğu pointerın değeridir , EIP ise send Fonksiyonumuzun adresi oluyor .
Burada EAX ve diğer registerlara girmek istemiyorum fakat pointer işlenirken pointer + gamebaseaddres kullanılarak bir takım veriler tutuyor şu an sizin için önemsiz.
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Sırada sunucuya giden verinin hangi adreste tutulduğunu öğrenmek var halihazırda elimizde ki bilgileri kullanabiliriz hatırlarsanız ECX registerinda tutulan değer bizi doğrudan paket pointerına götürebilirdi az önce bulduk çünkü.
Aşağıda görselde gördüğünüz gibi ECX registerının değerini c.e de arattığımızda bizi doğrudan paket pointerına götürüyor
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
şimdi elimizde ki verileri toplayalım ve bir algoritma kuralım burada algoritma oluşturma becerisi ve her zaman bahsettiğim programların nasıl çalıştığını anlama becerisi devreye giriyor bunu her zaman üstüne basarak söylerim dünyada ki tüm dilleri EZBERE BİLSENİZ DAHİ ALGORİTMA OLUŞTURMA VE PROGRAMLARIN ÇALIŞMA PRENSİBİ becerileriniz olmadan bu noktaya gelemezsiniz.
Elimizde ki veriler sunucuya bilginin aktarıldığı fonksiyonun adresi yani EIP = 0x2323DF0 && sunucuya aktarılan verinin tutulduğu adres yani ECX = 0x3CBDF8 geriye sadece bu bilginin nasıl aktarıldığını çözmek kalıyor hemen inceleyelim
Aşağıda ki görseli ECX registerının işaret ettiği pointera memoryde giderek bulabilirsiniz burada ASM bilginiz devreye giriyor ve bu kod bloğunun ne yaptığını anlamanız gerekiyor farkettiyseniz tüm bu işlemlerin sonuna geldik sadece işlemlerin sonunda ASM bilgimizi kullandık daha doğrusu kullanacağız bu kod bloğunu revers ederek kendi yazdığımız DLL de kullanabiliriz, ben revers kısmını uzun uzun anlatmayacağım kısaca burada yapılan işlem sunucuya giden paket bir pointera aktarılıyor ardından paketin boyutu hesaplanıyor ardından send fonksiyonu call ediliyor ve paket gitmiş oluyor ben bunu revers ettim görsele ekledim .
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
en sonunda ortaya çıkan kodlarımız ; buraya ben hem inline asm kullanımını hemde doğrudan fonksiyon çağrısını ekledim şu an fonksiyon çağrısında ki mantığı anlatmaya gerek yok o çok farklı bir konu onu farklı bir şekilde anlatmayı planlıyorum kodlarda gördüğünüz gibi üstte ki görselde bulduğumuz kod bloğunu revers ettik oyunda inline olarak kullandık .
C++:
#include <windows.h>
#include "pch.h"
#include <stdint.h>
#define KO_PTR_PKT 0x003CBDF8//8B 0D F8BD3C00 - mov ecx,[KnightOnLine.CGameProcedure::s_pSocket] { (169BFDB0) }
#define KO_SND_FNC 0x00232DF0// E8 0554FEFF - call KnightOnLine.CAPISocket::Send
void send(BYTE* pBuf, int len) {
__asm {
MOV ECX, KO_PTR_PKT
MOV ECX, DWORD PTR DS : [ECX]
PUSH len
PUSH pBuf
MOV EAX, KO_SND_FNC
CALL EAX
}
}
typedef int(__thiscall* SendFn)(void* thisPtr, BYTE* pBuf, int len);
void SendPacket(BYTE* pBuf, int len) {
void* socketInstance = *(void**)KO_PTR_PKT;
SendFn send = (SendFn)KO_SND_FNC;
send(socketInstance, pBuf, len);
}
void town() {
BYTE town[] = {0x48, 0x00 };
//town
SendPacket(town, sizeof(town));
}
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
while (true) {
if (GetAsyncKeyState(VK_F4) & 1) {
town();
}
else
else if (GetAsyncKeyState(VK_F2) & 1) {
HMODULE hSelf = (HMODULE)lpParam;
FreeLibraryAndExitThread(hSelf, 0);
}
else if (GetAsyncKeyState(VK_F5) & 1) {
HMODULE hSelf = (HMODULE)lpParam;
FreeLibraryAndExitThread(hSelf, 0);
}
}
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hModule);
CreateThread(NULL, 0, ThreadFunc, hModule, 0, NULL);
}
return TRUE;
}
her türlü soruyu sorabilirsiniz aklınıza takılan revers alanında yada asm kod bloklarında yada register okumalarında ne olursa
VE BU DÜNYA DAKİ EN GÜZEL HİSSİYATA GEÇELİM EMEK VERİLEN BİR İŞİN KARŞILIĞINI CANLI OLARAK GÖRME BUDA SONUÇ ;
- Katılım
- 3 Nis 2011
- Konular
- 192
- Mesajlar
- 982
- Çözüm
- 5
- Online süresi
- 2mo 20d
- Reaksiyon Skoru
- 789
- Altın Konu
- 72
- Başarım Puanı
- 236
- MmoLira
- 17,524
- DevLira
- 24
Uygun alan.
- Katılım
- 2 Ara 2024
- Konular
- 186
- Mesajlar
- 1,979
- Çözüm
- 8
- Online süresi
- 5mo 13d
- Reaksiyon Skoru
- 1,493
- Altın Konu
- 1
- Başarım Puanı
- 206
- MmoLira
- 12,354
- DevLira
- 36
Eline sağlıkMerhaba sevgili kardeşlerim bu konuda size hedef oyununuzda bulduğunuz fonksiyonları inline asm ile nasıl kullanabileceğinizi ve nasıl revers edeceğinizi anlatacağım konuya başlamadan önce belirtmek isterim ki bu konuda okuyacaklarınızı anlayabilmeniz için orta seviye ASM x86 ve Revers Eng. bilginizin olması gerekmektedir , ben yine de elimden geldiğince herkesin anlayabileceği şekilde anlatmaya çalışacağım fakat unutmayın ki bu konu en az ORTA SEVIYE REVERS ENG. bilgisi olanlar için hazırlanmıştır. REGISTER okuması yapacağız Fonksiyonları Revers Edeceğiz , ASM okuması yapacağız vb...
öncelikle tüm online oyunların çalışma prensibini anlayarak başlayabiliriz temel olarak oyunlar kendi içlerinde nasıl kodlandılarca o fonksiyonlarla çalışırlar fakat bu fonksiyonların bir şekilde sunucuya iletilmesi gerekiyor burada devreye windows api'ları giriyor bunu dissamda" WS2_32.send" olarak görebilirsiniz bunun sayesinde client istekleri server tarafına iletilebiliyor haliyle bu isteklerin tutulduğu bir pointerda olmak zorunda önceliğimiz bunları bulmak .
İlk önce C.E yardımı ile memory de CTRL+G = "send" yazıp adrese gidiyoruz ve BP koyuyoruz tabi ki server iletişimi sürekli olduğu için ki bu önemli bir konu etrafta ki objeler güvenlik önlemleri anti cheat bunlar sürekli servera iletilmek zorunda o yüzden BP koyduğunuz anda tetiklenecektir
Aşağıda ki görselde ECX registerının tuttuğu adres servere giden bilginin tutulduğu pointerın değeridir , EIP ise send Fonksiyonumuzun adresi oluyor .
Burada EAX ve diğer registerlara girmek istemiyorum fakat pointer işlenirken pointer + gamebaseaddres kullanılarak bir takım veriler tutuyor şu an sizin için önemsiz.
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Sırada sunucuya giden verinin hangi adreste tutulduğunu öğrenmek var halihazırda elimizde ki bilgileri kullanabiliriz hatırlarsanız ECX registerinda tutulan değer bizi doğrudan paket pointerına götürebilirdi az önce bulduk çünkü.
Aşağıda görselde gördüğünüz gibi ECX registerının değerini c.e de arattığımızda bizi doğrudan paket pointerına götürüyor
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
şimdi elimizde ki verileri toplayalım ve bir algoritma kuralım burada algoritma oluşturma becerisi ve her zaman bahsettiğim programların nasıl çalıştığını anlama becerisi devreye giriyor bunu her zaman üstüne basarak söylerim dünyada ki tüm dilleri EZBERE BİLSENİZ DAHİ ALGORİTMA OLUŞTURMA VE PROGRAMLARIN ÇALIŞMA PRENSİBİ becerileriniz olmadan bu noktaya gelemezsiniz.
Elimizde ki veriler sunucuya bilginin aktarıldığı fonksiyonun adresi yani EIP = 0x2323DF0 && sunucuya aktarılan verinin tutulduğu adres yani ECX = 0x3CBDF8 geriye sadece bu bilginin nasıl aktarıldığını çözmek kalıyor hemen inceleyelim
Aşağıda ki görseli ECX registerının işaret ettiği pointera memoryde giderek bulabilirsiniz burada ASM bilginiz devreye giriyor ve bu kod bloğunun ne yaptığını anlamanız gerekiyor farkettiyseniz tüm bu işlemlerin sonuna geldik sadece işlemlerin sonunda ASM bilgimizi kullandık daha doğrusu kullanacağız bu kod bloğunu revers ederek kendi yazdığımız DLL de kullanabiliriz, ben revers kısmını uzun uzun anlatmayacağım kısaca burada yapılan işlem sunucuya giden paket bir pointera aktarılıyor ardından paketin boyutu hesaplanıyor ardından send fonksiyonu call ediliyor ve paket gitmiş oluyor ben bunu revers ettim görsele ekledim .
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
en sonunda ortaya çıkan kodlarımız ; buraya ben hem inline asm kullanımını hemde doğrudan fonksiyon çağrısını ekledim şu an fonksiyon çağrısında ki mantığı anlatmaya gerek yok o çok farklı bir konu onu farklı bir şekilde anlatmayı planlıyorum kodlarda gördüğünüz gibi üstte ki görselde bulduğumuz kod bloğunu revers ettik oyunda inline olarak kullandık .
C++:#include <windows.h> #include "pch.h" #include <stdint.h> #define KO_PTR_PKT 0x003CBDF8//8B 0D F8BD3C00 - mov ecx,[KnightOnLine.CGameProcedure::s_pSocket] { (169BFDB0) } #define KO_SND_FNC 0x00232DF0// E8 0554FEFF - call KnightOnLine.CAPISocket::Send void send(BYTE* pBuf, int len) { __asm { MOV ECX, KO_PTR_PKT MOV ECX, DWORD PTR DS : [ECX] PUSH len PUSH pBuf MOV EAX, KO_SND_FNC CALL EAX } } typedef int(__thiscall* SendFn)(void* thisPtr, BYTE* pBuf, int len); void SendPacket(BYTE* pBuf, int len) { void* socketInstance = *(void**)KO_PTR_PKT; SendFn send = (SendFn)KO_SND_FNC; send(socketInstance, pBuf, len); } void town() { BYTE town[] = {0x48, 0x00 }; //town SendPacket(town, sizeof(town)); } DWORD WINAPI ThreadFunc(LPVOID lpParam) { while (true) { if (GetAsyncKeyState(VK_F4) & 1) { town(); } else else if (GetAsyncKeyState(VK_F2) & 1) { HMODULE hSelf = (HMODULE)lpParam; FreeLibraryAndExitThread(hSelf, 0); } else if (GetAsyncKeyState(VK_F5) & 1) { HMODULE hSelf = (HMODULE)lpParam; FreeLibraryAndExitThread(hSelf, 0); } } return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hModule); CreateThread(NULL, 0, ThreadFunc, hModule, 0, NULL); } return TRUE; }
her türlü soruyu sorabilirsiniz aklınıza takılan revers alanında yada asm kod bloklarında yada register okumalarında ne olursa
VE BU DÜNYA DAKİ EN GÜZEL HİSSİYATA GEÇELİM EMEK VERİLEN BİR İŞİN KARŞILIĞINI CANLI OLARAK GÖRME BUDA SONUÇ ;
![]()
Ko mu geliştiriyorsunuz
- Katılım
- 3 Ara 2010
- Konular
- 11
- Mesajlar
- 52
- Online süresi
- 3d 15h
- Reaksiyon Skoru
- 20
- Altın Konu
- 0
- TM Yaşı
- 15 Yıl 6 Ay 6 Gün
- Başarım Puanı
- 93
- MmoLira
- 747
- DevLira
- 6
hayır , genel olarak mmorpg ve 64 bit oyunlarda bot yazılımları geliştiriyorum . Ekstradan geliştirdiğim bir anti cheatim var .Eline sağlık
Ko mu geliştiriyorsunuz



