反编译

228 阅读3分钟

http://blog.csdn.net/wj_november/article/details/51527286

工具下载】 download.csdn.net/detail/wj_n… download.csdn.net/detail/wj_n…

【使用操作】 下载好我们的软件并安装后,我们的软件是这样的:

图2-1 反编译工具 **

我们的反编译主要分为两个部分,主要是:

[plain] view plain copy  

在CODE上查看代码片
派生到我的代码片

资源文件的反编译   java代码的反编译

=资源文件的反编译= 我们打开AndroidCrackTool软件,选择好我们要反编译的apk:  

图2-2 反编译资源文件 **
图2-3 资源文件反编译成功 点击执行按钮,出现如图2-3说明资源文件反编译成功。 这时候可能有的同学会说,用普通的解压软件解压也可以得到资源文件。这里我们要注意,解压软件解压出来的文件是字节码,我们对比一下两者的区别:
图2-4 AndroidCrackTool反编译结果
图2-5 普通压缩软件解压缩结果 然后我们打开AndroidManifest.xml,看一下二者文件内容有何不同:
图2-6 AndroidCrackTool反编译后的Manifest.xml文件
图2-7 普通压缩软件解压缩后的Manifest.xml文件 ** 可以看到,我们的代码经过编译后,转为了十六进制的字节码。

=Java代码反编译= 这一步操作,我们要用到我们之前用普通解压软件解压后得到的classes.dex文件,如下图:

图2-8 解压缩后得到的classes.dex文件 这个dex的具体机制我目前不是很懂,但是之前看过一些博客,讲的是,我们的代码经过编译后,会压缩成一个.jar文件,我们可以理解为另外一种格式的压缩文件,类似于.zip或.rar,为了不让我们的代码轻易被他人解压缩窃取,Android将.jar加了一个叫做“壳”的东西,加壳后的.jar文件就是.dex文件了,我们可以把.dex文件理解为加密过的压缩文件,一般我们需要特殊的软件进行去壳操作,我们用到的软件就是dex2jar. 我们将之前得到的classes.dex文件,放入dex2jar文件夹,然后打开终端,输入命令进行去壳操作:

[plain] view plain copy  

在CODE上查看代码片
派生到我的代码片

cd dex2jar文件夹   sh dex2jar.sh classes.dex

图2-9 执行dex转jar命令 ** 这时候我们查看一下我们dex2jar的文件夹,我们可以看到,我们的文件夹里多了一个classes_dex2jar.jar的文件: [图片上传中。。。(15)] 图2-10 生成classes_dex2jar.jar文件 ** **

然后,我们用JD-GUI工具打开classes_dex2jar.jar文件,这时候就得到了源码:

图2-11 得到源码 ** 当然我们会遇到这样的代码:
图2-12 代码混淆 ** 这种情况叫“代码混淆”,为了防止我们写的代码被反编译后窃取,android设置了最后一层屏障,就是将我们原来对类、变量、方法的命名以abcd的字母来代替,让其失去原有的意思,防止我们的代码被别人读懂。但是这个对于有多年项目经验的大神们来说,并不构成障碍,因为写代码写得多了,根据其代码逻辑,大致可以判断代码的含义,而且也可以通过import进来的包,理解其作用。 奈何我只是一只菜菜的安卓小白,并不能很容易地读懂代码的含义,看来想要从简书app中学习到原生加载富文本的功能,尚需花费时日了。 本次反编译工具的使用教程就到这里,如果本文有出现错误的地方,欢迎大家多多指正! 另外,如果大家懂得如何用原生的方法实现富文本的加载,很感谢您在文章下面评论 ^_^