Могу ли я заблокировать программу с помощью ASM?

Я пытаюсь в течение нескольких дней заблокировать чит-программу для своей игры, я разговаривал с несколькими программистами, и один из них сказал, что я могу заблокировать ее с помощью ASM. Программа очень хорошо прячется, я не могу найти ее в памяти, я не могу обнаружить процессы сканирования, так что, возможно, это может быть решением? Может кто-нибудь дать мне пример, как я могу обнаружить и заблокировать программу с C++ и ASM?

Это мой текущий метод обнаружения и блокировки читов с использованием дампов памяти:

void SystemProcessesScan() 
{
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if(hProcessSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof(PROCESSENTRY32);

        if(Process32First(hProcessSnap, &pe32))
        {
            do
            {
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
                if(hProcess != NULL)
                {
                    if(ScanProcessMemory(hProcess))
                    { 
                        ExitProcess(0);
                    }
                }
            }

            while(Process32Next(hProcessSnap, &pe32));
        }
    }

    CloseHandle(hProcessSnap);
}

bool ScanProcessMemory(HANDLE hProcess) 
{
    for(int i = 0; i < MAX_PROCESS_DUMP; i++)
    {
        char aTmpBuffer[MAX_DUMP_SIZE];
        SIZE_T aBytesRead = 0;
        ReadProcessMemory(hProcess, (LPCVOID)g_ProcessesDumps[i].m_aOffset, (LPVOID)aTmpBuffer, sizeof(aTmpBuffer), &aBytesRead);

        if(memcmp(aTmpBuffer, g_ProcessesDumps[i].m_aMemDump, MAX_DUMP_SIZE) == 0)
        {
            return true;
            break;
        }
    }

    return false;
}

0 ответов

Чит внедряет DLL в вашу игру, и похоже, что он использует ручное сопоставление, чтобы скрыть DLL в памяти.

Лучшее решение для его обнаружения - найти последовательность байтов, уникальную для этой DLL. Шаблон сканирования ваших собственных игровых процессов, если подпись найдена, закройте игру или что-то еще, что вы хотите сделать в этот момент.

Найдите сканирование внутренних шаблонов C++ или сканирование сигнатур, есть множество источников, которые регулярно используются для этой цели.

Из-за того, что он отображается вручную, вы должны сканировать все зафиксированные области памяти, а не просматривать список модулей. Используйте VirtualQuery() в цикле while, начиная с адреса 0, пока не произойдет сбой.

Другие вопросы по тегам