PE文件中,生成签名的时候会有一部分不参与签名hash计算,我们可以修改这部分而不破坏签名校验
下图中粗体的部分,就是签名的相关内容。灰色背景的部分,不参与签名的hash计算。
证书表偏移位于数据目录中第5个结构,VirtualAddress
是文件偏移,Size
是证书表的大小
按照偏移找到证书表开头,证书表前几个字节是一个WIN_CERTIFICATE
结构体,其中前4个字节为证书的大小。每一个证书信息都需要按照8字节进行对齐
下图中,最后两个字节是填充字节00
,手动修改这一部分进行验证。
签名正常
追加字节,需要修改DataDirArray[4].Size
、证书大小
26744->26752
0x6878 -> 0x6880
修改完成,签名正常
代码实现
C++版本的SigFlip可以自动添加shellcode到签名文件中。
也有golang版本的,在此基础上进行了修改,只有修改签名驱动的hash功能
修改的工具会在驱动的末尾添加 kfcvme50 的字符串