Вопрос есть хорошие ролики, статьи по реверсу и работой в c++ с смещениями?

dubdive

Следопыт
Сообщения
85
Реакции
5
чтоб разжевали желательно, концепцию прощупать
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
390
если поискать на ютубе, то конечно есть, я планирую так же по реверсу что то поснимать или на форум позаливать статьей
 

dubdive

Следопыт
Сообщения
85
Реакции
5
хотел бы провернуть одно дело, есть bool в одной ДЛЛке его нужно изменить и патчится он как 0x80, и есть другая ДЛЛка античита его как то можно отключить на проверку целостности.
А если конкретнее)
 

dubdive

Следопыт
Сообщения
85
Реакции
5
хотел бы провернуть одно дело, есть bool в одной ДЛЛке его нужно изменить и патчится он как 0x80, и есть другая ДЛЛка античита его как то можно отключить на проверку целостности.
а ну и игра это - FiveM мультиплеер для GTA 5, там если поддержка клиентских скриптов но она обычно выключена у серверов, вот я и хочу сделать это включить его только на клиенте.
 

dubdive

Следопыт
Сообщения
85
Реакции
5
вот исходник публичный года 4 ему, уже весь передетектен но концепция вся та же до сих пор.
C:
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <string>
#include <time.h>
 
const uintptr_t retOffset        = 0x2CD80;
const uintptr_t shAllowedOffset    = 0x68140;
 
uintptr_t getModuleBase(DWORD pid, const char *name)
{
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
    if (snapshot != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 me;
        me.dwSize = sizeof(MODULEENTRY32);
        if (Module32First(snapshot, &me))
        {
            do
            {
                if (strcmp(me.szModule, name) == 0)
                {
                    CloseHandle(snapshot);
                    return reinterpret_cast<uintptr_t>(me.modBaseAddr);
                }
            } while (Module32Next(snapshot, &me));
        }
    }
 
    return 0;
}
 
char *getWindowTitle(HWND hwnd)
{
    char *windowTitle = new char[GetWindowTextLength(hwnd)];
    GetWindowText(hwnd, windowTitle, sizeof(windowTitle));
    return windowTitle;
}
 
int main()
{
    SetConsoleTitleA("FiveM ScriptHook Bypass - Created by Desudo @ https://unknowncheats.me");
 
    std::cout << "Waiting for window..." << std::endl;;
 
    HWND hwnd = NULL;
    do
    {
        hwnd = FindWindowEx(NULL, NULL, "grcWindow", NULL);
        Sleep(1000);
    } while (!hwnd);
 
    std::wcout << "Found window (name = " << getWindowTitle(hwnd) << "), patching..." << std::endl;
 
    DWORD pid;
    GetWindowThreadProcessId(hwnd, &pid);
 
    HANDLE hndl = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (hndl != INVALID_HANDLE_VALUE)
    {
        uintptr_t startAddress;
        for (int i = 0; i < 5; i++)
        {
            startAddress = getModuleBase(pid, "adhesive.dll");
            if (startAddress)
                break;
 
            Sleep(1000);
        }
 
        if (startAddress)
        {
            void *retAddress        = reinterpret_cast<void *>(startAddress + retOffset);
            void *shAllowedAddress    = reinterpret_cast<void *>(startAddress + shAllowedOffset);
 
            BYTE patchRet[]{
                0xC3
            };
 
            bool patchShAllowed = true;
 
            DWORD oldProt;
            if (VirtualProtectEx(hndl, retAddress, 1, PAGE_EXECUTE_READWRITE, &oldProt))
            {
                if (!WriteProcessMemory(hndl, retAddress, &patchRet, sizeof(patchRet), NULL))
                {
                    std::cout << "WriteProcessMemory failed at retAddress, try turning off your antivirus." << std::endl;
                }
 
                if (!VirtualProtectEx(hndl, retAddress, 1, oldProt, &oldProt))
                {
                    std::cout << "VirtualProtectEx (2) failed at retAddress, try turning off your antivirus." << std::endl;
                }
            }
            else
            {
                std::cout << "VirtualProtectEx (2) failed at retAddress, try turning off your antivirus." << std::endl;
            }
 
            if (!WriteProcessMemory(hndl, shAllowedAddress, &patchShAllowed, sizeof(patchShAllowed), NULL))
            {
                std::cout << "WriteProcessMemory failed at shAllowedAddress, try turning off your antivirus." << std::endl;
            }
 
            std::cout << "Patched." << std::endl;
        }
        else
        {
            std::cout << "startAddress was invalid, try closing the window with the title listed above." << std::endl;
        }
    }
    else
    {
        std::cout << "OpenProcess failed, try turning off your antivirus." << std::endl;
    }
    
    CloseHandle(hndl);
 
    getchar();
    return 0;
}
 
Верх Низ