Dll未在Firefox中加载,但在自定义应用程序中加载
Dll not being loaded in Firefox but loads in custom application
我最近在SO上发布了一个关于代码注入的问题,这个问题相似但不相同。我正在将dll注入Firefox,它成功注入,但dll中的代码没有运行。如果我将相同的代码注入到自定义应用程序中,它就会工作。为什么?这是我正在使用的代码。
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被成功注入,也不会发生任何事情。
我无法重现您的观察结果。我能够将dllinject.dll注入到其他进程(也是firefox)中,但我从未见过消息框。
经过一番挖掘,我发现你的DLLMain
拼写错误。将其更改为DllMain
,您将在Firefox中看到消息框。
顺便说一句:你可能想把MessageBox
改成MessageBeep
,因为FireFox创建/破坏了很多线程。。。(即使是快速测试,这也很烦人!)
相关文章:
- 在 C/C++ 中加载 OpenSSL 自定义引擎
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 指向临时对象的自定义迭代器(延迟加载)
- 使用 c++ 时如何加载自定义操作库?
- 在 TensorFlow 中加载自定义操作时出现未定义的符号错误
- QUiLoader:使用自定义小部件加载 .ui 文件的要求
- 如何加载自定义字体,以便我可以在 DirectX 中使用它们
- Qt自定义插件无法加载 - "Shared Library Not Found"
- DirectX Toolkit加载了带有自定义HLSL着色器"顶点"着色器输入签名的模型
- 自定义iojs加载项无法加载RSA私钥
- Qt设计器无法加载我的自定义小部件插件
- Dll未在Firefox中加载,但在自定义应用程序中加载
- 如何在VC++静态库中加载自定义二进制资源作为dll的一部分
- 加载未定义的返回值
- 尝试加载自定义mysql插件时未定义的引用-如何调试
- 如何使OS X Cocoa应用程序从它所在的文件夹加载自定义框架
- Qt Creator 无法加载我的自定义小部件插件
- Qt应用程序无法加载自定义插件调试库
- 如何将自定义模块加载到Lua中
- 如何在C++中的配置文件中加载自定义"const"变量?