关于安卓APP抓包的一些尝试

前言

为什么会有抓包的需求呢,因为在日常的各种渗透测试工作中,偶尔会遇到给定的目标是一个APP或者小程序,而这种情况下要进行测试第一步就是先抓包。刚好国庆假期有空就拿手机上的几个APP进行了一些尝试。

抓包前的准备

这是一台前段时间在某鱼上淘的小米平板4:

image-202310061328363

买回来之后先解锁、刷LineageOS、刷Magisk、装LSPosed之后就拿来作为调试机了。

安装证书

在抓https的包之前得先把burp的证书导入到安卓设备中。在安卓7以上只有系统证书才能被信任,所以为了抓到包我需要将证书安装到系统证书中。

首先导出burp的证书:

image-20231006132758567

在安卓设备中安装CA证书,之后在受信任的凭据中可以看到它被安装到用户证书中了:

image-20231006132927439

接着我得把安装的用户证书移动到系统证书的目录,而为了解决Read only file system的问题,又得将/system目录挂载为可读写的:

1
2
3
mount -o remount,rw /
mv /data/misc/user/0/cacerts-added/* /system/etc/security/cacerts/
mount -o remount,ro /system

然后就能看到Burp的证书已经被安装到系统证书中了:

image-20231006133033701

还有一种方案解决证书的问题是直接安装TrustMeAlready模块,在无法解决/system目录写入权限问题的情况下可以用这种方案。

设置代理

设置代理前得先去burp中设置监听的网卡为All Interfaces,让它能接收到安卓设备发来的http报文:

image-20231006133200329

在安卓设备上设置代理这一步有好几种方式,我可以直接在WIFI的高级设置里面设置代理:

image-20231006133319811

还可以用adb设置代理:

1
2
adb shell settings put global http_proxy 192.168.1.2:8080
adb shell settings put global http_proxy :0

最后还有一种方案是通过HttpCanary或者Proxifiler进行抓包:

image-20231006133921732

在完成以上的一些尝试之后我打开了几个手机上几个比较好抓的APP,在Burp上都能接收到:

image-20231006134315261

使用frida获取AES密钥

国庆假期的时候测试了某不知名的涩涩APP,通过Proxifiler设置代理进行抓包,发现参数被加密了:

image-20231006134744801

就这一长串就是加密后的参数,如果想对报文进行修改,那还得对加解密的逻辑进行分析。将APP丢进jadx,搜索Secret关键字找到对应的函数,找到加密算法:

image-20231006140156106

从这里看加密算法就是用的AESCBC模式,用了PKCS7填充。我这里使用objectionkeyiv的两个类的构造函数进行hook

1
2
android hooking watch class_method javax.crypto.spec.SecretKeySpec.$init --dump-args
android hooking watch class_method javax.crypto.spec.IvParameterSpec.$init --dump-args

这样的话APP在执行到这两个函数构造方法的时候就会就会将参数打印出来,这样就能获取到AES的keyiv

image-20231006135557814

再拿到python中进行加解密:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from Crypto.Cipher import AES
import json

key = b""
iv = b""
def decode(s):
    aes = AES.new(key, AES.MODE_CBC, iv)
    res1 = aes.decrypt(bytes.fromhex(s))
    res2 = res1[:res1.rindex(b"}") + 1]
    res3 = json.loads(res2)
    return res3
data = ''
print(decode(data))

到这里已经可以修改APP发起的HTTP请求,也能解开服务器返回的数据了。

updatedupdated2023-10-062023-10-06