Android 反编译

在Android学习开发过程中,我们往往看到一些优秀的 app 作品,或者向往的某个功能,比如:如诗如画的动画、精美的布局以及代码背后的逻辑,各种高大上……,我们就会想去借鉴学习别人的应用是如何开发,如何达到这些效果。这时,我们便需要对该应用(apk)进行反编译,获取我们所需。

开始我们的学习之旅。

我们熟知的 Android 的应用程序 apk 文件其实可以说是压缩文件。我们可以通过一些压缩软件对他进行解压,解压后,我们可以看到如下目录及文件
这里写图片描述

其中,通常情况下,res文件里的图片,我们能正常查看,并且可以替换,复制,移动等操作。通过一些工具,我们可以替换打包编译签名后,达到简单美化 app 的效果。

具体如下:

  1. AndroidManifest.xmlmanifest 的二进制文件
  2. classes.dex 程序的代码 将被编译成dex文件
  3. resources.arsc 包含预编译的程序资源二进制 的xml格式
  4. res 文件夹中包括未被编译打包进入resources.arsc的资源
  5. assets 可选的文件夹,包含应用的 assets 文件,由AssetManager进行检索
  6. lib 可选的文件夹,包含已编译的代码,例如 jni 的 libraray
  7. META-INF 文件夹中包含 MANIFEST.MF 文件,APK的签名文件也在

如:

apktool.jar b Test -o New_Test.apk  # b-build -o用于指定新生成的APK文件名

至于签名就得自己探索了。

当然,也有些 apk例外,图片也会被加密!

但是其中的布局文件、menu文件等等xml文件,打开后,几乎是看不懂的字符!

我们也无法找到我们的java代码!

普通解压后我们看到的资源不多,这时就需要我进行更高级的“解压”– 反编译 。

需要三大神来助威:

  1. apktool (反编译资源)
  2. Dex2jar (反编译代码)
  3. jd-gui (代码查看)

注:直接点击下载,下载可能极慢或被和谐,可以通过其他渠道下载(传送门 密码: hxhx)!

  1. 获取(反编译)资源
    在命令行(win+r,输入 cmd 后回车)中,用命令进入到 apktool 目录中:
    这里写图片描述

用 apktool 工具 “解密”

apktool.jar d Test.apk  #命令格式 jar文件名.jar d apk文件名.apk

注: d 是 decode 简写,已将 apktool 文件名更改为 apktool.jar

常用参数:
-f 目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。

-o 指定解码目标文件夹的名称(默认是apk文件名来命名目标文件夹)。

-s 不反编译dex文件(默认会将dex文件解码成 smali 文件)。

-r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。

ApkTool 安装教程
更多的 ApkTool 使用方法

执行命令之后会多了一个Test文件夹

这里写图片描述

现在打开 res 文件夹下的各种资源文件,相信绝大部分都是可以阅读了!

2.获取代码
2.1、把解压出来的 classes.dex 文件复制到 dex2jar 根目录下
这里写图片描述
2.2、进入到dex2jar目录下,后输入命令:

d2j-dex2jar classes.dex

成功后,会发现,多了一个文件: classes-dex2jar.jar

这里写图片描述

那如何查看呢?

这得用到第三个工具:jd-gui

执行 jd-gui.exe

这里写图片描述

打开 classes-dex2jar.jar,会惊奇地发现,这里面就是宝藏了。

这里写图片描述

取之精华,弃之糟粕。


开头所说的签名用的工具是: jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

注:
1. 可用Android Studio 或 Eclipse 可生成一个签名文件
2. jarsigner 文件存放在 jdk 的 bin 目录下,需将bin目录配置为系统环境变量才可以在任何位置执行此命令

签名之后要做对齐操作(加快运行速度): zipalign

zipalign 4 New_Demo.apk New_Demo_aligned.apk # 4 是固定值 需对齐文件名 对齐后的文件名

注:
1. 存放于/build-tools/目录下,需将此目录配置为系统环境变方可在任何位置执行此命令


一起成长、一起 To Be Better
关注公众号,一起成长、一起 To Be Better

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值