gpt4 book ai didi

dll - 使用 AppInit_DLLs 的简单 DLL 注入(inject)不起作用。 DllMain() 没有被调用

转载 作者:行者123 更新时间:2023-12-04 22:34:59 27 4
gpt4 key购买 nike

我已经编写了最简单的注入(inject) 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;
}

super 简单对吧?好吧,我什至无法让它工作。此代码编译为 dll,我已将此 dll 的路径放在注册表中 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] 下。我还应该提到 LoadAppInit_DLLs 注册表值设置为 1。通过这样做,我希望在启动其他应用程序(如 notepad.exe)时看到文件“D:\test.txt”出现,但事实并非如此。我不明白。还有另一个 .dll,它非常古老,是用 Visual Studio '97 编写的(我正在尝试替换它),当我将 AppInit_DLLs 设置为指向它并启动任意应用程序时,它工作得很好。我可以说它在其他应用程序启动时正在加载。

我不确定这里发生了什么,但这应该有效,不是吗?再简单不过了。我正在使用 VS 2010,我认为我已经创建了一个非常平面的 Jane .dll,所以我认为任何项目设置都不应该出现问题,但我对此并不完全确定。我在这里想念什么?

设置信息
  • 操作系统:Windows 7 64 位
  • 操作系统版本:6.1.7601 Service Pack 1 Build 7601
  • IDE:Visual Studio 2010
  • IDE 版本:10.0.40219.1 SP1Rel
  • 最佳答案

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]不是 用于注入(inject) 的注册表项32 位进程 .如果您的 ,它的注册表项操作系统为 32 位 .
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]如果您的 是要使用的正确注册表项操作系统为 64 位 .

    我假设前者适用于 32 位进程,而后者适用于 64 位进程。但实际上,操作系统将忽略其中一个注册表项,具体取决于操作系统本身是 64 位还是 32 位。

    关于dll - 使用 AppInit_DLLs 的简单 DLL 注入(inject)不起作用。 DllMain() 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027642/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com