android安装包apk中,有一个META-INF文件夹,该文件夹下面必须有以下几个扩展名的文件:.SF,.RSA,*.MF。一般为MANIFEST.MF,包名.SF,包名.RSA(也有可能是EC或者DSA)。
其中:
MANIFEST.MF:除去META-INF文件夹外,所有文件的base64(sha1)值。
以文件activity_search_result.xml为例,从MANIFEST.MF中可以看到,该文件的base64(sha1)值为 4L3KEBI/a+som57XQEDsO+uWBrk=,把该值复制到网址https://c.runoob.com/front-end/693/中,得到base64编码前的值为\xE0\xBD\x8A\x10\x12\x3F\x6B\xEB\xA8\x9B\xEE\x97\x80\x40\xEC\xBB\xAB\xE6\x86\xB9。 把该文件复制到d:\盘下,命令行中获取该文件的sha1值,可以看到两者相等。
*.SF:对MANIFEST.MF文件整体的sha1值,以及其中各个条目的sha1值。每一条对应MANIFEST.MF中的一个条目,是对各个条目的再次计算sha1值。
例如,图中的SHA1-Digest-Manifest-Main-Attributes字段是对MANIFEST.MF中“Manifest-Version: 1.0\r\n
Created-By: 1.8.0_152-release (JetBrains s.r.o)\r\n\r\n"的base64(sha1)。注意,每个条目后要多加一个"\r\n"。
关于SHA1-Digest-Manifest字段,下面第一行是certutil计算的MANIFEST.MF文件的sha1值,第二行是从SHA1-Digest-Manifest字段取出的ko/mCIuDu02v/nxJ/ycSj2GY12E=的base64解码后的值。
可见,第二行比第一行的数字变化是:
-600040 00-30 00 00 00-4040 -40 00 10-80-80-60-400000-40
92 8f e6 08 8b 83 bb 4d af fe 7c 49 ff 27 12 8f 61 98 d7 61
e2 8f a6 08 eb 83 bb 4d ef be bc 49 ef a7 92 ef a1 98 d7 a1
*.RSA:包含用私钥对 *.SF的签名以及包含公钥信息的数字证书。