【发布时间】:2013-04-10 10:32:02
【问题描述】:
我们通过 HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLS 路径挂钩一个库(比如 xyz.dll)。
我需要调试这个库,所以我创建了非调试 dll(&pdb) 并将其替换为 System32 目录中的原始 xyz.dll 库。现在当一个进程试图加载这个库时,我得到一个“坏图像”错误如下 -
“C:\Windows\system32\xyz.dll 不是为在 Windows 上运行而设计的,或者它包含错误。请尝试使用原始安装介质重新安装该程序,或联系您的系统管理员或软件供应商寻求支持。 "
我注意到原始 xyz.dll 是代码签名的,因此我还使用 signtool 使用临时证书对编译的非调试 xyz.dll 进行了签名,但它没有帮助。根据 [MSDN] (http://msdn.microsoft.com/en-us/windows/hardware/gg463040.aspx) 代码签名是推荐的,但不是强制性的。
后来我意识到,当我获得由有效证书签名的非调试库 xyz.dll 时,它可以工作。
我的问题:有什么方法可以让 Windows 7 绕过 dll 的签名验证?每次生成一个有效的证书并签署一个库对于开发/调试目的来说似乎非常麻烦。有什么简单的出路吗?
【问题讨论】:
标签: windows visual-studio-2010 debugging winapi development-environment