Я написал программу hackme, и я хочу подключить ее и заставить брутфорс взломать ее (с помощью dll-инъекции).
проблема в том, что когда я пытаюсь писать или читать память, происходит сбой процесса (это происходит со мной не только с программой hackme, но и с каждой программой), хотя я даю себе права на написание и чтение с помощью VirtualProtect
,
Вот DLL, которая должна препятствовать процессу печатать что-либо (с NOPing):
#include "DLL.h"#include <windows.h>
#include <tlhelp32.h>
BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
DWORD threadId;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadProc, NULL, 0, &threadId);
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return true;
}
DWORD ThreadProc(LPVOID lpdwThreadParam)
{
VirtualProtect((LPVOID)0x00417D10, 5, PAGE_EXECUTE_READWRITE, NULL);
*(char *)0x00417D10 = 0x90;
*(char *)0x00417D11 = 0x90;
*(char *)0x00417D12 = 0x90;
*(char *)0x00417D13 = 0x90;
*(char *)0x00417D14 = 0x90;
return 0;
}
Вот информация об адресе в процессе, на который я пишу:
http://prntscr.com/2bveja (с МАР)
DLL, инжектор и хакме скомпилированы для 32-битных.
Я использую win7 64b.
Было 2 проблемы:
VirtualProtect
не может получить NULL
в последнем параметре (старая привилегия).
Поэтому я дал ему указатель на DWORD
переменная.
Я дал VirtualProtect
постоянный адрес, но это не очень хорошо, так как в Windows 7 база изображений изменяется при каждом выполнении, поэтому я обнаружил базу изображений процесса и добавил к ней смещение 0x12d1
,
HMODULE hand = GetModuleHandle(L"HackMe.exe");
VirtualProtect((LPVOID)((DWORD)hand + (DWORD)0x12d1), 6, PAGE_EXECUTE_READWRITE, &oldp);
Других решений пока нет …