史上最全:Apk反编译之jadx,jd-gui,dex2jar,apktool,dex和smali的使用

在写这篇文章前,先插播一条博客地址:https://www.aliyun.com/jiaocheng/2503.html Android的编译打包流程详解,感谢博主写出这么好的博客

俗话说:授人与鱼,不如授人与渔!在网上看到好多关于这方面的文章,都是直接下载工具包!如果下次有什么更新,可能这些下载好的工具包就不能使用了。所以工具的下载地址如下:

apktool:
下载地址:及配置环境地址
https://ibotpeaches.github.io/Apktool/
https://connortumbleson.com/apktool/
手动编写apktool.bat脚本—-https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat
最后保留.jar .bat .exe及配置当前安装的环境变量即可使用!
使用命令:apktool d ***apk 和apktool b ***file反编译和回编译,有时候会出现(在window平台)回编译报错,这个可以用apktool -r d ***apk来反编译apk 然后在回编译apk,此时反编译的apk会缺少部分资源文件(res–>value下的文件),只需要拷贝缺少资源重新回编译即可

jd-gui:
下载地址:https://github.com/java-decompiler/jd-gui 在github上面下载好后,配置jdk后直接使用

dex2jar
下载地址及配置:https://github.com/pxb1988/dex2jar 并配置环境变量
dex转jar:首先将apk解压,然后将dex转化为jar)输入命令d2j-dex2jar.bat **.dex即可
jar转dex:d2j-jar2dex.bat .jar即可实现 或者使用sdk自带的dx.bat实现—》将jar包转换成dex格式二进制的jar包) 用sdk自带的dx.bat即可实现(路径为sdk/build-tools/具体的版本),需要将该jar解压才能拿到class.dex文件命令如下:dx –dex –output=.jar(*为输出的jar) origin.jar(origin为需要转化的jar)
同样是使用dex2jar里面的工具:
dex转smali:d2j-dex2smali.bat **.dex
smali转dex:d2j-smali.bat (为smali文件,利用的是dex2jar里面的文件,对support支持jar不能直接转化)
通过smali和baksmali架包来转化dex和smali
dex和smali之间的相互转化:下载地址
https://bitbucket.org/JesusFreke/smali/downloads/?tab=downloads
dex转smali:java -jar dex2smali.jar d .dex(其中dex2smali为转化的jar,为需要转化的dex 默认为输出名为out的smali文件)
smali转dex:java -jar smali2dex a (其中smali2dex为转化的jar,为需要转化的smali 默认为输出名为out.dex的dex文件,其中可以使用a as 和ass)

apk直接转Java:使用Smali2javaUI工具实现 工具地址:http://pan.baidu.com/s/1eRBQVtg 密码:42uq

java2smali:在as中直接下载插件java2smali插件后,直接build–complete to smali即可生成smali文件

smali2Java:过程smali–>dex—>jar—->class

jadx:
https://github.com/skylot/jadx
下载zip后,解压 先切换到所在安装盘 然后cd到具体的路径。
window执行命令:gradlew dist mac: ./gradlew dist
执行完后产生build/jadx/bin文件,可以配置bin下面的环境到环境变量或者cd到bin下面的目录操作
启动相关命令时报错如下:Could not create the Java Virtual Machine,A fatal exception has occurred。Program will exit—即不能启动虚拟机。执行jadx -h 看到具体的报错即虚拟内存空间太小。修改jadx.bat脚本和jadx里面分配的空间
命令:jadx -d out classes.dex 直接输出.java文件到out目录
jadx-gui classes.dex 使用gui打开
jadx-gui text.apk
jadx -d out text.apk

enjarify:https://github.com/google/enjarify

猜你喜欢

转载自blog.csdn.net/willba/article/details/81411406