2014-10-01 71 views
1

我发布了一个关于SO的最近问题code injection,这个是相似但不相同的。我注入DLL到Firefox,它注入成功,但在DLL中的代码不运行。如果我将相同的代码注入到自定义应用程序中,它就可以工作。为什么会这样。这是我正在使用的代码。Dll没有在Firefox中加载,但加载在自定义应用程序中

Injector.exe //这就是注入代码

#include <stdio.h> 
#include <windows.h> 

#define procId 2844 
#define dllname "dllinject.dll" // located in same directory 

int main() 
{ 
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, procId); 
    LPVOID allocated = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(dllname), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(hProc, (LPVOID)allocated, dllname, strlen(dllname), NULL); 
    LPVOID libaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 
    CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)libaddr, NULL, NULL); 
    CloseHandle(hProc); 
    return 0; 
} 

Simpleinjected.exe //被注入该文件

#include <stdio.h> 

int main() 
{ 
    printf("Hello"); 
    return 0; 
} 

dllinject.dll

文件
#include <windows.h> 

int message(const char *msg) 
{ 
    MessageBox(NULL, msg, "Message from Dll", MB_OK); 
    return 0; 
} 

BOOL WINAPI DLLMain(HINSTANCE hInstDll, DWORD ulReason, LPVOID lpReserved) 
{ 
    switch(ulReason) 
    { 
     case DLL_PROCESS_ATTACH: 
      message("process attach"); 
      break; 
     case DLL_THREAD_ATTACH: 
      message("thread attach"); 
      break; 
     case DLL_PROCESS_DETACH: 
      message("process detach"); 
      break; 
     case DLL_THREAD_DETACH: 
      message("thread detach"); 
      break; 
    } 
    return true; 
} 

它在注入到simpleinjected.exe时工作,但是当在Firefox中注入时,即使dll被成功注入也没有任何反应。

回答

0

我无法重现您的观察结果。我能够将dllinject.dll注入其他进程(也称为firefox),但我从未见过消息框。

经过一番挖掘,我发现你的DLLMain拼错了。将其更改为DllMain,您将在Firefox中看到消息框。

顺便说一句:你propably想改变MessageBoxMessageBeep,因为FireFox的创建/销毁大量线程的...(这很烦人,即使是快速测试!)