apk签名、包名

时间:2024-03-06 13:49:02
//通过各手机管理软件,如如360、豌豆荚等查看

//使用命令行,可以查看到permission、packagename、title、versionCode等
aapt dump badging ~/Downloads/youku.apk

//apk指纹
keytool -printcert -file *.rsa

//签名过程,testkey.x509.pem是公钥,estkey.pk8是私钥,update_signed.apk是签名过后的apk
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

MD5:apk的MD5,该值与官方相同则肯定是同一款apk。
包名:相同包名的apk在安装时,原apk会被覆盖掉,这个机制会用在apk的升级版本中,如果是已知apk的升级版本
,则开发人员会用相同的包名,若apk的MD5不相同,但包名相同,则基本可以认定apk是官方版本或刻意伪造。

DEX的MD5:有时为优化界面,只修改资源文件不修改源代码,在apk的MD5不同,但是dex文件的MD5相同时,认定该
apk为家族变种apk。

指纹证书:除了包名,在验证apk的时候还需要签名证书,指纹的MD5或SHA1代表了签名信息,同一版本系列的apk基
本上会使用相同的签名证书,判断这两个值是否相同,基本可以确定apk是否是官方同一系列的版本(除非签名证书
丢失或遭窃取)。伪造的apk会使用不同的签名证书,得到的指纹证书信息肯定会不同。

与官方apk相比:
包名一致,签名信息不一致,基本上可以认定是伪造apk;包名不一致,签名信息一致,则认定为官方版本;包名和
签名都一致,认定为同一家族apk。

代码级的特征匹配:android下发布的apk的源码几乎都会被混淆,匹配源码没什么意义。但经过混淆仍然会保留一
部分库级的api,敏感的系统调用都是调用这些api,在反编译后的smali文件中仍然保留,不同apk对系统api调用的
相似性也可以作为一个凭证,但这个是粗粒度的。