KERNEL HİLE Sistemi [Memory Read & Write] İşlemleri ANLATIM - 2

Hexist

Gold Üye
Katılım
9 Kas 2024
Mesajlar
173
Beğeniler
80
Merhaba forum sakinleri ve yazılıma meraklı kardeşlerim , bazılarınızın ilgisini çeken ilk konumda kernel mode ve user mode nedir ne değildir ne işe yarar gibi yüzeysel ve tadında bir detaylı anlatım yapmıştım birinci konuyu okumak isteyen arkadaşlar için bkz : kernel-user mode konu 1. İlgisini çeken olursa bu konuyu anlatmaya devam edeceğimi söylemiştim bir süredir mobil programlama ile uğraşıyorum ilk defa vakit buldum ve aklıma bu konunun devamını yazmak geldi aynı zamanda da kendi kernel bilgilerimi tazelemek istedim , bilgim dahilinde dilim döndüğünce bu konuda kernel modda çalışan hilelerin nasıl ve hangi mantık çerçevesinde çalıştığını anlatmaya çalışacağım.

Anlatımda Hedeflediklerimiz ; Kernel çalışan hileler neden kernel çalışır ? , Hilelerin kernel sistemlerde memory işlemleri nasıl yapılır ?

Başlamadan önce üstüne basarak belirtmek isterim ki KERNEL VE PROGRAMLAMA ÇOK GENİŞ VE DERİN BİR KONUDUR O YÜZDEN HER ŞEYİ EN İNCE AYRINTISINA KADAR ANLATAMAM HER KONUYA DEĞİNEMEM BOŞ BELEŞ YORUM YAPMAK İÇİN YORUM YAPAN 18 YAŞINDA SAKALSIZ KARDEŞLERİMİ UYARIYORUM.

Öncelikle 1. konuyu okuduğunuzu baz alarak bu konuyu başlatıyorum ; Kernel ile ilgili bilmemiz gereken en önemli sistemlerden biri de IOCTL'dir. Yazdığımız kernel sürücüsü ile yine bizim yazacağımız memory hack uygulamamızın arasında ki iletişimi sağlamak için IOCTL denen arkadaşı kullanırız peki IOCTL nedir? ; Kod örneği vererek inceleyebiliriz bir projemden aldığım kodları paylaşıyorum :
Oyun hilesi yapmak amacı ile kernel kullanıyorsanız kesinlikle yapmanız kereken ilk şey projenizi 2 alana bölmektir bunlar KERNEL MODE PROJECT(KMP) - USER MODE PROJECT(UMP) olmak zorunda KMP ve UMP olarak kısaltıyorum ben şahsen. Temel amacımız yazdığımız kernel driver yani KMP'nin yine kendi yazdığımız UMP projemiz ile (bu proje bizim hilemizin çalıştığı proje olacak) sorunsuz bir şekilde iletişime geçmesini sağlamak .


Kod:
namespace driver_codes { //D.Codes UMP
    constexpr ULONG attach =
        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x696, METHOD_BUFFERED, FILE_SPECIAL_ACCESS);

    constexpr ULONG read =
        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x697, METHOD_BUFFERED, FILE_SPECIAL_ACCESS);

    constexpr ULONG write =
        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x698, METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
}

Yıllanmış bir projedir kernel ve game hacking ile ilgilenen arkadaşların mutlaka bu kodlara aşina olduğunu düşünüyorum;
"constexpr ULONG attach =" tanımladığım işlem hedef uygulamaya inject olmamı sağlıyor
"constexpr ULONG read =" tanımı ise hedef uygulamanın belleğinden veri okumamı sağlayacak birazdan detayına gireceğim .
"constexpr ULONG write =" İnject olduğumuz uygulamanın belleğine yazma işlemi yapacağımız kısım.

bu tanımların #define olarak tanımlandığınıda görebilirsiniz , ben kullanım amacım açısından const. olarak tanımladım tecrübeniz arttıkça tanımları da daha esnek ve işe yarar şekilde kullanmayı öğreneceksiniz.

Peki bunlar nedir nasıl kullanırız kısmına geçelim bu anlatım konusunda doğrudan bir proje vermek yerine, nasıl kullanacağınızı ve ne anlama geldiğini öğrenmenizi isterim .

UMP tarafından hedef uygulamanın belleğinden veri okuyabileceğimiz c++ kodum ;

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;
}

kodu detaylı bir şekilde açıklayacağım bu açıklama 2 Parta bölünecek ; 1.Part = UMP de yazdığımız read memory fonksiyonunun çalışma prensibi ve işleyişi , 2. Part = read_memory fonksiyonumuzun kernel driverimiz ile nasıl iletişime geçtiği.

Konuyu çok uzun tutmamak adına burada sonlandırıyorum yüzeysel olarak değinmek istediklerime değindim , diğer konu yukarıda bahsini geçirdiğim hususla ilgili olacak ve biraz daha derinlere ineceğiz şimdilik bu kadar diyelim herkese iyi forumlar .
 
Paylaşım için teşekkür ederiz.
 
IOCTL metodu, kernel kısmında daha önceden belirlediğiniz string ile create ettiğiniz bir DriverObjecte UserMode da CreateFile fonksiyonuyla file_existing flagını kullanarak aynı zamanda Usermodedan bu driver objecte bir handle oluşturursunuz. Daha sonra bu handle kullanarak Usermodedan IO bufferları gönderebilir ve kerneldeki IOCTL dispatcher fonksiyonunuzdan yanıt alabilirsiniz. Bu fonksiyonun kernel modeda MJ fonksiyon arrayına tanımlanız lazım Usermodedan gelen IO bufferlarını dinleyebilmeniz için. Aynı zamanda bu fonksiyon arrayına Create,Delete gibi eventler içinde fonksiyon tanımlayıp koyabilirsiniz bu sayede usermodedan driver objectine handle açtığınızda veya closehandle yaptığınızda bu kernel modedan dinleyebilirsiniz. Kendi driver objectinize IOCTL dispatcher kurabildiğiniz gibi aynı zamanda legit driverlarında Dispatcherlarını hooklayıp kendi lehinize kullanabilirsiniz. Bu dispatcher hook günümüz kernel anticheatlerine etkili bir yöntemdir. Daha detaylı bilgi için meraklısı varsa Windows Internals kitabındaki IO kısmını okuyabilirler…
 
IOCTL metodu, kernel kısmında daha önceden belirlediğiniz string ile create ettiğiniz bir DriverObjecte UserMode da CreateFile fonksiyonuyla file_existing flagını kullanarak aynı zamanda Usermodedan bu driver objecte bir handle oluşturursunuz. Daha sonra bu handle kullanarak Usermodedan IO bufferları gönderebilir ve kerneldeki IOCTL dispatcher fonksiyonunuzdan yanıt alabilirsiniz. Bu fonksiyonun kernel modeda MJ fonksiyon arrayına tanımlanız lazım Usermodedan gelen IO bufferlarını dinleyebilmeniz için. Aynı zamanda bu fonksiyon arrayına Create,Delete gibi eventler içinde fonksiyon tanımlayıp koyabilirsiniz bu sayede usermodedan driver objectine handle açtığınızda veya closehandle yaptığınızda bu kernel modedan dinleyebilirsiniz. Kendi driver objectinize IOCTL dispatcher kurabildiğiniz gibi aynı zamanda legit driverlarında Dispatcherlarını hooklayıp kendi lehinize kullanabilirsiniz. Bu dispatcher hook günümüz kernel anticheatlerine etkili bir yöntemdir. Daha detaylı bilgi için meraklısı varsa Windows Internals kitabındaki IO kısmını okuyabilirler…
bu dayı biliyor bilgili bi kardeşimiz belli ki
 

  Şuanda konuyu görüntüleyen kullanıcılar


Üst Alt