C++ GetCSH

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Onaylı Üye
Katılım
3 Ağu 2017
Mesajlar
61
Tepki puanı
11
Yaş
28
8 HİZMET YILI
Selam 2-3gündür wolftü ile uğraşıyorum, forumda çok acayip yollarla csh addressi bulanları gördüm :D
Sizler için güzel bir CSH çekicek kod yazdım, umarım işinize yarar.

İlk olarak byteleri kontrol edecek bir bool yazdım;
C++:
bool byteAra(byte *kaynak, byte *aranan,int *sıra)
{
    int j = 0;
    bool bulundu = true;
    for (int i = 0; i < 65; i++)
    {
        bulundu = true;
        for (int j = 0; j < 65; j++)
        {
            if (aranan[j] != kaynak[i+j])
            {
                bulundu = false;
                break;
            }
        }
        if (bulundu)
        {
            *sıra = i;
            return true;
        }

    }
    return false;
}

Şimdi ise asıl kodlara geçelim;

C++:
DWORD CSH; // CSH Pointeri
void GetCSH()
{
     
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId); // pId wolftü.bin'in pıd'ı olmak zorunda
        byte kaynak[65] = { 0 }; // Byteleri kontrol edecek bir type
        BYTE aranacak[] ={0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0E,0x1F,0xBA}; // CSH byteleri
        DWORD baslangic =0x002F0000; // Taramaya 2F0000'dan başliyacak
        DWORD bitis = 0x962F0000; // Taramayı 962F0000'de sonlandıracak;
        int sıra = 0; // Taradağı address sırası;
        while (baslangic <= bitis) // Baslangic bitis'e eşit veya büyük olana kadar döngü
        {
        ReadProcessMemory(hProc, (LPVOID)baslangic, kaynak, 65, NULL); // Addressdeki byteleri kayna'ğa aktar
        if (byteAra(kaynak, aranacak, &sıra)) // Kaynak aranacak bytelere eşit ise
        {
          CSH = baslangic+sıra; // Baslangic ile sıra'yı toplayıp CSH'ye aktar;
          break; // Döngüyü durdur
        }
          baslangic +=0x10000; // Değilse 0x10000 ekle
        }
}

İllaki neden 0x10000 ekliyorsun ? CSH'yi geçip gidebilir arkadaşlar olucaktı, analizim sonucunda CSH addressinin son 4 rakamının "0000" olduğunu öğrendim.
Tarama hem daha hızlı hem daha sağlam olucağı için 0x10000 olarak arttırıyorum.
 
Onaylı Üye
Katılım
20 Ara 2015
Mesajlar
111
Tepki puanı
102
10 HİZMET YILI
Teşekkürler konu için, csh çekerken sıkıntı yaşamayacaklardır, ben neler gördüm vb.net csh çekme kodunu c++ csh çekme kodu diye paylaşanları felan :D
 
#Ri
Coder
Katılım
17 Ocak 2016
Mesajlar
1,111
Çözümler
2
Tepki puanı
2,542
Ödüller
12
Yaş
9
10 HİZMET YILI
CreateToolhelp32Snapshot ve MODULEENTRY32 + Module32Next methodlarını kullanarak daha hızlı ve leaksız yanıt alınabilir.

C++:
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>

DWORD iGMBase(DWORD dwProcessID, std::string strModulAd, bool retEndOfModule = false) {
        MODULEENTRY32 lpModuleEntry = { 0 };
        HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
        if (!hSnapShot)
        {
                return NULL;
        }
        lpModuleEntry.dwSize = sizeof(lpModuleEntry);
        BOOL bModule = Module32First(hSnapShot, &lpModuleEntry);
        while (bModule) {
            std::string gelenVeri = lpModuleEntry.szModule;
            unsigned ModuleDogrula = gelenVeri.find(strModulAd);
                if (ModuleDogrula != std::string::npos) {
                    CloseHandle(hSnapShot);
                if(!retEndOfModule)
                    return (DWORD)lpModuleEntry.modBaseAddr;
                else
                    return (DWORD)lpModuleEntry.modBaseAddr + (DWORD)lpModuleEntry.modBaseSize;
            }
            bModule = Module32Next(hSnapShot, &lpModuleEntry);
        }
        CloseHandle(hSnapShot);
        return NULL;
}

C++:
DWORD wolfteampid = 0; //oyunun process id si
DWORD dwCShell = iGMBase(wolfteampid , "csh");
 
Onaylı Üye
Katılım
3 Ağu 2017
Mesajlar
61
Tepki puanı
11
Yaş
28
8 HİZMET YILI
Benim gibi visual studio yerine rad studio kullananlar için senin kod işe yaramiyacak, ben hem visual hem rad için paylaştım.
Genede seninki bazılarına yardımcı olabilir, teşekkürler.
 
aka panic.rs
Kurucu
Katılım
18 Haz 2015
Mesajlar
3,379
Çözümler
50
Tepki puanı
13,156
Ödüller
22
Sosyal
10 HİZMET YILI
Benim gibi visual studio yerine rad studio kullananlar için senin kod işe yaramiyacak, ben hem visual hem rad için paylaştım.
Genede seninki bazılarına yardımcı olabilir, teşekkürler.
neden yaramasın rad için ? zamanında Rad Projelerimde oldu wolftü için aynı şekilde modül adına bakıp çektim ? seninkisi Image PE Headerlerin bulunduğu kısmın patterni gibi birşey ve bu pattern cshell.dll değiştiği zaman patlar %90 tabi düşünce güzel ama daha iyisi varken bu olmaz :D
 
aka panic.rs
Kurucu
Katılım
18 Haz 2015
Mesajlar
3,379
Çözümler
50
Tepki puanı
13,156
Ödüller
22
Sosyal
10 HİZMET YILI
C++:
HMODULE GetModuleByName(char* name, char* ext = ".tmp", bool equal = false)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
    MODULEENTRY32 entry;
    Module32First(hSnap, &entry);
#ifdef _DEBUG
    printf("----------------- START ----------------\n");
#endif
    do
    {
        std::string modulename(entry.szModule);
        if (!equal)
        {
            if (modulename.find(name) != -1 && modulename.find(ext) != -1)
            {
                CloseHandle(hSnap);
                return entry.hModule;

            }
        }
        else
        {
            break;
        }
        printf("Module: %s : Base: %p \n", modulename.c_str(), entry.hModule);
    } while (Module32Next(hSnap, &entry));
#ifdef _DEBUG
    printf("----------------- END ----------------\n");
#endif
    CloseHandle(hSnap);
    if (!equal)
        return NULL;

    return GetModuleHandleA(name);
}

GetModuleByName("csh");


buda benimki by the way :thugbear::thugbear::200iq:
 
Reverser
Katılım
15 Tem 2015
Mesajlar
297
Çözümler
2
Tepki puanı
356
Ödüller
10
10 HİZMET YILI
C++:
ReadProcessMemory(hProc, (LPVOID)baslangic, kaynak, 65, NULL); // Addressdeki byteleri kayna'ğa aktar
:burnbear:
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst