2013-12-19 38 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);

相關問題