2013-12-19 37 views
0

我写了一个hackme程序,我想挂钩它并使bruteforce破解它(用dll注入)。 问题是当我试图写或读内存时,虽然我给自己写了一个VirtualProtect的私钥,但这个过程崩溃了(它发生在我身上,不仅仅是hackme程序,而是每个程序)。当我用dll注入读/写内存时进程崩溃

  • 如果我将消息框添加到该dll,该消息框的作品。

这里是假设从过程中要防止打印的东西(与NOPing)的dll:

#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 (with IDA)

dll,注入器和hackme都是为32bit编译的。 我正在使用win7 64b。

+2

从来没有认为你的DLL将在一个特定的地址被加载,系统不做任何保证,它是从安全的角度来看一个可怕的做法。如果您需要更改流程的流程,请使用[Detours](http://research.microsoft.com/en-us/projects/detours/)或Use [Hotpatching](http://msdn.microsoft.com/zh-cn/ COM/EN-US /库/ ms173507.aspx) – Mgetz

回答

2

有2个问题:

  1. VirtualProtect不能在最后一个参数(旧特权)收到NULL。 因此我给它指针为DWORD变量。

  2. 我给VirtualProtect一个永久地址,但它不是很好,因为在Windows 7中图像库会更改每次执行,所以我找到了过程映像库并将其添加到偏移量0x12d1

HMODULE hand = GetModuleHandle(L"HackMe.exe"); VirtualProtect((LPVOID)((DWORD)hand + (DWORD)0x12d1), 6, PAGE_EXECUTE_READWRITE, &oldp);

相关问题