[TOC]
- 文件反编译:
DEX文件、SDK文件、SO文件、资源文件; - 代码分析:
Java代码、C/C++代码、JS/HTML代码; - 逆向破解:调试、抓包、
HOOK注入、绕过签名校验等。
- 逆向分析:代码调试,漏洞挖掘,协议分析;
- 二次打包:
APP盗版仿冒,插入广告、病毒木马,修改资源等; - 功能破解:
VIP,会员,内购破解,去广告等。
| 功能 | 说明 |
|---|---|
DEX加固 |
对DEX文件进行加壳保护,防止被静态反编译工具破解获取源码 |
| 防二次打包 | 应用在被非法二次打包后不能正常运行 |
| 防调试器 | 防止通过调试工具对应用进行非法破解 |
内存防dump |
防止运行时在内存中dump数据 |
| 资源文件保护 | 加密资源文件,防止APK资源文件被破解 |
H5文件混淆 |
对JS/HTML代码文件进行保护,防止破解分析 |
SDK加固 |
对jar/AAR文件进行保护,防止反编译获取源码 |
SO加密保护 |
对SO进行加壳,保护native代码不被逆向分析 |
Android加固:
DEX加固;SDK加固;- 资源加固;
SO加固;H5保护。
- **防反编译:**基础的做法是针对市面上出现的反编译工具做对抗,找漏洞,使得这些工具无法反编译。后来升级到
VMP加固和java2c的方案之后,防反编译已经不是主要问题了,因为被网易易盾加固后,即使反编译出来的内容也不是原来的代码了,仅仅是一些无用的外壳代码。 - **
VMP加固:**主要是把dex中的函数指令运行在壳的VMP环境中,极大地提高了破解的门槛,让破解变得不可能。 - **
Java2c:**通过把java代码在加固阶段就转换为Native层的c代码,破解分析完全不可逆,在性能上相较于VMP加固也有很大改进。
- 加固前的
classes.dex和clases2.dex直接暴露给了分析者; - 加固后只有一个
classes.dex,用baksmali.jar/jeb等工具查看,无法查看原app代码逻辑,同时保护classes.dex与classes2.dex。
防止classes.dex被逆向分析
- 加固前很容易反编译出
jar包文件查看源码; - 加固后让反编译失败,并无从查看源码。
代码逻辑混淆替换
VMP指令替换:
VMP执行流程:
加固指令加密替换 --> APP运行 --> 外壳执行 --> 加载加密DEX指令 --> 易盾虚拟机解析指令
方法级,Java代码彻底转换为Native代码指令。与VMP相比,用空间换时间。
java2c原理:
加固后APK一旦被调试,APP异常退出,阻断调试。使用IDA Pro调试APP自动退出。
保护方式:
- 字符串加密;
- 混淆/去
log/变量名混淆/函数名混淆; - 压缩;
- 游戏保护/平台识别;
- 防篡改/防加速。
保护方式:
- 加密后内容分块;
- 乱序插入干扰信息;
- 压缩处理,去除注释无用属性等;
- 平台识别,检测到非移动平台,不显示网页。
从代码安全、文件安全等方面对SDK进行保护。对抗反编译手段,防止恶意篡改SDK、窃取用户隐私信息等,有效提升SDK保护的强度。
SDK接口保持不变,对接入者透明;- 支持
JAR包、AAR包; - 可灵活指定加固保护的类和函数;
- 加固体积增量几乎无影响。
Java代码保护
对JAR包的保护,我们采取将重要逻辑代码抽离保护的方案,在运行时再动态修复回去,这样接入者在开发阶段仍然可以依赖JAR包作为库文件直接引用接口函数,保持了接入者开发的透明。但是实际代码又是抽离的,我们测试时只选取了xxxx.jar中类com.test.app.view.ExampleShell的接口进行处理,那么接入者在打开JAR包时只能看到如下的效果:
函数的指令代码被隐藏保护了,相应的,其它类和函数也可以依此方案处理。
由于代码逻辑被隐藏掉了,接入者看不到代码逻辑,也就无法分析甚至阉割SDK的功能了。
SO加固可以阻断IDA分析so及so代码加密。SO加固后IDA将无法正常打开SO进行分析,IDA会显示如下报错:
SO加固后与加固前已没有任何相似性,代码合字符串都被加密(左边为原始SO,右边为加固后的SO):
SO导出函数隐藏:
SO调用接口常常以Java_xxx_xxx_xxx形式导出,从接口名字即可大致看出该函数的功能。SO加固可将该函数完全隐藏,此处将反IDA静态分析功能去掉做示例对比:
SO加固反调试:
SO加固反调试效果,IDA attach到进程上后,IDA面板都为空,获取不到指令和模块信息:
SO加固保护优点:
| 优点 | 介绍 |
|---|---|
| 无需源码 | 只需要编译好的so即可加保护,相比于有些厂商提交源码的so保护方式,更为安全,有效保护厂商的技术机密 |
| 关键函数动态加密 | 一些关键函数运行完后,对其进行动态加密,提升安全性 |
| 全平台支持 | 支持armeabi、armeabi-v7a、x86、arm64-v8a、x86_64五大平台 |
防系统API HOOK |
Hook一些系统API,比如strcmp、strcpy等字符串操作函数就可以获取到很多关键信息。加保护后,这些hook将获取不到任何信息 |
| 无法脱壳 | 直接对ELF结构进行改造,仅在运行时存在可运行的代码,其它结构全部重构,任何时刻都不存在原生so的内存 |


















