能力值:
( LV2,RANK:10 )
|
-
-
2 楼
谢谢楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
./obj/local/arm64-v8a/libz.a(ioapi.o): In function `fopen64_file_func mk文件参数是啥,编译出错
直接打开apk 提示"open apk file error! "
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
我这次只是在Windows和linux编译了,但这个问题我之前遇到过,在ioapi.h添加一行宏
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢楼主的分享。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
感谢lz分享 。
|
能力值:
( LV8,RANK:130 )
|
-
-
9 楼
谢谢分享,这种资料恐怕是第一份这么完整的描述签名信息了,谢谢楼主的分享,但是楼主哦,你太粗心了。有两个地方写错了
1、你的图跟你标注的类型,有个地方写错啦,,subject:证书主体是,tag=30是SEQUENCE类型,
2、length=0x34<<8|0x56这里啊,我看你画的图推测,length应该是0x34<<16|0x56
|
能力值:
( LV8,RANK:130 )
|
-
-
10 楼
贴上一份自己弄的demo跟着楼主学习的过程,希望方便以后学习的人
主要分析
CERT.RSA
PKCS7是采用DER编码的,用{tag,lenght,data}表示,tag
{tag,length,data}
tag占一个字节,比如看见0x2,就表示是INTEGER类型
tag VALUE
INTEGER 0x02
BITSTRING 0x03 位字符串
OCTETSTRING 0x4 字节字符串
ObjectIdentifier 0x06 该类型可以理解为整数数组
SEQUENCE 0x30 类似于c的struct
SET 0x31 类似于c语言的union
length 我们把第一个字节叫做lenbyte
若高位为1,则后面7位表示length所占的字节长度
若高位是0,则lenbyte就是长度
如,82 34 56 .. ,由于lenbyte=0x82得到最高位是1,则0x82&0x7f=2,说明2个字节长度,
则length=0x34<<8|0x56=0x3456
length后面紧接着data
==============================================================
==============================================================
ConetntInfo SEQUENCE类型
0x00-0x37B 30 82 03 78 .. ... ..
30表示是SEQUENCE类型
82最高位是1,则长度是0x378
Length=0x378
Data下面结构
==============================================================
contentType :ObjectIndentifier类型 signedData
0x04-0x0E 06 09 2A 86 48 86 F7 0D 01 07 02
Length=0x9
==============================================================
未知区域
0x0F-0x12 A0 82 03 69
==============================================================
content:(SEQUENCE类型)可选
0x13-0x 30 82 03 65 .....
Length=0x365
Data下面结构
==============================================================
version :(INTEGER类型) 版本信息,是整数类型,当前版本为1
0x17-0x19 02 01 01
02表示是INTEGER类型
lenbyte=01,高位是0,则,01
Data 为1,也就是说version为1
=================================================================
digestAlgorithms : (SET类型),消息摘要算法,表示是多个消息摘要中的一个
0x1A-0x26 31 0B 30 09 06 05 2B 0E 03 02 1A 05 00 30
0X31表示是SET类型
Lenbyte=0B,表示data长度是11
Data 30 09 06 05 2B 0E 03 02 1A 05 00
=================================================================
ContentInfo: (SEQUENCE类型)
0x27-0x33 30 0B 06 09 2A 86 48 86 F7 0D 01 07 01
0x30表示SEQUENCE类型
Lenbyte=0B,表示data长度是11
Data 06 09 2A 86 48 86 F7 0D 01 07 01
0x34-0x37 A0 82 02 35 这是什么鬼未知未知?????????????????????
==============================================================================
certificates:(SEQUENCEl类型) 证书部分 可选
certificates分为个三部分,tbsCertificate是证书的核心部分,signatureAlgorithm和signatureVale是对他进行
数字签名,保证核心部分不被修改
0x38-0x26C 30 82 02 31 .....
0x30表示SEQUENCE类型
Lenbyte=0x82,高位为1,表示长度是
0x2<<16|0x31=0x26C
Data就是下面的结构
tbsCertificate:(SEQUENCE类型)部分,证书的序列号、证书颁布者和主体,证书有效期和公钥
0x3C-0x1D9 30 82 01 9A......
0x30表示是SEQUENCE类型
长度是0x19A
Data是下面结构
0x40-0x41 A0 03 这是什么鬼未知未知?????????????????????
Version :(INTEGER类型) 版本信息,整数类型
0x42-0x44 02 01 02
Tag=02是 INTEGER类型
Length=0x1
Data=0x2 ,version=-0x2
serialNumber:(INTEGER类型) 证书的序列号,是整数类型,是由证书颁布者分配
0x45-0x4A 02 04 57 56 19 2B
Tag=2
Length=0x4
Data= 57 56 19 2B
signature: (SEQUENCE类型) 对tbsCertificate进行数字签名算法,和下面signatureAlogorithm的值一致
0x4A-0x59 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00
Data=06 09 2A 86 48 86 F7 0D 01 01 05 05 00
issuer:(SEQUENCE类型)标错了 整数颁布者信息,issuer和上面serialNumber唯一确定证书
0x5A-0xB8 30 5D
DATA部分如下
310D300B0603550406130433313233310B300906035504081302313231123010060355040713096775616E677A686F75310D300B060355040A1304736E6F77310D300B060355040B1304736E6F77310D300B060355040313047A686F75
validity: (SEQUENCE类型) 证书的有效期,有开始时间和截止时间
0xB9-0xD8 30 1E 17 0D 31 36 30 3630373030343533315A170D3236303630353030343533315A
可以看见data部分,
subject:(SET类型) 证书主体的信息
0xD8-0x137 30 5D ..
利用的keystore对照
subjectPublicKeyInfo: (SEQUENCE类型) 证书公钥信息,包含有加密算法和公钥
0x138-0x1D9 30 81 9F ...
Data部分
issuerUnqueID和subjectUniqueID 主要是对证书颁布者或证书主体多个引用时使,可选的
由于tbsCertificate的尾部范围是0x1D9知道这里是空
extensions: (SEQUENCE类型) 可选
由于tbsCertificate的尾部范围是0x1D9知道这里是空
-----------------------------------------------------------------------
signatureAlgorithm部分 ,是签名加密算法,常用的有SHA256wITHRSA,signatureValue,SHA1withRSA
0x1DA-0x1E8 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00
签名算法 用的是SHA1withRSA
-----------------------------------------------------------------------
SignatureVal:(BITSTRINGl类型)
0x1E9-0x26C 03 81 81 ....
==============================================================================
crls:(SET类型) 证书吊销列表
空
==============================================================================
signerInfos:(SET类型) 签名者信息
0x26D-0x37B 31 82 01 0B 30 ..
Length=0x10B
Data下面结构
signerInfo:(SEQUENCE类型)
0x271-0x37B 30 82 01 07
Length=0x107
Data是下面结构
Verison 版本信息
0x275-0x277 02 01 01
Length=0x1
Data=0x1
issuerAndSerialNumber: (SEQUENCE类型) 证书颁布者和序列号
0x278-0x2DE 30 65 30 5D....
Length=0x65
Data如下
digestAlgorithmld : (SEQUENCE类型)生成消息摘要的算法
0x2DF-0x2E9 30 09 06 05 2B 0E 03 02 1A 05 00
Length=0x9
authenticatedAttributes可选
空
digestEncryptionAlgorithmld: (SEQUENCE类型) 签名算法
0x2EA-0x2F8 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
encrytedDigest:OCTETSTRING 私钥加密后的数据
0x2F9-0x37B 04 81 80 0A ...
Length=0x80
Data如下
unauthenticatedAttributes可选
空
|
|
|