文章來源:
作者:嘟嘟小灰
鏈接:https://www.jianshu.com/p/e07da93acf98
來源:簡書
1、取一個apk,然後進行不同簽名,生成1.apk、2.apk,並提取META-INF裏面的文件進行比對
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排序
發現簽名不一樣,但裏面的文件只要不改變,SHA1-Digest值是一樣的,這裏的SHA值是文件的hash值做base64
如:classes.dex
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
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
如:
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
這裏保存了簽名的相關信息