本文主要是介绍apk中签名文件探究(*.SF, *.MF,*.RSA),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章来源:
作者:嘟嘟小灰
链接: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
这里保存了签名的相关信息
这篇关于apk中签名文件探究(*.SF, *.MF,*.RSA)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!