天天看点

关于反编译的那些事

在Android开发中,有的时候,我们想要参考有名的app的设计,需要看下源码结构什么的,这个时候,反编译是很有必要的。我之前也在网上搜了一下关于如何反编译的使用,在使用方面,因为都是在网上搜索答案的,结果是有时候去反编译别人家的app的时候,会出错,要么是反编译不成功,要么就是忘记改怎么使用了。这会有点时间,就出来整理一下,方便大家,也为了避免自己反编译的时候,忘记改怎么操作了。

首先我们要下载反编译apk的工具,这里需要用到3个工具:

1,apktool 2,dex2jar 3,jd_jui

(这里说一下,本人写博客不是很久,所以可能会有点low,一些功能链接也没有做,如果想下这三个工具,可以自行下载,或者点击我文章下面给出的比我叙述更好的博客链接)

这里讲一下这三个工具的用途吧,第一个apktool,是用来获取项目中的资源文件的,就是项目中的res文件和其他的资源文件。第二个dex2jar是用来将apk反编译出来java源码(顾名思义dex2jar就是将classes.dex转成jar文件),第三个jd_jui,不用说这个肯定是用来查看jar源码的。有一点大家肯定也清楚,我们这里反编译apk只是仅限于没有做过混淆或者加密的apk,并且还原率也不可能是百分之一百的情况。我们工具下好之后,就是开始我们的反编译的重点了。我们先去下载我们想去反编译的apk,开始进行反编译。

从下载的apktool解压之后,把用到的apk放到apktool文件夹下,打开命令行,定位到当前文件夹下,然后执行”’apktool.bat d -f xxx.apk xxx ”’大致意思就是把apk中的资源文件放到某个文件夹下(后面的xxx自己随便命名)这个命令行可能已经过时了,有可能会有执行命令行出错,如果遇到下面的错误,就要用到新的命令行

apktool d [-s] -f xxx.apk -o xxx

错误代码:

*1.Input file was not found or was not readable.

2.Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it.**

有时候,你可能也会遇到这样的错误:Exception in thread “main“brut.androlib.AndrolibException: Could not decode ars c fil……….

这个是因为你的apktool是因为你下的版本过低,去官网更新个最新版本就好了。

如果,你执行代码行没有错误的话,在你的apktool文件夹下会生成xxx的文件夹,里面就是apk中所使用的资源文件了(里面有个重要的文件classes.dex)。其实这个资源文件的获得,有个更简单的,只要把apk的后缀名改成zip直接解压就可以得到资源文件了,也能拿到classes.dex。

我们拿到classes.dex之后,就用到第二个工具了dex2jar,把classes.dex放到dex2jar所在的文件夹下。同样也要使用命令行定位到dex2jar所在的文件夹下,执行命令dex2jar.bat classes.dex,如果出现

关于反编译的那些事

这就表示我们的jar文件已经生成了,你可以在你问价夹下会有个classes_dex2jar.jar文件。这个时候,我们的第二步也完成了。

第三步,就是看jar源码了,用jd_jui工具,在你解压的jd_jui问价夹下有一个jd-gui.exe直接双击打开,选择你刚刚生成的jar文件,如果这个apk没有进行混淆加密的话,你这个时候,就可以清晰的看到这个apk的代码结构,直接查看源码了。

我们的反编译工作已经搞完了,本人的技术也不是太好,博客也写也就那么回事,如果大家能通过我写的博客解决反编译的问题,是我的荣幸,如果没有解决,可以提一下意见,或者大骂一句垃圾,再重新找其他相关问题解决的资料。而我这里,只是为了整理我的记忆,不再出现这方面的问题不知所措。

下面是我查找的资料,希望对大家有帮助:

http://blog.csdn.net/vipzjyno1/article/details/21039349/

http://blog.csdn.net/xia09222826/article/details/37909421

谢谢!