安全防破解
使用多种先进的软件保护技术提高应用安全性,采用业内领先的编译器级别的代码混淆,加花,虚假控制流和控制流平坦化等保护技术,首次将VMP虚拟保护,IPA动态壳加固运用到移动安全防护领域。
移动安全 加花
通过DEX加花和加壳
产品特点
爱加密APP加固系统的主要功能:
1、防逆向:通过DEX加花和加壳、SO文件高级混淆和加壳等技术对DEX和SO文件进行保护,防止被IDA等逆向工具分析
2、防篡改:在加固时提取APP内各文件的文件特征值,当文件运行时,系统解密加密文件提取特征值进行文件校验
3、防调试:多重加密技术防止代码注入,防JAVA层/C层动态调试、防代码注入和防HOOK攻击
4、数据防泄漏:使用多种加密算法,包括国际通用算法及自主研发的加密算法等,保护本地数据
5、页面数据保护:应用防劫持、应用防截屏、虚拟键盘SDK产品和技术,防界面劫持插件对组件进行全方位监听
6、传输数据保护:在客户端和服务器分别嵌入数据加密SDK,保证通道中传输的数据为高强度加密后的数据
高危漏洞的爆发更多集中在游戏和金融行业,主要体现在没有对Java源码进行加花保护,So文件未进行加固,应用存在数据库注入漏洞等风险,这些高危漏洞会直接威胁到移动应用的安全性,如果没有相应的加固策略,一旦被黑客攻击,将会对企业移动业务产生巨大的威胁。比如针对Java代码加花检测来说,企业没有进行Java代码加花,黑客就可以通过代码反编译工具对代码的逻辑以及关键数据进行窃取,例如账号、密码等敏感信息的非法获取,这些则会危害到整体移动应用的安全稳定运行。
安卓 加花
* dex加花保护
* 安卓dex加花保护
代码混淆并加花
1. 添加花指令:在Android项目添加一个永不能执行到class;
安卓 花指令
花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。【花指令】这个词来源于汇编语言,它的思想是非常不错的。。【花指令】另外个目的就是利用反编译工具漏洞,来使工具无法使用。 接下来 我们就在java代码处制造【花指令】,让反编译工具(jd-gui)无法反编译查询你的java代码。。。
jd-gui的bug其实挺多了。。很多特殊代码块或者字段集 都能够让其崩溃无法反编译出源码。。。
比如:
private static final char[] wJ = “0123456789abcdef”.toCharArray();
public static String imsi = “204046330839890”;
public static String p = “0”;
public static String keyword = “电话”;
public static String tranlateKeyword = “%E7%94%B5%E8%AF%9D”;
在每个类里面加入 如上字段。。。。 你会发现反编译的类 通过jd-gui查看 后的结果。。
2.2 花指令
2.2.1 概念和思路
花指令也叫垃圾指令,是指在原始程序中插入一组无用的字节,但又不会改变程序的原始逻辑,程序仍然可以正常运行,然而反汇编工具在反汇编这些字节时会出错,由此造成反汇编工具失效,提高破解难度。
花指令的主要思想是,当花指令跟正常指令的开始几个字节被反汇编工具识别成一条指令的时候,才可以使得反汇编工具报错。因此插入的花指令都是一些随机的但是不完整的指令。但是这些花指令必须要满足两个条件:
在程序运行时,花指令是位于一个永远也不会被执行的路径中。
这些花指令也是合法指令的一部分,只不过它们是不完整指令而已。
也就是说,我们只需要在每个要保护的代码块之前插入无条件分支语句和花指令,如下图所示。无条件分枝是保证程序在运行的时候不会运行到花指令的位置。而反汇编工具在再反汇编时由于会执行到花指令,所以就会报错。
那么目前的反汇编工具所使用的反汇编算法,主要分为两类:线性扫描算法和递归扫描算法。
线性扫描:依次按顺序逐个地将每一条指令反汇编成汇编指令
例如下面的指令:

如果是反汇编工具使用线性扫描算法,就会把花指令错误识别,导致反汇编出错。如下:

Dalvik Bytecode Obfuscation on Android[5]这篇文章就利用线性扫描的特点,插入fill-array-data-payload花指令,导致反编译工具失效。

递归扫描:按顺序逐个反汇编指令,如果某个地方出现了分支,就会把这个分支地址记录下来,然后对这些反汇编过程中碰到的分支进行反汇编。
可见,递归扫描的算法反汇编能力更强。我们常用的Android逆向工具里面,使用的反汇编算法如下:

花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法, 在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行, 而程序无法很好地反编译, 难以理解程序内容, 达到混淆视听的效果.
TODO:
去试试里面的内容
因为 同时有 IDA和OD的具体使用介绍
TODO:
里面有很多其他 成套的技术

好好学习学习
【总结】
- 加花 = 花指令 = 垃圾指令 = JunkBytes
- 起源:花指令这个词来源于汇编语言
- 含义:在真实代码中插入一些(垃圾的、无用的)代码/指令/字节,但又不会改变程序的原始逻辑,确保原有程序的正确执行
- 插入的代码叫做:花指令=垃圾指令=JunkBytes
- 目的:反汇编工具在反汇编时会出错,导致反汇编工具失效,提高破解难度
- 隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,使得程序无法很容易地反编译,即使被反编译后,也难以理解程序内容, 达到混淆视听的效果,增加破解和逆向的难度
- 主要思想
- 当花指令跟正常指令的开始几个字节被反汇编工具识别成一条指令的时候,才可以使得反汇编工具报错
- 插入的花指令都是一些随机的但是不完整的指令
- 特点
- 花指令必须要满足两个条件
- 在程序运行时,花指令是位于一个永远也不会被执行的路径中
- 这些花指令也是合法指令的一部分,只不过它们是不完整指令而已
- 实现思路
- 在每个要保护的代码块之前插入无条件分支语句和花指令
- 实际案例
- Dalvik Bytecode Obfuscation on Android中,插入fill-array-data-payload花指令,导致反编译工具失效
- 现存服务提供商
- 举例
- 网易易盾的:安卓dex加花保护
- 相关背景
- 反汇编工具常用算法
- 线性扫描算法
- 逻辑:依次按顺序逐个地将每一条指令反汇编成汇编指令
- 结果:容易把花指令错误识别,导致反汇编出错
- 举例
- 指令
- 反汇编后出错
- 递归扫描算法
- 逻辑:按顺序逐个反汇编指令
- 如果某个地方出现了分支,就会把这个分支地址记录下来,然后对这些反汇编过程中碰到的分支进行反汇编
- 结果:反汇编能力更强
- 总结
- 常用Android逆向工具中的反汇编算法
转载请注明:在路上 » 【整理】安卓安全和破解相关:加花 花指令