版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tutucoo/article/details/83828707
1.介绍
如果一个应用程序有数字签名,那么它的安全表就不会为空。它位于异常表的后面。
2.安全表解析
通过数据目录表里提供的RVA,我们转换成offset,找到了安全表的位置,如下:
安全表的结构体如下:
typedef struct _WIN_CERTIFICATE
{
DWORD dwLength;
WORD wRevision;
WORD wCertificateType;
BYTE bCertificate[ANYSIZE];
}
dwLength:此结构体的长度,对应上图中的0x00003390
wRevision:在bCertificate里面保护的证书的版本号,版本号有两种,如下表,一般为0x0200,对应上图中的0x0200
值 | 信息 | Win32 SDK中的宏定义名 |
---|---|---|
0x0100 | Win_Certificate的老版本 | WIN_CERT_REVISION_1_0 |
0x0200 | Win_Certificate的当前版本 | WIN_CERT_REVISION_2_0 |
wCertificateType:证书类型,有如下表格中的类型,对应上图中的0x0002
值 | 信息 | Win32 SDK中的宏定义名 |
---|---|---|
0x0001 | X.509证书 | WIN_CERT_TYPE_X509 |
0x0002 | 包含PKCS#7的SignedData的结构 | WIN_CERT_TYPE_PKCS_SIGNED_DATA |
0x0003 | 保留 | WIN_CERT_TYPE_RESERVED_1 |
0x0004 | 终端服务器协议堆栈证书签名 | WIN_CERT_TYPE_TS_STACK_SIGNED |
bCertificate:包含一个或多个证书,一般来说这个证书的内容一直到安全表的末尾。