2024年5月6日发(作者:)

本文由【爱加密】技术整理

面对二次打包很多公司都有自己的防范措施,知名公司的APP都是自己在

程序内部做过处理防止其APP被二次打包,一旦打包后重新运行则程序自动退

出。接下来,我就来详解一下如何防止APP被二次打包。

要实现代码内部防止APP被二次打包首先得了解APK的机器识别原理,

APK的唯一识别是依靠包名和签名来做鉴定的,类似豌豆夹的洗白白、360手机

卫士等安全软件对APK的山寨识别,他们就是依赖包名来确定APK然后通过签

名来确定其是否山寨。所以说自己的程序内部在启动的时候可以通过获取APK

本身的签名然后和正确的签名做对比来识别自己是否被二次打包。

通过PackageManag对象可以获取APK自身的签名。

通过对签名的码的分解得到一串20左右的字符串,此字符串则是APK的签

名的MD5值,通过获取的签名MD5值与正确的MD5值进行对比,就可以识别

其APK是否被盗版。

下图是一些已做过保护的APP的代码块分析:

上图是“XX省电王“的防止二次打包的关键代码

上图是”XX电池管家”的防止二次打包的关键代码

以上两处都是smali层的代码,以上2处代码的截图都是下载量非常高的

APP所做的防止二次打包的处理,其处理的代码肯定会使用到的关键代码是

Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/

Signature。