Android反编译


概述

Android有多少种反编译方式,我并不清楚,在现阶段,使用一些工具就能做到一键反编译,但是每种工具反编译出的源码都不尽相同,这点值得我思考了,这些工具的反编译原理是什么?是不是各自有各自的侧重?后期搞清楚这些反编译的原理,在写个文章分享。

下面介绍3种反编译的方式:

  • dex2jar + jd-gui
  • jadx-gui
  • apktool


apk编译和反编译流程

android打包流程

.java ------> .class ------> .dex ------> .apk

apk反编译流程

.apk ------> .dex ------> .class ------> .java


dex2jar + jd-gui

反编译出来的是java代码;

工具下载地址

http://sourceforge.net/projects/dex2jar/files/
http://jd.benow.ca/

使用流程

1..apk ------> .dex
将apk文件的后缀名改为zip,解压后得到classes.dex文件。

有时候会得到classes.dex ,classes2.dex ... 多个文件,这个是因为Android分包MultiDex机制造成的,我没想出什么好办法合并起来,只能分别做反编译操作即可。

2..dex ------> .class
打开cmd终端,cd 进入到dex2jar 所在目录,输入如下命令 d2j-dex2jar.bat classes.dex
1552062-20190328171249702-1873733953.png

3..class ------> .java
使用 jd-gui 打开 classes-dex2jar.jar 文件。

jadx-gui 在file选项中,点击 Save All Sources 保存源码,得到 classes-dex2jar.jar.src.zip 文件。

将 classes-dex2jar.jar.src.zip 解压,即可得到源码,导入到ide中方便阅读。


jadx-gui

反编译出来的是java代码;

工具下载地址

https://github.com/skylot/jadx

使用流程

打开jadx-gui-0.8.0.exe后,open打开.apk文件即可。


apktool

反编译出来的是smali代码;apktool不但能反编译,还能重新编译打签名。其实AndroidKiller和ApkIDE改之理这两款反编译的图形工具,底层都是基于apktool实现的,因为我查看它们两个软件的目录里都有apktool.bat;

工具下载地址

https://bitbucket.org/iBotPeaches/apktool/downloads

使用流程

打开cmd终端工具,输入如下命令

# 先cd进到apktool_2.3.4.jar所在的目录

java -jar apktool_2.3.4.jar d -f G:\安装包\APK反编译\物流助手2.0.apk -o OK

解压出来的源码就是当前目录下OK文件夹里面。

重新编译

# 在修改了里面smali代码之后
apktool.bat b OK

apktool还能生成keystore 和 对编译好的apk打签名


实战经验

如果碰到dex反编译的时候,比如源文件classes.dex为几M,反编译之后只为几百KB,说明该app经过了加壳处理。

转载于:https://www.cnblogs.com/mysticbinary/articles/10616239.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值