
你是否遇到过因代码签名证书过期而无法为文件签名,却又不想修改系统时间的困扰?SignToolEx 这款工具提供了一种巧妙的思路。它通过 Hook(钩子) 技术,在不改动系统时间的情况下,让你能够利用过期的证书完成签名操作。
其核心原理是利用 Microsoft Detours 钩子库对系统自带的 signtool.exe 进程进行劫持。SignToolEx 会在运行时修改关于证书有效期的判断逻辑,使得过期的证书在签名过程中被视为“有效”,从而完成签名流程。这意味着,即使是已经泄露或过期的证书,也有可能被再次用于签名。
不过,需要注意的是,这种方法无法伪造 Authenticode 时间戳。同时,根据实际测试,某些版本的 Windows 系统(例如 Windows 10)对于已签名的 .sys 设备驱动程序,即使其签名证书已过期,系统仍然会接受并加载该驱动。
使用方法
SignToolEx 的使用方式与官方的 signtool.exe 几乎完全一致。你只需要在命令行中运行 SignToolEx.exe 并附上相应的参数即可。使用前,请确保满足以下两个条件:
- 当前目录下存在
SignToolExHook.dll 文件。
- 系统的
%PATH% 环境变量中已包含 signtool.exe 的路径。
下面是一个典型的使用示例:
C:\tools\SignToolEx>SignToolEx.exe sign /v /f nvidia0.pfx /p **redacted** /fd SHA256 c:\temp\bin.exe
The following certificate was selected:
Issued to: NVIDIA Corporation
Issued by: VeriSign Class 3 Code Signing 2010 CA
Expires: Sat Jul 26 17:59:59 3000
SHA1 hash: 30632EA310114105969D0BDA28FDCE267104754F
Done Adding Additional Store
Successfully signed: c:\temp\bin.exe
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
从输出结果可以看到,原本应该过期的证书,其到期时间被显示为了一个遥远的未来日期(3000年),从而“骗过”了签名检查流程,最终成功完成了对 bin.exe 文件的签名。
技术讨论与更多安全工具研究,欢迎访问 云栈社区 的开发者论坛进行交流。
|