freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Android渗透-05:安卓应用反编译和重打包
act0rn 2022-08-09 20:47:57 241329
所属地 广东省

0x00 前言

在 Android 渗透和逆向分析中,经常要对app进行反编译,进而查看应用的程序逻辑,以及更改源码重新打包等。本文从一个简单demo入手,分享安卓应用的反编译和重新打包相关的内容。

本章将要解决的相关问题:

  • 如何反编译查看Java源码?

  • 如何反编译资源文件?

  • 如何修改 smali 代码?

  • 如何重新签名和打包?

0x01 编写一个Demo

首先动手写一个简单的demo app

1660048665_62f25519427b8fd34e1bb.png!small?1660048664670

实现的功能很简单,app中有一个按钮,点击按钮之后弹出一个Toast消息提示: “Hello world!!!“,编辑完成代码后,生成一个 release 版本的 apk 文件

1660048957_62f2563d494e3efabe53e.png!small?1660048956862

然后复制这个 app-release.apk 出来,我们就改名为 demo.apk 吧,接着使用adb 安装到手机中:

adb install demo.apk

1660048969_62f25649333375c686581.png!small?1660048968743

到此我们的demo 程序就准备好了,接下来我们开始反编译这个demo.apk

0x02 反编译代码

我们可以使用 dex2jar工具来将 dex 文件转换为 jar 文件,使用 jd-gui工具来将 jar 文件转换成 Java 代码

解压 demo.apk 文件

unzip demo.apk -d demo1 

1660048979_62f25653c8db3ca15d198.png!small?1660048979129

使用 dex2jar中的 d2j-dex2jar.sh 对上面解压出来的 classes.dex 文件进行反编译

dex2jar-2.0/d2j-dex2jar.sh demo1/classes.dex

1660048989_62f2565d622dd687b2c31.png!small?1660048988746

此时已经得到 jar 文件,接下来可以使用 jd-gui 工具阅读 Java 源码

jd-gui classes-dex2jar.jar

1660048996_62f25664714e9c244ca14.png!small?1660048995827

此时已经完成了 classes.dex 的反编译,并且可以阅读 Java 的源码,可以看到反编译的效果还是非常好的,基本逻辑看的非常清晰。

接下里我们看下如何反编译资源文件

0x03 反编译资源文件

前面我们已经将 demo.apk 解压出来了,但是查看 AndroidManifest.xml 文件,发现里面是乱码:

1660049006_62f2566e88ea0923288ed.png!small?1660049006222

因此,我们直接解压 apk 文件时无法直接得到原始资源文件的,我们需要对资源文件进行反编译。可以使用 apktool工具还原 apk 文件中图片、布局、字符串等资源内容

首先,使用 apktool 对 apk 文件进行解码

apktool d demo.apk -o demo2

1660049016_62f2567826bf140af7602.png!small?1660049015722

此时在解压的目录 demo2 下已经看到 资源文件和smali目录,apktool 对apk 解码后得到的是 smali代码,smali代码类似于汇编代码,可以查看下资源文件

1660049030_62f256864e223d2b9af0c.png!small?1660049029822

已经可以看到AndroidMainfest.xml 里面的明文内容,再看看smali代码:

cat demo2/smali/com/act0rn/demo1/MainActivity\$1.smali

1660049039_62f2568f22776af315a96.png!small?1660049038637

可以看到这里是我们之前定义的消息字符串

0x04 修改smali代码

接下来我们直接修改smali 代码,然后重新打包,这个就相当于修改了apk 的源码,然后生成一个破解后的 apk 文件了

vim demo2/smali/com/act0rn/demo1/MainActivity\$1.smali

1660049047_62f2569781562b1e5629c.png!small?1660049047528将原先显示的“Hello world!!!" 消息字符串改为 ”This app is hacked by act0rn!!!",然后保存

0x05 重新打包

接下来,我们就对修改后的资源进行重新打包,我们还是使用 apktool 工具进行打包

apktool b demo2 -o hack_demo.apk

执行之后,就生成了 hack_demo.apk 文件,此时我们还不能将这个apk 安装到手机上,因为还没有进行签名。我们没办法拿到源apk的签名文件,但是我们可以自己生成签名文件,然后对这个 apk 进行重新签名

首先使用 apktool 生成签名文件:

keytool -genkey -keystore my.keystore -alias my-alias -keyalg RSA -keysize 4096 -validity 10000

1660049100_62f256ccc913af53bca4d.png!small?1660049100482

执行之后,在当前目录生成 my.keystore,接下来我们使用 jarsigner对 hack_demo.apk 文件进行重新签名:

jarsigner -verbose -keystore my.keystore -signedjar hack_demo_signed.apk hack_demo.apk my-alias

此时就生成了一个签名后的apk文件 hack_demo_signed.apk,接下来我们将这个apk 文件安装到手机

adb install hack_demo_signed.apk

1660049112_62f256d8a0ba18f54b9c3.png!small?1660049112184


0x06 结语

本文我们通过 dex2jar 对 classes.dex 进行反编译,得到 jar 文件,再结合 jd-gui 工具阅读 Java 源码,使用 apktool 反编译资源文件,得到 smali 代码。除了以上介绍的工具之外,如今还有很多好用的反编译工具,比如 Jadx-gui、Jeb、GDA、AndroidKiller 等,这些工具集成了多个工具,使用起来更加方便,大家可行下载尝试。

# 安卓安全 # 安卓逆向 # 安卓工具,移动安全 # 安卓渗透
本文为 act0rn 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
act0rn LV.4
这家伙太懒了,还未填写个人描述!
  • 13 文章数
  • 49 关注者
API安全Top 10 漏洞:crAPI漏洞靶场与解题思路
2022-11-06
Android渗透测试12:IDA动态调试so
2022-08-16
Android渗透11:AS与Jeb动态调试Apk
2022-08-16
文章目录