我写了一个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(与IDA合作)
dll,注入器和hackme编译为32位。 我正在使用win7 64b。
答案 0 :(得分:2)
有两个问题:
VirtualProtect
无法在最后一个参数(旧权限)中收到NULL
。
因此我给它指向DWORD
变量。
我给了VirtualProtect
一个永久地址,但它并不好,因为在Windows 7中,图像库每次执行都会改变,所以我找到了过程图像库并添加了偏移量{{ 1}}。
0x12d1