مضى على الشبكة و يوم من العطاء.
  • السلام عليكم ورحمة الله وبركاته، نرجوا كتابة طلبك او سؤالك باللغة العربية مع ارفاق صورة عن الخطأ او توضيح كافي للمشكلة.

[ مُجاب ] كيف أحصل على base adreess الخاص بال dll module بواسطة لغة ++C

khaledski21

./عضو جديد

السمعة:

السلام عليكم ورحمة الله تعالى وبركاته
بدأت بتعلم الهندسة العكسية و كوجهة أولى بدأت بال game hacking لذلك شرعت في كتابة سكريبت (هاك بسيط للعبة CS 1.6)
وقد واجهتني مشكلة الحصول على base adreess الخاص بال module client.dll بلغة ++C
لذلك أرجو ممن يستطيع المساعدة ولو بشكل بسيط أن لا يبخل علينا بذلك وله جل الشكر و التقدير
 

المرفقات

  • kh.png
    kh.png
    5.8 KB · المشاهدات: 134
التعديل الأخير بواسطة المشرف:
الحل
ادا كان client.dll يتم استدعاءه من طرف البروسيس لنقل CD1.6.exe
نقوم أولا بالبحث عن البروسيس بواسطة هده الدالة
C++:
bool GetPid(const wchar_t* targetProcess, DWORD* procID)
{
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap && snap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe;
        pe.dwSize = sizeof(pe);
        if (Process32First(snap, &pe))
        {
            do
            {
                if (!wcscmp(pe.szExeFile, targetProcess))
                {
                    CloseHandle(snap);
                    *procID = pe.th32ProcessID;
                    return true;
                }
            } while (Process32Next(snap, &pe));
        }
    }
    return false;
}
ثانيا نقوم...
ادا كان client.dll يتم استدعاءه من طرف البروسيس لنقل CD1.6.exe
نقوم أولا بالبحث عن البروسيس بواسطة هده الدالة
C++:
bool GetPid(const wchar_t* targetProcess, DWORD* procID)
{
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap && snap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe;
        pe.dwSize = sizeof(pe);
        if (Process32First(snap, &pe))
        {
            do
            {
                if (!wcscmp(pe.szExeFile, targetProcess))
                {
                    CloseHandle(snap);
                    *procID = pe.th32ProcessID;
                    return true;
                }
            } while (Process32Next(snap, &pe));
        }
    }
    return false;
}
ثانيا نقوم بlisting لكل الimported dlls للبحث عن client.dll


C++:
char* GetModuleBase(const wchar_t* ModuleName, DWORD procID)
{
    MODULEENTRY32 ModuleEntry = { 0 };
    HANDLE SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procID);

    if (!SnapShot) return NULL;

    ModuleEntry.dwSize = sizeof(ModuleEntry);

    if (!Module32First(SnapShot, &ModuleEntry)) return NULL;

    do
    {
        if (!wcscmp(ModuleEntry.szModule, ModuleName))
        {
            CloseHandle(SnapShot);
            return (char*)ModuleEntry.modBaseAddr;
        }
    } while (Module32Next(SnapShot, &ModuleEntry));

    CloseHandle(SnapShot);
    return NULL;
}


وفي دالتك main() قم باستدعاء هده الدوال
C++:
DWORD ProcId;
GetPid(L"CS1.6.exe", &ProcId);
char* DLLBaseAddress = GetModuleBase(L"client.dll", ProcId);

لا تنسى اضافة windows.h
 
الحل
ادا كان client.dll يتم استدعاءه من طرف البروسيس لنقل CD1.6.exe
نقوم أولا بالبحث عن البروسيس بواسطة هده الدالة
C++:
bool GetPid(const wchar_t* targetProcess, DWORD* procID)
{
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap && snap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe;
        pe.dwSize = sizeof(pe);
        if (Process32First(snap, &pe))
        {
            do
            {
                if (!wcscmp(pe.szExeFile, targetProcess))
                {
                    CloseHandle(snap);
                    *procID = pe.th32ProcessID;
                    return true;
                }
            } while (Process32Next(snap, &pe));
        }
    }
    return false;
}
ثانيا نقوم بlisting لكل الimported dlls للبحث عن client.dll


C++:
char* GetModuleBase(const wchar_t* ModuleName, DWORD procID)
{
    MODULEENTRY32 ModuleEntry = { 0 };
    HANDLE SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procID);

    if (!SnapShot) return NULL;

    ModuleEntry.dwSize = sizeof(ModuleEntry);

    if (!Module32First(SnapShot, &ModuleEntry)) return NULL;

    do
    {
        if (!wcscmp(ModuleEntry.szModule, ModuleName))
        {
            CloseHandle(SnapShot);
            return (char*)ModuleEntry.modBaseAddr;
        }
    } while (Module32Next(SnapShot, &ModuleEntry));

    CloseHandle(SnapShot);
    return NULL;
}


وفي دالتك main() قم باستدعاء هده الدوال
C++:
DWORD ProcId;
GetPid(L"CS1.6.exe", &ProcId);
char* DLLBaseAddress = GetModuleBase(L"client.dll", ProcId);

لا تنسى اضافة windows.h
thank you very match
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى