AndroidAPP如何防止二次打包

Android系统的开放性和免费性等特征让开发者和用户趋之若鹜,用户也渐渐习惯了Android应用的这种免费午餐,但在免费的背后却有着巨大的安全阴影。

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

面对二次打包不少公司都有自己的防范措施,知名公司的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。

此方法能够起到一定的安全作用,一般的打包党面对它是无可奈何的,如果你了解一些smali语法它的作用就等于0了。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android之Notification的多种用法
  3. 如何安装Android应用程序到sdcard上
  4. Kivy A to Z -- 调试篇之在Android平台调试Python代码
  5. Flutter教程(一) 十分钟了解Flutter
  6. 五个维度:Android内存管理、优化
  7. Android(安卓)== 简单的binder通信
  8. 最近研究有关Android中的TextView
  9. Android使用Json和ksoap2调用WebService(WCF)

随机推荐

  1. MySQL如何创建视图
  2. MySQL数据库连接异常汇总(值得收藏)
  3. 带你了解MySQL中的事件调度器EVENT
  4. MySQL索引的基本语法
  5. Windows系统下MySQL8.0.21安装教程(图文
  6. MySQL Installer 8.0.21安装教程图文详解
  7. Mysql最新版8.0.21下载安装配置教程详解
  8. MySQL是如何保证数据的完整性
  9. MySQL忘记root密码错误号码1045的解决办
  10. MySQL数据库查询性能优化策略