MAC端Android反编译工具及使用 - Go语言中文社区

MAC端Android反编译工具及使用


【写在前面】

今天在做项目时遇到一个困难,需求是这样的:

模仿csdn客户端,实现app端查看博文内容,要求不使用H5混合开发实现文章在界面上的显示;


图1-1 简书博文界面


我想到了简书客户端有实现类似的功能,虽然不知道它是不是用原生开发的,但是想要尝试学习一下,就看了一下反编译,现在将反编译的操作写成这篇文章供大家参考。

PS: 如果大家知道如何使用非H5方式实现富文本查看功能,希望大家在文章底下评论留言,谢谢大家了!


【工具下载】

http://download.csdn.net/detail/wj_november/9534211

http://download.csdn.net/detail/wj_november/9534292


【使用操作】

下载好我们的软件并安装后,我们的软件是这样的:



图2-1 反编译工具



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

资源文件的反编译
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文件夹,然后打开终端,输入命令进行去壳操作:

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

图2-9 执行dex转jar命令

这时候我们查看一下我们dex2jar的文件夹,我们可以看到,我们的文件夹里多了一个classes_dex2jar.jar的文件:

图2-10 生成classes_dex2jar.jar文件


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


图2-11 得到源码


当然我们会遇到这样的代码:


图2-12 代码混淆


这种情况叫“代码混淆”,为了防止我们写的代码被反编译后窃取,android设置了最后一层屏障,就是将我们原来对类、变量、方法的命名以abcd的字母来代替,让其失去原有的意思,防止我们的代码被别人读懂。但是这个对于有多年项目经验的大神们来说,并不构成障碍,因为写代码写得多了,根据其代码逻辑,大致可以判断代码的含义,而且也可以通过import进来的包,理解其作用。

奈何我只是一只菜菜的安卓小白,并不能很容易地读懂代码的含义,看来想要从简书app中学习到原生加载富文本的功能,尚需花费时日了。

本次反编译工具的使用教程就到这里,如果本文有出现错误的地方,欢迎大家多多指正!

另外,如果大家懂得如何用原生的方法实现富文本的加载,很感谢您在文章下面评论 ^_^

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wj_november/article/details/51527286
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-30 11:11:11
  • 阅读 ( 2427 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢