我写过最简单的注射dll.以下是完整的代码:
#include "stdafx.h"
#include <stdio.h>
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
FILE * File = fopen("D:\\test.txt", "w");
if(File != NULL)
{
fclose(File);
}
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
超级简单吧?好吧,我甚至无法让这个工作.此代码编译为dll,我已在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]下的注册表中放置此dll的路径.我还应该提到LoadAppInit_DLLs注册表值设置为1.从这样做我希望看到文件"D:\ test.txt"出现在我启动其他应用程序(如notepad.exe)时,但事实并非如此.我不明白.还有另一个.dll,这是非常古老的,并且在visual studio '97中编写(我正在尝试替换),当我将AppInit_DLLs设置为指向它并启动任意应用程序时,该工作正常.我可以告诉它在启动其他应用程序时会加载.
我不知道这里发生了什么,但这不应该工作吗?它不能变得更简单.我正在使用VS 2010,据我所知,我已经创建了一个非常平面的Jane .dll所以我不认为任何项目设置应该是不合适的,但我不完全确定.我在这里错过了什么?
设置信息
Ult*_*nks 10
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]
是NOT用于注射到注册表键32位进程.如果您的操作系统是32位,它是注册表项.
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]是您的操作系统是64位的正确的注册表项.
我假设前者用于32位进程而后者用于64位进程.但实际上,操作系统将忽略其中一个注册表项,具体取决于操作系统本身是64位还是32位.
| 归档时间: |
|
| 查看次数: |
7128 次 |
| 最近记录: |