apk中签名文件探究(*.SF, *.MF,*.RSA)

1. 取一个apk,然后进行不同签名,生成1.apk、2.apk,并提取META-INF里面的文件进行比对

apk中签名文件探究(*.SF, *.MF,*.RSA)_第1张图片
image.png
def calc_sha1(data):
    sha1obj = hashlib.sha1()
    if not isinstance(data, (bytearray, bytes)):
        with open(data, 'rb') as f:
            sha1obj.update(f.read())
    else:
        sha1obj.update(data)
    print(data)
    return sha1obj.digest(), sha1obj.hexdigest()

2. *.MF文件比对,通过python排序

apk中签名文件探究(*.SF, *.MF,*.RSA)_第2张图片
image.png

发现签名不一样,但里面的文件只要不改变,SHA1-Digest值是一样的,这里的SHA值是文件的hash值做base64
如:classes.dex


image.png
digest     : b'\x036\xdb9v\xed\x98\x9d\x0c\x86\xed\x13\xa0\x9e\x7f\xc3.\x1c\xe7H'
hexdigest  : 0336db3976ed989d0c86ed13a09e7fc32e1ce748
SHA1-Digest: b'AzbbOXbtmJ0Mhu0ToJ5/wy4c50g=\n'

3. *.SF 与第二点是一样的

3.1 第一个 SHA1-Digest-Manifest是对文件*.MF的SHA后再Base64

apk中签名文件探究(*.SF, *.MF,*.RSA)_第3张图片
image.png
digest     : b's\xfe\x9a\xc6\x94\x9e\xc8\x16\x00XL&\x8d\x08\x8e\x8d3 \xda\xc8'
hexdigest  : 73fe9ac6949ec81600584c268d088e8d3320dac8
SHA1-Digest: b'c/6axpSeyBYAWEwmjQiOjTMg2sg=\n'

3.2 其他的值是每一项的值做SHA后再Base64

如:


apk中签名文件探究(*.SF, *.MF,*.RSA)_第4张图片
image.png
b'Name: classes.dex\r\nSHA1-Digest: AzbbOXbtmJ0Mhu0ToJ5/wy4c50g=\r\n\r\n'
digest     : b'\x0e\x1c\xb4D\xf7G\xd1\x0b\xa1\xc2\x8cT\x14\xee\xe23-\xc01\xc4'
hexdigest  : 0e1cb444f747d10ba1c28c5414eee2332dc031c4
SHA1-Digest: b'Dhy0RPdH0QuhwoxUFO7iMy3AMcQ=\n'

4. *.RSA

这里保存了签名的相关信息

你可能感兴趣的:(apk中签名文件探究(*.SF, *.MF,*.RSA))