最近在弄关于移动端安卓通讯的问题,总结下来,主要分为三方面防护,今天先记录第一点:防止恶意代码的注入。

“Android APP二次打包”则是盗版正规Android APP,破解后植入恶意代码重新打包。不管从性能、用户体验、外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量、流量,恶意扣费、偷窥隐私等等行为。

要实现代码内部防止APP被二次打包首先得了解APK的机器识别原理,APK的唯一识别是依靠包名和签名来做鉴定的,类似豌豆夹的洗白白、360手机卫士等安全软件对APK的山寨识别,他们就是依赖包名来确定APK然后通过签名来确定其是否山寨。所以说自己的程序内部在启动的时候可以通过获取APK本身的签名然后和正确的签名做对比来识别自己是否被二次打包。


通过PackageManag对象可以获取APK自身的签名wKioL1gId5GjrIcwAACGYGP89uQ920.png-wh_50

通过对签名的码的分解得到一串20左右的字符串,此字符串则是APK的签名的MD5值,通过获取的签名MD5值与正确的MD5值进行对比,就可以识别其APK是否被盗版。

wKioL1gId7fQDhOlAACN_iiYYko204.png-wh_50


经过比对,如果MD5值不一样,则可判断为二次打包,可以进行退出程序等处理。