我们通过 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 的签名验证?每次生成一个有效的证书并签署一个库对于开发/调试目的来说似乎非常麻烦。有什么简单的出路吗?