首页
社区
课程
招聘
23
[原创]一文读懂PE文件签名并手工验证签名有效性
发表于: 2022-4-25 18:32 29620

[原创]一文读懂PE文件签名并手工验证签名有效性

2022-4-25 18:32
29620

写在前面

  1. 本文首发于 Debugwar.com, 授权转载到看雪论坛,其他转载请注明出处。
  2. 看雪的这个MarkDown的系统与我的写作系统有点冲突,排班可能会有问题,可以点上面的连接去看原文获得更好地排版体验。
  3. Linux的输入法你懂的,可能会有错字别字,大家多包涵~


 

本文是 《一文读懂对称加密、非对称加密、哈希值、签名、证书、https之间的关系》 的姊妹篇(下文简称“姊妹篇”),在阅读本文之前,最好先阅读一下上一篇文章。

 

本文对日常工作中应用最广泛,也是大家最容易接触到的PE文件(也就是大家常说的exe/dll/sys文件)的签名进行了深入讲解,并一步一步讲解如何手工验证一个PE文件签名的有效性。

背景

近期工作中,有个自研驱动需要防止未授权R3程序调用,因此需要设计一个方案出来。笔者第一想到的是利用Windows的签名机制,固化签名的CommonName和受信任的父证书公钥到驱动程序中,然后分别校验驱动、调用发起者线程所在模块、调用发起者二进制程序的签名,来防止非法调用。

 

查了很多签名相关的资料发现都是R3下WinTrust API函数实现的,然而问题是R0下并没有这些API可以使用,看来要自己写代码实现一遍签名校验的逻辑了。

 

后来又经过一段时间探索, 发现现成的代码都是重度和某个平台或库绑定——例如Linux下的签名验证代码和linux的数据结构绑定、再比如其他几个开源的代码和openssl库绑定,而openssl库在R0下也是无法调用的,因为依赖了很多R0下没有的函数(例如_open等POSIX C函数)。

 

看来只能自己动手了,所以继续转向研究签名校验的底层原理。然而网上大部分关于签名的资料,全部都偏重于理论介绍,至少笔者没有搜到只使用哈希和RSA算法实操验证签名的例子——那没办法了,只好完全自己从头来验证一遍了……

几个概念

ASN.1

ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。 摘自维基百科

DER编码

由于ASN.1并没有规定编码方式,因此在实际组织数据的时候,还需要一些编码方式,DER就是最常使用的一种,这种编码方式是大字节序的。

PKCS#7/PKCS#1/PKCS#9

这些为多种加密格式的预定义标准。

AuthentiCode签名

微软定义的(使用了PKCS#7等标准的)一种嵌入式签名格式,另外一种常见的为CAT签名(.cat文件)。

 

通俗一点理解上面的几个概念:ASN.1可以理解为单个的汉字,DER编码则是规定了使用哪些汉字组成一些常用的词组,PKCS#7等标准进一步规定了用哪些词组可以组成一些固定的句式,最后AuthentiCode则综使用这些固定句式写了一篇文章出来。

再谈证书

通过姊妹篇,我们已经大概了解了证书、签名的概念和作用。但是在姊妹篇中,只给出了一张证书的大概结构(下图),并没有对其进行详细解释。

 

图片描述

 

本文由于要进行手工验证,因此有必要给出证书的详细结构:

1
2
3
4
5
Certificate ::= SEQUENCE { 
    tbsCertificate TBSCertificate, 
    signatureAlgorithm AlgorithmIdentifier, 
    signatureValue BIT STRING 
}

上述定义使用的是ASN1语法, 此处我们需要先了解如下信息:

  • tbsCertificate为上图中的蓝色部分
  • signatureValue为上图中的红色部分
  • signatureAlogrithm没有体现在上图中,此字段表示使用的是哪个哈希函数对tbsCertificate的数据进行的哈希计算

知道了上述结构,我们就可以搞清楚证书是如何验证的了:

  • 提取该证书的父证书(签发者或者叫Issuer)公钥
  • 使用公钥解密子证书中的signatureValue部分,然后根据PKCS#9的结构,提取出哈希值1,此处记为Hash1
  • 使用signatureAlgorithm中相同哈希算法对tbsCertificate数据做哈希,得到Hash2
  • 如果Hash1与Hash2相等,则证书有效

手工验证证书有效性

好了,枯燥的理论暂时告一段落,我们来看一个实际的例子。

 

我们以Windows版本的Python.exe文件为例, 依次查看其数字签名与证书信息如下:

 

图片描述

 

可以发现Python.exe的数字签名使用的是sha256算法,证书链为:

1
DigiCert->DigiCert SHA2 Assured ID Code Singing CA->Python Software Foundation

通过姊妹篇我们知道,整个PKI体系,是建立在信任一些随操作系统或浏览器分发的证书体系之上的。为了方便本文描述,假设我们信任的是上述体系链中的 DigiCert SHA2 Assured ID Code Singing CA 这一张证书,我们选择“详细信息”下的“复制到文件”就可以导出该证书用于研究(记得导出的时候选择DER格式):

 

图片描述

 

首先我们需要获得父证书的公钥,可以使用openssl命令获取,下面的命令将Python.exe的父证书(PythonParent.cer)公钥输出到了PythonParentPublicKey.pem文件中:

1
2
3
4
5
6
7
8
9
10
11
>> openssl x509 -inform DER -in PythonParent.cer -pubkey -noout > PythonParentPublicKey.pem
>> cat PythonParentPublicKey.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8OEa9ndwfTCzFJ
Gc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq8JyGpdglrA55
KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRpwsJS8hRniolF
1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/pfMuSoeU7MRzP
6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3jNEgJSPrCGQ+
UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczyen6Yzqf0Z3yWT
0QIDAQAB
-----END PUBLIC KEY-----

现在父证书公钥有了,接下来我们需要分离Python.exe证书的tbsCertificate和signatureValue部分。那么我们如何知道这两部分在证书中的偏移和长度呢?答案是: 继续使用万能的openssl命令:

 

首先来直观感受一下Pythone.exe的证书信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
>> openssl x509 -inform DER -in ./Python.exe.cer -noout -text 
Certificate: 
    Data: 
        Version: 3 (0x2
        Serial Number: 
            03:3e:d5:ed:a0:65:d1:b8:c9:1d:fc:f9:2a:6c:9b:d8 
        Signature Algorithm: sha256WithRSAEncryption 
        Issuer: C = US, O = DigiCert Inc, OU = http://www.digicert.com, CN = DigiCert SHA2 Assured ID Code Signing CA 
        Validity 
            Not Before: Dec 18 00:00:00 2018 GMT 
            Not After : Dec 22 12:00:00 2021 GMT 
        Subject: C = US, ST = New Hampshire, L = Wolfeboro, O = Python Software Foundation, CN = Python Software Foundation 
        Subject Public Key Info: 
            Public Key Algorithm: rsaEncryption 
                RSA Public-Key: (4096 bit) 
                Modulus: 
                    00:aa:bd:a4:4b:b2:75:b9:6e:e8:25:1c:65:b1:da: 
                    c4:4c:08:ca:6a:b7:e8:1f:94:c8:f0:f5:92:4f:a6: 
                    1b:db:13:e8:a0:fe:ef:1d:3e:22:69:55:f2:2f:92
                    f3:7b:57:f9:dc:9c:3a:ed:2a:7e:bb:9d:b8:7c:95
                    df:df:4a:87:56:21:16:c6:e9:b2:d9:15:86:d2:77
                    22:53:67:7e:98:ca:b3:8e:56:80:59:26:4d:17:4b
                    b8:45:cb:f2:0c:9a:24:11:5d:11:50:ea:88:e4:21
                    b9:cc:f2:37:5b:db:90:e8:b8:94:93:71:c2:61:6e
                    a4:a4:7d:7b:ec:0e:53:de:9c:3f:3e:8f:0e:f0:a1: 
                    2b:24:69:f5:6a:76:aa:b4:82:02:ab:df:72:4b:1a
                    cc:69:df:f6:84:f3:01:45:fe:8d:75:a8:7b:7f:b1: 
                    cf:9f:58:24:49:24:c0:a1:e8:f2:ba:a1:79:87:e0: 
                    74:a8:8e:3e:24:ae:7e:54:bb:f3:eb:9f:55:4d:b0: 
                    16:26:c6:1a:92:4c:59:c5:55:98:a4:5b:f8:29:e4: 
                    12:4b:0a:28:d0:3c:cc:be:61:11:b1:3c:cd:bd:50
                    4c:5a:1b:bd:3a:b8:89:36:0f:90:7c:59:9f:f7:ac: 
                    d5:4e:ef:77:71:9f:ab:ef:13:29:6d:7c:9f:20:e1: 
                    8a:84:73:1a:46:e6:7c:8a:1b:96:23:1d:e0:23:d5: 
                    87:0c:55:fa:7c:12:91:f3:e1:e5:85:d9:1a:88:11
                    16:22:c5:d1:a3:2f:84:41:4c:8a:ef:35:2c:f8:5a
                    8e:a3:6b:11:62:db:5b:b3:c3:13:17:d6:03:28:56
                    70:c8:f8:e7:f5:69:fe:80:b1:9d:e4:d5:04:57:23
                    6f:0f:d4:15:18:11:2d:37:bb:f1:f3:b6:dd:b8:95
                    01:f0:5e:03:ca:51:2c:32:d6:53:7e:3c:3f:6a:ee: 
                    80:98:e9:e6:9d:e2:b9:51:ca:92:26:ec:11:c9:96
                    86:36:4e:f2:de:a8:f4:ea:eb:71:f8:74:d3:a8:78
                    22:f7:be:54:a7:17:f2:af:00:2a:92:8b:e8:64:45
                    81:55:2a:6f:92:ef:0f:56:19:01:5d:c2:e6:35:ee: 
                    8c:10:79:45:89:a3:28:88:00:c0:78:a9:97:e5:11
                    51:90:df:95:ae:66:06:4e:0e:33:6a:3c:5f:74:77
                    88:63:c4:ef:2d:fe:3c:b5:37:e6:9d:02:5d:f7:c8: 
                    1e:25:0b:ff:d3:53:54:cb:f1:71:bb:0a:80:b9:39
                    1a:7b:3e:4d:97:52:f1:3f:40:a9:4c:78:60:87:33
                    b8:15:10:f8:8a:d4:f6:c2:a4:e1:e2:3a:68:8f:0f
                    50:66:7b 
                Exponent: 65537 (0x10001
        X509v3 extensions: 
            X509v3 Authority Key Identifier:  
                keyid:5A:C4:B9:7B:2A:0A:A3:A5:EA:71:03:C0:60:F9:2D:F6:65:75:0E:58 
 
            X509v3 Subject Key Identifier:  
                FC:2A:BF:7E:D4:BE:AC:F3:82:9C:A4:CF:7B:22:01:3B:B8:8F:07:F2 
            X509v3 Key Usage: critical 
                Digital Signature 
            X509v3 Extended Key Usage:  
                Code Signing 
            X509v3 CRL Distribution Points:  
 
                Full Name: 
                  URI:http://crl3.digicert.com/sha2-assured-cs-g1.crl 
 
                Full Name: 
                  URI:http://crl4.digicert.com/sha2-assured-cs-g1.crl 
 
            X509v3 Certificate Policies:  
                Policy: 2.16.840.1.114412.3.1 
                  CPS: https://http://www.digicert.com/CPS 
                Policy: 2.23.140.1.4.1 
 
            Authority Information Access:  
                OCSP - URI:http://ocsp.digicert.com 
                CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2AssuredIDCodeSigningCA.crt 
 
            X509v3 Basic Constraints: critical 
                CA:FALSE 
    Signature Algorithm: sha256WithRSAEncryption 
         4b:75:a1:2d:b5:5f:46:b1:89:a7:cf:8f:26:3e:be:56:2a:8d
         62:ae:52:ef:d8:16:e6:16:20:4a:ba:89:14:5a:15:a6:cd:0e
         18:fd:44:11:50:17:f6:89:88:4e:66:b2:b4:04:39:f0:03:eb: 
         fe:a0:55:21:fd:d6:56:56:06:a8:3a:34:47:86:f5:3f:52:5d
         b8:80:3e:f2:7d:08:45:85:b1:d9:17:52:b8:db:5a:1b:c2:9e
         e6:7b:92:a5:2e:53:90:40:ba:62:35:41:16:e9:62:06:4b:dd: 
         40:3e:89:95:e4:9a:36:c6:87:59:67:f2:b5:21:58:8c:5b:05
         82:f8:4a:0d:a7:aa:90:78:e2:9e:c2:50:56:24:3e:3f:cc:6f
         05:36:82:f0:55:da:95:e3:8f:95:9a:b2:4a:19:b6:c0:02:32
         fe:60:e3:60:4d:a1:52:e8:44:08:be:7a:fe:ac:d3:b3:ce:b7: 
         e2:6d:1d:12:26:f3:b9:53:ca:e7:3c:c2:1d:2c:c1:33:d4:c2: 
         4b:0a:6c:b5:35:65:d8:fd:0a:9a:ad:cd:79:ee:54:4d:30:e7: 
         47:b1:26:f4:52:2b:75:6d:e2:0f:b4:be:28:29:23:7a:8f:98
         37:69:91:ff:7e:e0:cb:f2:d1:73:0d:72:aa:ed:87:0d:b4:47
         e3:e4:22:53

上述 Signature Algorithm: sha256WithRSAEncryption 下面的即为 signatureValue 部分,把他复制到任意的二进制编辑器中,然后另存为 PythonExeSignatureValue.bin, 最后使用openssl解密这部分数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> hexdump -C PythonExeSignatureValue.bin
00000000 4b 75 a1 2d b5 5f 46 b1 89 a7 cf 8f 26 3e be 56 |Ku.-._F.....&>.V|
00000010 2a 8d 62 ae 52 ef d8 16 e6 16 20 4a ba 89 14 5a |*.b.R..... J...Z|
00000020 15 a6 cd 0e 18 fd 44 11 50 17 f6 89 88 4e 66 b2 |......D.P....Nf.|
00000030 b4 04 39 f0 03 eb fe a0 55 21 fd d6 56 56 06 a8 |..9.....U!..VV..|
00000040 3a 34 47 86 f5 3f 52 5d b8 80 3e f2 7d 08 45 85 |:4G..?R]..>.}.E.|
00000050 b1 d9 17 52 b8 db 5a 1b c2 9e e6 7b 92 a5 2e 53 |...R..Z....{...S|
00000060 90 40 ba 62 35 41 16 e9 62 06 4b dd 40 3e 89 95 |.@.b5A..b.K.@>..|
00000070 e4 9a 36 c6 87 59 67 f2 b5 21 58 8c 5b 05 82 f8 |..6..Yg..!X.[...|
00000080 4a 0d a7 aa 90 78 e2 9e c2 50 56 24 3e 3f cc 6f |J....x...PV$>?.o|
00000090 05 36 82 f0 55 da 95 e3 8f 95 9a b2 4a 19 b6 c0 |.6..U.......J...|
000000a0 02 32 fe 60 e3 60 4d a1 52 e8 44 08 be 7a fe ac |.2.`.`M.R.D..z..|
000000b0 d3 b3 ce b7 e2 6d 1d 12 26 f3 b9 53 ca e7 3c c2 |.....m..&..S..<.|
000000c0 1d 2c c1 33 d4 c2 4b 0a 6c b5 35 65 d8 fd 0a 9a |.,.3..K.l.5e....|
000000d0 ad cd 79 ee 54 4d 30 e7 47 b1 26 f4 52 2b 75 6d |..y.TM0.G.&.R+um|
000000e0 e2 0f b4 be 28 29 23 7a 8f 98 37 69 91 ff 7e e0 |....()#z..7i..~.|
000000f0 cb f2 d1 73 0d 72 aa ed 87 0d b4 47 e3 e4 22 53 |...s.r.....G.."S|
00000100

上面是提取的签名数据, 使用下面的命令解密, 解密后的文件保存到 PythonExeSignatureValueDecrypted.bin

1
2
3
4
5
6
7
>> openssl rsautl -inkey PythonParentPublicKey.pem -pubin -in PythonExeSignatureValue.bin >PythonExeSignatureValueDecrypted.bin
>> hexdump -CPythonExeSignatureValueDecrypted.bin
00000000 30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 |010...`.H.e.....|
00000010 00 04 20 ca 1c 82 f3 fd 76 74 30 54 39 09 8d 87 |.. .....vt0T9...|
00000020 95 4f e2 af b4 a0 64 24 bf 49 2f 27 34 61 46 2e |.O....d$.I/'4aF.|
00000030 ea d7 33                                        |..3|
00000033

上面解密后的“神秘数据”其实是DER编码的PKCS#9消息, 其依然使用ASN1语法规范, 因此可以继续使用openssl解析:

1
2
3
4
5
6
>> openssl asn1parse -i -inform DER -in PythonExeSignatureDecrypted.bin
0:d=0  hl=2 l= 49 cons: SEQUENCE
2:d=1  hl=2 l= 13 cons: SEQUENCE
4:d=2  hl=2 l= 9  prim: OBJECT :sha256
15:d=2 hl=2 l= 0  prim: NULL
17:d=1 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:CA1C82F3FD7674305439098D87954FE2AFB4A06424BF492F273461462EEAD733

至此,我们得到了第一个哈希值, 该哈希值是一个SHA256值:

 

CA1C82F3FD7674305439098D87954FE2AFB4A06424BF492F273461462EEAD733

 

接下来我们需要提取Python.exe证书的tbsCertificate部分, 可以使用如下openssl命令先查看Python.exe证书的结构(为了描述直观,输出内容做了删减):

1
2
3
4
5
6
7
8
>> openssl asn1parse -i -inform DER -in Python.exe.cer
0:d=0    hl=4 l=1607 cons: SEQUENCE
4:d=1    hl=4 l=1327 cons: SEQUENCE
.......
1335:d=1 hl=2 l= 13  cons: SEQUENCE
1337:d=2 hl=2 l= 9   prim: OBJECT :sha256WithRSAEncryption
1348:d=2 hl=2 l= 0   prim: NULL
1350:d=1 hl=4 l= 257 prim: BIT STRING

上述结果中,每一行冒号开始前的数字代表在数据中的偏移, hl代表头长度, l代表实际的数据长度。根据上文中证书的ASN1结构定义, 我们需要从offset 4开始提取4+1327=1331长度的数据, 此部分数据即为Python.exe证书的tbsCertificate部分, 使用如下命令提取:

1
2
3
4
>> dd if=./Python.exe.cer of=./PythonExetbsCertificate.bin skip=4 bs=1 count=1331
输入了 1331+0 块记录
输出了 1331+0 块记录
1331 字节 (1.3 kB, 1.3 KiB) 已复制,0.018058 s,73.7 kB/s

然后, 我们对提取的这部分tbsCertificate数据做sha256:

1
2
>> sha256sum PythonExetbsCertificate.bin
ca1c82f3fd7674305439098d87954fe2afb4a06424bf492f273461462eead733 PythonExetbsCertificate.bin

可以看到, 得到的第二个sha2256值“恰好”与上面的第一个sha256值相等。

证书验证小结

回顾一下上面我们干了什么。

  1. 从信任证书 DigiCert SHA2 Assured ID Code Singing CA 中提取了此证书的公钥
  2. 使用这个公钥解密了Python.exe证书中的signatureValue部分,得到第一个sha256值
  3. 提取Python.exe证书的tbsCertificate部分数据,并对提取的数据做sha256运算,得到第二个sha256值
  4. 第一个sha256值与第二个sha256相等

因此,得出结论,Python.exe使用的证书是合法有效且没有经过篡改的,因此这张证书中记录的数据,确切的说是这张证书tbsCertificate部分记录的数据,可以完全信任。那么tbsCertificate记录着什么重要数据需要这么“大费周章”的保护呢?答案是:Python.exe开发者的公钥!

 

众所周知,RSA作为非对称加密,公钥加密的数据只能由私钥解密(不知道的请去读姊妹篇),反之依然。也就是说,现在我们用Python.exe开发者的公钥去解密一段数据,只要解密成功了,这段数据就一定是开发者“发送”的,因为理论上, Python.exe开发者的私钥, 只有可能被开发者所持有。

 

那么,我们应该拿着Python.exe开发者的公钥去解密哪块数据呢?

 

让我们继续探索~

PE文件AuthentiCode

在继续之前,我们又需要补充一部分理论知识了。

一点PE文件结构的知识

估计各位对PE文件结构已经不陌生了,但是为了本文的完整性这里还是要简单说一下,熟悉的可以直接跳过。

 

这里借用一张PE文件结构的图 [参考5]:

 

我们可以由DOS Header入手, 找到PE Header, 然后是Optional Header中的IMAGE_DATA_DIRECTORY结构。PE签名涉及到的数据,在IMAGE_DATA_DIRECTORY的第5项(下标为4),这一项记录着SecurityDirectory的偏移和长度,使用PE文件结构分析工具,可以轻松定位这块数据:

 

从上图中可知,此段数据位于RawOffset 0x16E00处,大小为0x1A10,这段数据定义如下:

1
2
3
4
5
6
7
typedef struct _WIN_CERTIFICATE 
    DWORD       dwLength; 
    WORD        wRevision; 
    WORD        wCertificateType;    
    BYTE        bCertificate[ANYSIZE_ARRAY]; 
} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 23
支持
分享
赞赏记录
参与人
雪币
留言
时间
酒敬丨自由
+1
为你点赞!
2025-2-9 16:49
Thead
为你点赞!
2025-1-24 13:37
boyving
为你点赞!
2024-11-9 09:29
AnInteger
为你点赞!
2024-10-31 10:25
Oxygen1a1
非常支持你的观点!
2024-6-24 16:57
瞬息万变
为你点赞~
2023-7-29 18:32
Anowhere
为你点赞~
2023-7-14 15:27
CanineTooth
为你点赞~
2023-4-1 12:48
伟叔叔
为你点赞~
2023-3-18 03:01
wx_好一脚头球
为你点赞~
2023-3-15 18:59
dearfuture
为你点赞~
2022-11-2 17:01
PLEBFE
为你点赞~
2022-7-27 00:52
心游尘世外
为你点赞~
2022-7-26 22:36
飘零丶
为你点赞~
2022-7-17 02:28
北门观雪
为你点赞~
2022-6-29 00:18
mb_zlxyahlt
为你点赞~
2022-6-8 10:11
lovehuai
为你点赞~
2022-5-30 13:46
FaEry
为你点赞~
2022-5-27 23:33
baobao雅
为你点赞~
2022-4-29 14:23
zhczf
为你点赞~
2022-4-29 14:15
xdlakx
为你点赞~
2022-4-26 10:05
jmpcall
为你点赞~
2022-4-26 09:29
tank小王子
为你点赞~
2022-4-26 00:35
打赏 + 100.00雪花
打赏次数 1 雪花 + 100.00
收起 
赞赏  Editor   +100.00 2022/05/27 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (19)
雪    币: 210
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
666666
2022-4-25 22:37
0
雪    币: 1143
活跃值: (3126)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2022-4-25 23:17
0
雪    币: 8465
活跃值: (2945)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
专业人士
2022-4-26 06:17
0
雪    币: 175
活跃值: (2906)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
非常专业。
2022-4-26 08:30
0
雪    币: 733
活跃值: (3123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
thanks for share
2022-4-28 11:15
0
雪    币: 1697
活跃值: (2268)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2022-4-28 17:53
0
雪    币: 3372
活跃值: (1470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
666   学习了
2022-4-29 14:24
0
雪    币: 5788
活跃值: (3400)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持分享
2022-5-14 14:16
0
雪    币: 1285
活跃值: (231)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
太专业了, 强
2022-5-18 17:39
0
雪    币: 1498
活跃值: (14683)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
11
mark
2022-5-18 18:10
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
大佬  牛的 tinyans.1 编译成windows端 的方法有吗  cmake构建vs项目报错
2022-6-8 10:25
0
雪    币: 733
活跃值: (3123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
tql
2022-6-8 10:58
0
雪    币: 2313
活跃值: (4154)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
14
mb_zlxyahlt 大佬 牛的 tinyans.1 编译成windows端 的方法有吗 cmake构建vs项目报错
并没有什么特别需要注意的地方, 我是拿来直接用了, 似乎注意一下数据类型, windows的类型名称好像不太一样。
2022-6-13 15:03
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
请问文中 “使用PE文件结构分析工具,可以轻松定位这块数据” 下面图中的工具是什么?
2022-6-28 18:56
0
雪    币: 303
活跃值: (1712)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

在这段话下面的截图显示的内容使用的是什么工具-----通过分析导出的PKCS#7二进制数据,最终定位到此数据的偏移为:0x15f6(需要跳过4字节头),大小为0x0200:

最后于 2022-11-16 12:00 被wx_一叶_733编辑 ,原因:
2022-11-12 20:08
0
雪    币: 2496
活跃值: (231)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
如何在内核中读取签名的公司名,求代码
2023-7-29 12:22
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2024-10-31 10:24
0
雪    币: 2907
活跃值: (2431)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
大佬的那个查看pe工具能分享一下吗。
2024-11-9 09:28
0
雪    币: 191
活跃值: (604)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
的确能解决问题
2025-1-22 10:09
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册