Android APK加固技术初探

本文主要介绍Android APK加固技术,主要从以下几个方面对该技术进行介绍:

  1. Android APK加固技术产生的原因;
  2. Android APK加固技术技术原理;
  3. Android APK加固技术的第三方解决方案;
  4. Android APK加固技术的Demo制作。

1. APK加固技术产生背景

纯干货:Android APP 防破解进化史这篇博文里面,作者将Android APP应用所处的安全等级划分了几个层级:

  1. 原始社会时期--代码混淆:使用Proguard等混淆工具会把Java语言编写的代码的类名、变量名混淆为自己定义的格式,增加破解者在破解时阅读难度。目前我们浏览器的整体代码处于该等级。
  2. 奴隶社会时期--自我校验:在程序中加一些对自己应用的完整性校验,可以借助签名、或计算自己应用dex的md5值等来完成。这种方式可以避免APK在第二次打包之后无法运行;但该方式的缺陷在于,如果破解者对开发者校验的地方进行了修改,那么计算机也会按照新的逻辑执行,该方式的保护措施风险很大,所以也就逐渐没落了。
  3. 封建社会时期——dex文件变形:将代码混淆,将校验代码使用C/C++来实现;同时对dex文件、AndroidManifest文件进行处理。该方式在保证APK正常运行的同时,使得反编译工具如apktool等,在反编译时发生崩溃。
  4. 资本主义社会时期--dex保护和So保护:
    • dex保护:包括隐藏dex文件(加壳)、对dex文件进行变形(使dex文件结构不完整)、对dex结构进行变形(在指令级别对dex文件进行修改)等;
    • so保护:so是ELF文件,有些第三方加固保护是对so文件进行保护,具体做法是稍微修改ELF头或者节表信息;其次还有修改程序头表方式来保护so文件; 进程防调试、或增加调试难度;
  5. 社会主义时期:使用多重维度和深度对APK进行加固保护。因为隐藏dex、dex文件结构变化、ELF简单修改、对so文件添加UPX壳等方式都存在不同程度的弊端;采用多重维度和深度的方式对APK加固就非常必要了。

2. APK加固技术之原理篇

APK加固技术大致可分为两大类,即对整个APK进行加壳、对部分敏感数据和代码进行加固(该观点来自对时下流行的Android应用加固技术分析)。 大多数移动安全厂商其实的加固方案是整体dex加密技术,定制版加固与免费版加固方案上没有区别,都是可执行文件的加密保护。这种应用加固方案在Android Art模式和Android5.0上兼容性不好,只能采用“预编译”的方式来兼容,但这种预编译的方式会带来严重的程序效率问题。 棍棍加固采用保护部分逻辑的方式来躲避这种效率低下的影响(需要预编译的代码块变少)。带来的不良影响不言而喻:

  • 应用只能受到部分保护,仍然可以被逆向分析,程序敏感逻辑被分析,即使不能“二次打包”,也可以轻易的分析程序弱点。
  • 应用在运行到被加固的功能模块需要经过编译过程,程序运行效率大大变低。应用中关于数据的操作响应效率大大受到了影响。

2.1 APK整体加壳原理简介

本节主要介绍APK整体加固的基本原理,这些原理是在总结Android中的Apk的加固(加壳)原理解析和实现Android APK加壳技术方案1的技术上得到的。

APK加固过程中涉及到的对象有:

  1. 加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据;
  2. 解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载;
  3. 源程序:需要加壳处理的被保护代码。

加壳程序工作流程:

  1. 加密源程序APK文件为解壳数据;
  2. 把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小;
  3. 修改解壳程序DEX头中checksum、signature 和file_size头信息。
  4. 修改源程序AndroidManifest.xml文件并覆盖解壳程序AndroidManifest.xml文件。

    解壳dex程序工作流程:

    1. 读取dex文件末尾数据获取解壳数据长度。
    2. 从dex文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.apk文件
    3. 通过DexClassLoader动态加载a.apk。

3 国内APK加固技术现状

国内提供APK加固技术方案的第三方技术公司有:娜迦、爱加密、梆梆加固、360加固、百度加固、腾讯加固等。这些第三方技术公司的加固方案在博文Android APK加固技术方案调研LBE安全大师张勇:软件加固技术浅析。 提供的移动应用保护服务:

  • 其中腾讯和360采用的方案是:字节码变形方案。
  • 百度采取的是dex加密+字节码变形方案;
  • 企业版本梆梆使用了内存加DEX方法。被梆梆加固的应用没有做所谓的DEX OPX操作的,这样的话会导致一些程序加固后的行为有差异,或者性能变差。梆梆支持art。
  • 爱加密基于Classes dex加固方案,跟梆梆比也有劣势,它是不支持安卓L的,只支持ARM平台。

    4 APK加固实例

    APK加固实例如下:
  • 案例1
  • Android APK加壳技术方案2
  • Android 安全专项 - Apk 的加固;
  • 各个第三方加固技术提供商都可以提供对APK加固的Demo。

5 APK反逆向分析加固方案

以下两篇博文通过逆向分析的方式来阐明加固技术方案:

  1. 腾讯应用加固的脱壳分析和修复
  2. Andorid APK反逆向解决方案---梆梆加固原理探寻

6 参考文献

  1. 纯干货:Android APP 防破解进化史
  2. 对时下流行的Android应用加固技术分析
  3. Android中的Apk的加固(加壳)原理解析和实现
  4. Android APK加壳技术方案1
  5. Android APK加壳技术方案2
  6. Android APK加固技术方案调研
  7. LBE安全大师张勇:软件加固技术浅析
  8. 腾讯应用加固的脱壳分析和修复
  9. Android 安全专项 - Apk 的加固
  10. 20150708Android加壳与脱壳方法简述肖波.pptx;
  11. Android开发周报:Android M版本号确定、APK加固方案调研

results matching ""

    No results matching ""