对抗打包党之签名校验 | Tips

对抗打包党之签名校验 | Tips

一、前言

有时候你在一些非应用市场的渠道,下载的 App ,会和官方的 App 有一些区别,例如被汉化了、增加了广告、被**了之类的,这些 App 就是拿别人发布的 App,进行二次打包发布出来的,俗称打包党。

如果只有这些区别,对于 App 的普通用户来说,还可以接受,但是对于 App 开发者,就是赤裸裸的损失。而且这种二次打包的 App,你并不能确定它对其中做了什么修改,如果植入了恶意代码,可能也会对用户造成损失。

今天就介绍一个简单的方式,来以一个低成本的方式,预防打包党,那就是签名校验。

首先要明确一点,攻和防都不是绝对的,唯一的衡量就是复杂度和成本计算。这里介绍的方式,就是一个低成本的方式,十来行代码就可以搞定。

二、签名校验

每个 App 在发布的时候,都需要进行打包,并使用**证书进行签名。而签名所使用的**文件,是软件开发者所独有的,**者是不可能拥有相同的**文件,当然,这里排除了开发者自己将**泄露或者被盗的情况。

因此,签名就成了 Android Apk 的一种有效的身份标识。而如果软件在运行的时候,对自己的签名进行校验,当发现和开发者使用的签名不同的时候,说明 App 被篡改后二次打包了。只要能区分出来,我们就可以做后续的逻辑了。

在 Android SDK 中,可以使用 PackageManager 的 getPackageInfo() 方法获取一个 PackageInfo 对象,它其中的 signatures,就包含了当前 Apk 的签名信息。

对抗打包党之签名校验 | Tips

有关 PackageManager 不熟悉的可以看看我之前的文章《通过 PackageManager 获得你想要的 App 信息!》,这里就不展开讨论了。因为是需要获取签名信息,所以第二个参数需要传递  GET_SIGNATURES。

因为签名信息比较长,不适合在代码中去做比较,这里可以使用 Sigunature 的 hashCode() 方法,获取签名信息的一个 Hash 值,在代码中比较它就可以了。

对抗打包党之签名校验 | Tips

PackageInfo.signatures 获取到的是一个数组,通常里面只有一个对象,所以我们取第一个就好了。

这里直接使用 debug 签名的 Hash 值,进行校验。实际情况,你需要用你的 release 签名证书,计算出 hash 值,然后进行比对。

对抗打包党之签名校验 | Tips

到这里就完成了防止打包的关键逻辑。后续的操作,一般就是弹窗,告知用户这里个 App 是不安全的 App,然后让用户去市场下载正确的版本,并退出 App 就可以了。

三、小结

到这里就完成了一次对打包党简单的防御,签名也提到了,攻和防都是相对的,一切取决于成本。

而这种方式就基本上已经杜绝了只会用工具来进行二次打包的人,而哪些有反编译功底的,这样的防御方式,可以很轻巧就绕过了,所以说不存在绝对的安全。

最后,我准备了一些关于 Android 反编译的学习资料,如果你有兴趣的话,可以直接在承香墨影公众号的后台,回复『Android反编译』获得。

今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料,包含:Android反编译、算法。Web项目源码。

对抗打包党之签名校验 | Tips

推荐阅读:

对抗打包党之签名校验 | Tips

点赞或者分享吧~

点击『阅读原文』查看更多精彩内容