Android 反编译三种方式

时间:2024-03-24 09:38:54

首先反编译别人的APK,主要是学习别人的实现逻辑,给自己一个思路。比较商业的APK也不会给你留下这个漏洞,一些核心的业务处理会在后台进行操作;本地的 APK 也会进行混淆加密等。

好了废话不多说,步入正题:

方法一:在线反编译

很简单方便的一个方法,只要打开网页,把APK放进入,就可以在线编译了,不过速度比较慢,对于比较大型的APK还是不要用这种方法,容易出错。

网址:http://www.javadecompilers.com/apk

Android 反编译三种方式

方法二:利用apktool工具

需要用的工具有:

1、APK TOOL:这是谷歌提供的的编译工具,我们知道APK其实就是一个压缩文件,我们完全可以把.apk文件后缀改成.zip,这样我们就可以获取里面的资源文件(图片,res目录下的xml文件)和AndroidManifest.xml(这个是乱码的)如果你使用 apk tool 来进行反编译 apk 就不会出现这种问题了。下载地址:https://ibotpeaches.github.io/Apktool/install/ (需要fq)

2、dex2jar:将apk反编译成java源码(classes.dex转化成jar文件) 下载地址:http://sourceforge.net/projects/dex2jar/files/

3、jd-gui:用来查看 jar 包里面的代码的一种工具。官网下载地址:http://jd.benow.ca/

如果不方便fq,这里打包好三个工具下载:https://download.csdn.net/download/li815705994/12367490

下面说一下具体如何使用这个工具

第一步:apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到该目录下,

打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f  winsh.apk  -o text(apktool2.0以后用这个命令)   

注意:(命令中winsh.apk指的是要反编译的APK文件全名, text为反编译后资源文件存放的目录名称,即为:apktool.bat   d  -f    [apk文件 ]  -o  [输出文件夹])
Android 反编译三种方式

如果成功了那你的目录下会出现一个text的文件夹

Android 反编译三种方式

text就是我们反编译的内容了,当然如果修改完想打包apk也是可以的,因为主题的原因这个就不细说了,网上有很多。

第二步:Apk反编译得到Java源代码

所需工具:dex2jar

将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar-2.0 文件夹内,

在命令行下定位到dex2jar.bat所在目录,输入d2j-dex2jar.bat classes.dex,效果如下:

Android 反编译三种方式

在该目录下会生成一个classes_dex2jar.jar的文件,这个就是反编译后的java代码文件了,只是需要特定的工具查看

Android 反编译三种方式

第三步:使用jd-gui打开classes_dex2jar.jar文件

直接打开jd-gui.exe工具,在里面找到刚才的classes_dex2jar.jar,就可以了如下:

Android 反编译三种方式

注意:被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):

方法三:图形化反编译apk

需要下载Gapktool.jar,其实这个原理跟方法二是差不多的,只是这个更智能,不需要我们手动敲写命令,都是可视化的,简单方便。下载地址:https://download.csdn.net/download/li815705994/12367497

下载后直接点击Gapktool.bat,就会开启一个界面,把需要编译的apk放进去,在指定一个输出目录就可以了。

Android 反编译三种方式

1.运行Gapktool.bat
2.apk文件和输出目录使用英文路径

注意:默认使用jad反编译,如果编译出来的java代码难以阅读,请选择使用jd-gui反编译。
保留smali文件删除gen、src修改res里的文件后可以重修打包成apk使用。

总结:

开发者辛辛苦苦将自己的应用开发出来被别人一反编译便成为了他自己的东西,所以要进行混淆处理:

以下是我转载的混淆的教程:http://blog.csdn.net/vipzjyno1/article/details/21042823