吾爱破解安卓逆向入门教程(六)---了解JAVA反编译工具
本帖最后由 世事繁华皆成空 于 2015-8-23 09:58 编辑首先,我们需要了解下,安卓应用是拿什么语言开发的,毫无疑问,JAVA,那么安卓=java么,显然这不是一个等式。
总的来说Java程序和Android程序的区別在于Android程序是基于组件,基于配置的.Android 虽然使用Java语言 作为开发语言,但是在实际开发中发现,还是与Java SDK 有 一些不同的地方。Android SDK引用了大部分的Java SDK,少数部分被Android SDK抛弃,比如说界面部分,java.awt package除了java.awt.font被引用外,其他都被抛弃,在Android平台开发中不能使用。
上面废话了一大堆,目的就是说,安卓是用java开发的,不过部分api进行了添加修改和舍弃。那么为什么我们逆向要接触java呢,常规的我们使用apktool进行反编译之后的classes.dex文件都被转换成了smali文件,大家刚接触安卓逆向的可能都知道,smali语言晦涩难懂,比如楼主,到现在smali还是一知半解的,那么有没有什么更好的办法来帮助我们学习逆向呢,当然有,常规的逆向工具已经为我们集成了dex2jar组件,这个组件就是用来将dex文件转换成jar文件,配合神器jd-gui就可以查看java源码,直接打开jd-gui,使用内置的打开功能或者拖拽将jar包放入jd-gui中即可查看。
配合搜索功能,我们可以很轻易的到达我们需要查看的类或者搜索方法甚至是常量,在search for中我们可以设置。
那我们可不可以直接保存出这个java源码放入开发工具直接使用呢,我相信50%是可以的,不过jd-gui的还原能力当然也是有限的,大部分情况下,我们看到的源码虽说功能没有错误,但语法是有错误的,比如下面这张:
我们就讨论下那面那个return,大家玩pc逆向的可能也都清楚,程序遇到return即会跳出判断,循环等等,不会再执行下面的语句,这很明显是反编译问题,那有没有什么更加准确的反编译工具呢,当然有,JEB,绝对神器,目前我们能够免费使用的是14年版的jeb 1.5,官方已经更新到了2.0.1,有条件的可以自己去买个正版,一年1080刀,差不多近7000块钱。可以看下图对比一下反编译准确性
有没有发现这基本就像程序猿写出来的标准代码?JEB的强势之处还远不及如此,一些经过混淆的类,在dex2jar+jd-gui无法显示的时候,JEB可以做到,JEB可以解决大部分这类情况,但也有少数混淆加密过于强大,使得神器也失效。
不过需要注意的是,目前还没有任何一款工具是能够直接修改java源码的,懂得这些工具也是帮助大家分析smali语言,说到底,懂得smali才是王道,毕竟只要能反编译成功就一定能看到smali语言,而二次反编译成java是很有可能失败的。
本课只是对大家进行了解相关工具,具体实践还是得靠大家。
JEB使用入门教程:http://blog.csdn.net/u011069813/article/details/9373465
jd-gui更新地址:https://github.com/java-decompiler/jd-gui/releases
dex2jar更新地址:https://github.com/pxb1988/dex2jar/releases
理查德 发表于 2015-8-24 17:41
学开发,向移动开发方向发展。其实我对逆向的概念不太清楚呢
移动吗,安卓的话,学完c和数据结构就可以学java,然后转安卓,一般都是先java,后安卓,在学习c 世事繁华皆成空 发表于 2015-8-25 09:51
移动吗,安卓的话,学完c和数据结构就可以学java,然后转安卓,一般都是先java,后安卓,在学习c
我想学习IOS开发来着,这个目前市场比较好,还有就是开发时适配比较方便呢。有木有建议啊 我去我是沙发,这个必须火 我来坐个板凳! 支持大神 楼主大神啊,此贴必火 小白C看过了一遍,有些地方不懂。现在在看数据结构。求指路 支持楼主大大 繁华的帖子,一定要支持~ 感谢大神发帖 必须顶原创