APK防护之DEX文件加花

来源:互联网 发布:淘宝卖家中心手机版 编辑:程序博客网 时间:2024/03/29 05:37

由于DEX文件中的数据以字节码的形式存在,所以很容易被反编译出源代码。那些反编译器(如dex2jar、apktool)是以顺序解释字节码来反编译的,如果遇到无效的字节码,便会反编译失败。DEX加花的原理就是给DEX文件中加入无效的字节码,是反编译失败。但是要保证插入无效的字节码永远不会被执行到,否则自己的程序也会崩溃。

字节码,维基百科的解释:Java 字节码英语:Java bytecode)是Java虚拟机执行的一种指令格式。大多数操作码都是一个长,而有些操作需要参数,导致了有一些多字节的操作码。而且并不是所有可能的256个操作码都被使用;其中有51个操作码被保留做将来使用。除此之外,原始Java平台开发商,升阳微系统,额外保留了3个代码永久不使用。

DEX文件加花需要使用到的工具有:

IDA Pro

作用:交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件。

下载链接:点击下载


C32Asm

作用:以十六进制打开DEX文件

下载链接:点击下载


DexFixer

作用:修复修改后的DEX文件。

下载链接:DexFixer


 Windows_sign_tool

作用:为APK签名

下载链接:


工具就是这些,现在开始介绍加花流程:

新建一个Demo,添加一个类文件,保证这个类永远不会被使用。里面放上一些特殊的字符。


打包APK,解压后找到classes.dex文件,用ida打开。


在IDA view-A框里找到“ccc”——手动找是奔溃的,把IDA-viewA里的内容拷贝(按住ctr,选中部分字符,然后将右侧的进度条拉到底就全部选中了,然后右键选copy)记事本里,然后通过ctr+f找到“ccc”所在位置,记住最前面那个偏移,我这里是 000E76B4

在IDA的IDA view-A里找到 000E76B4的位置

切换到HEX view-1,记录下偏移000E76B4和字节码(灰底色那些)


使用使用C32asm,以十六进制的方式打开dex文件。按快捷键“Ctrl + G”,定位到“000E76B4”,把“62 00 C5 1B 1A 01 E9 19 6E 20 50 3E 10 00”改为“12 01 38 01 03 00 FF FF 00 00 00 00 00  00


保存。把修改后的dex文件拖入DexFixer进行修复。

把修复后的dex文件覆盖apk原有的dex文件,删除META-INF签名文件,使用签名工具,对apk重新签名


该apk可以安装到手机,使用dex2jar对该apk进行反编译会失败。

完。


参考链接:http://blog.csdn.net/lz201234/article/details/46004573

原创粉丝点击