Hexist
Gold Üye
- Katılım
- 9 Kas 2024
- Mesajlar
- 174
- Beğeniler
- 80
Kernel ile ilgili 1. ve 2. konumda gerek yüzeysel gerek detaylı bir anlatım yaptıktan sonra işlerin biraz daha içine girip karıştığı noktaya gelebiliriz diye düşünüyorum ve read memory fonksiyonunun kernel modda nasıl çalıştığını bu konuda anlatacağım. Öncelikle konuya uzak olanlar 1. ve 2. konuyu okumadan bu anlatımdan kesinlikle bir şey anlamayacaktır bunu belirtmekte fayda var.
3. Konuya geldiğim için artık yüzeysel olarak kernel nedir user mode nedir gibi şeyleri anlatmıyorum yeterince bunlar hakkında konuştuk doğruca bizi ilgilendiren kodu inceleyerek başlayabiliriz
Read MEM. Kodumuz:
benim projelerimde kullandığım read memory fonksiyonumdur , tüm projelerde bu fonksiyon geçerlidir ve kullanılır fonksiyonun yapısı ile oynanabilir fakat içeriği ve işleyişi asla değişmez .
//Request request; anlaşılacağı üzere bu bir isteğin başlangıcıdır .
// request.target = okunacak bellek adresini işaret ediyoruz . Basit bir wall hack yapacağımızı farz edelim, birazdan tekrardan buraya döneceğim.
// request.buffer = &temp; = .target olarak okuduğumuz bellek adresinin saklandığı ve kullanıcıya iletildiği blok.
//request.size = sizeof(T); okunacak bellek adresinde ki verinin byte uzunluğu.
işin kernel tarafına girdiğimiz de bu kısımları daha detaylandıracağım.
yukarıda genel olarak fonksiyonun hangi kodu neden kullandığına değindik işin kernel kısmına baktığımızda bunların hepsine tek tek ve detaylı tekrardan gireceğim kafa karışıklığını önlemek için sadece temelde nasıl bir işleyiş
olduğunu anlamanız şimdilik yeterli diye düşünüyorum.
Read memory main fonksiyon içerisinde örnek bir kullanım yapalım :
oluşturduğumuz read memory fonksiyonunu kullanarak bir bellek adresinden int türünde bir veriyi okuyabiliyoruz.
Valorant ile çok fazla ilgilenen arkadaş olduğunu bildiğim için basitçe bir wall hack mantığını da anlatmak isterim ;
Oyun içerisinde kendi karakterinizin ve oyunda ki tüm karakterlerin mobların npc lerin bellekte tutulduğu bölgeler vardır ve belli bellek adreslerinde bu karakterlerin kordinatları tutulur .
Genel olarak oyunun haritasını 2 veya 3 boyutlu bir düzlem olarak kabul edebilirsiniz , sizin karakterinizin bulunduğu konum bellekte belli bir offsette her zaman kayıtlıdır ve hareket ettikçe bu offsette ki değer değişir,
değişen değer sunucuya gönderilir ve sunucuda ki değer ile karşılaştırılır . Aslında karakterinizin oyunda ki konumu sunucuda tutulur diyebiliriz şayet sunucu da değil de oynadığınız clientte tutulsaydı valorantta şu an istediğimiz an
istediğimiz yere ışınlanabiliyor olurduk.
Örnek vermek gerekirse
Yukarıda kendimize bir player structı oluşturduk ve içerisinde tuttuğu değişkenleri tanımladık tüm oyunların kodlamasında bu vardır olmak zorundadır , oyun bu veriyi mutlaka bir yerde saklamak & okumak ve kullanmak zorundadır.
Wall hack dediğimiz olay ise rakibin " float x, y, z; // 0xFFF4C - 0xFFF54" adresini belirlemekten ibaret.
Oyunun kendi kodlaması yukarıda gördüğünüz gibidir şimdi sıra kendi yapacağımız 3rd tool ile bu bilgili alıp kullanmakta.
yukarıda yazdığımız kodlarla temel olarak rakibin konumunu belirlemiş oluyoruz "base_address + 0x14" kısmı pointer ve offset kullanım bilgisini de içeriyor bu konuyu ayrı bir postta detaylı anlatacağım .
Rakibin konum bilgisini aldıktan sonra geriye sadece bu bilgiyi kullanmak kalıyor basitçe bir wall hack nedir mantığı nedir anlatmış olduk.
ANLATMAK İSTEDİĞİM ÇOK ŞEY VAR MEMORY İŞLEMLERİ - KERNEL - ÇEKİRDEK BUNLAR ÇOK DETAYLI VE KAPSAMLI KONULAR , LÜTFEN KONU ALTINA GELİP O ÖYLE DEĞİL BÖYLE , ŞURAYI ATLAMIŞSIN , ŞURASI YANLIŞ GİBİ APTAL APTAL YORUMLAR YAZMAYIN HİÇ BİLGİSİ OLMAYAN VE ÖĞRENMEK İSTEYEN BİRİNİN ANLAYABİLECEĞİ EN BASİT DÜZEYDE ELİMDEN GELDİĞİNCE ANLATMAYA ÇALIŞTIM İYİ FORUMLAR İYİ GECELER .
3. Konuya geldiğim için artık yüzeysel olarak kernel nedir user mode nedir gibi şeyleri anlatmıyorum yeterince bunlar hakkında konuştuk doğruca bizi ilgilendiren kodu inceleyerek başlayabiliriz
Read MEM. Kodumuz:
C++:
template <class T>
T read_memory(const std::uintptr_t addr) {
T temp = {};
Request request;
request.target = reinterpret_cast<PVOID>(addr);
request.buffer = &temp;
request.size = sizeof(T);
DeviceIoControl(driver, driver_codes::read, &request, sizeof(request),
&request, sizeof(request), nullptr, nullptr);
return temp;
}
benim projelerimde kullandığım read memory fonksiyonumdur , tüm projelerde bu fonksiyon geçerlidir ve kullanılır fonksiyonun yapısı ile oynanabilir fakat içeriği ve işleyişi asla değişmez .
//Request request; anlaşılacağı üzere bu bir isteğin başlangıcıdır .
// request.target = okunacak bellek adresini işaret ediyoruz . Basit bir wall hack yapacağımızı farz edelim, birazdan tekrardan buraya döneceğim.
// request.buffer = &temp; = .target olarak okuduğumuz bellek adresinin saklandığı ve kullanıcıya iletildiği blok.
//request.size = sizeof(T); okunacak bellek adresinde ki verinin byte uzunluğu.
C++:
DeviceIoControl(driver, driver_codes::read, &request, sizeof(request),
&request, sizeof(request), nullptr, nullptr);
yukarıda genel olarak fonksiyonun hangi kodu neden kullandığına değindik işin kernel kısmına baktığımızda bunların hepsine tek tek ve detaylı tekrardan gireceğim kafa karışıklığını önlemek için sadece temelde nasıl bir işleyiş
olduğunu anlamanız şimdilik yeterli diye düşünüyorum.
Read memory main fonksiyon içerisinde örnek bir kullanım yapalım :
C++:
// okudumak istediğimiz bellek adresi
std::uintptr_t targetAddress = 0xFFFF40;
// int türünde bir veri okuduğumuzu belirttik.
int value = read_memory<int>(targetAddress);
std::cout << "read mem: " << value
Valorant ile çok fazla ilgilenen arkadaş olduğunu bildiğim için basitçe bir wall hack mantığını da anlatmak isterim ;
Oyun içerisinde kendi karakterinizin ve oyunda ki tüm karakterlerin mobların npc lerin bellekte tutulduğu bölgeler vardır ve belli bellek adreslerinde bu karakterlerin kordinatları tutulur .
Genel olarak oyunun haritasını 2 veya 3 boyutlu bir düzlem olarak kabul edebilirsiniz , sizin karakterinizin bulunduğu konum bellekte belli bir offsette her zaman kayıtlıdır ve hareket ettikçe bu offsette ki değer değişir,
değişen değer sunucuya gönderilir ve sunucuda ki değer ile karşılaştırılır . Aslında karakterinizin oyunda ki konumu sunucuda tutulur diyebiliriz şayet sunucu da değil de oynadığınız clientte tutulsaydı valorantta şu an istediğimiz an
istediğimiz yere ışınlanabiliyor olurduk.
Örnek vermek gerekirse
C++:
struct Player {
int hp; // 0xFFF40
int armor; // 0xFFF44
int ammo; // 0xFFF48
float x, y, z; // 0xFFF4C - 0xFFF54
};
Yukarıda kendimize bir player structı oluşturduk ve içerisinde tuttuğu değişkenleri tanımladık tüm oyunların kodlamasında bu vardır olmak zorundadır , oyun bu veriyi mutlaka bir yerde saklamak & okumak ve kullanmak zorundadır.
Wall hack dediğimiz olay ise rakibin " float x, y, z; // 0xFFF4C - 0xFFF54" adresini belirlemekten ibaret.
- x (0xFFF4C) // x kordinatı
- y (0xFFF50) // y kordinatı
- z (0xFFF54) //z kordinatı
Oyunun kendi kodlaması yukarıda gördüğünüz gibidir şimdi sıra kendi yapacağımız 3rd tool ile bu bilgili alıp kullanmakta.
C++:
std::uintptr_t base_address = 0xFFF40; // player struct'ının başlangıç adresidir daha sonra anlatacağım.
float x = read_memory<float>(base_address + 0x0C); // 0xFFF4C
float y = read_memory<float>(base_address + 0x10); // 0xFFF50
float z = read_memory<float>(base_address + 0x14); // 0xFFF54
std::cout << "Kordinatlar:" << std::endl;
std::cout << "X: " << x << std::endl;
std::cout << "Y: " << y << std::endl;
std::cout << "Z: " << z << std::endl;
yukarıda yazdığımız kodlarla temel olarak rakibin konumunu belirlemiş oluyoruz "base_address + 0x14" kısmı pointer ve offset kullanım bilgisini de içeriyor bu konuyu ayrı bir postta detaylı anlatacağım .
Rakibin konum bilgisini aldıktan sonra geriye sadece bu bilgiyi kullanmak kalıyor basitçe bir wall hack nedir mantığı nedir anlatmış olduk.
ANLATMAK İSTEDİĞİM ÇOK ŞEY VAR MEMORY İŞLEMLERİ - KERNEL - ÇEKİRDEK BUNLAR ÇOK DETAYLI VE KAPSAMLI KONULAR , LÜTFEN KONU ALTINA GELİP O ÖYLE DEĞİL BÖYLE , ŞURAYI ATLAMIŞSIN , ŞURASI YANLIŞ GİBİ APTAL APTAL YORUMLAR YAZMAYIN HİÇ BİLGİSİ OLMAYAN VE ÖĞRENMEK İSTEYEN BİRİNİN ANLAYABİLECEĞİ EN BASİT DÜZEYDE ELİMDEN GELDİĞİNCE ANLATMAYA ÇALIŞTIM İYİ FORUMLAR İYİ GECELER .