Могу ли я заблокировать программу с помощью 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, пока не произойдет сбой.