安卓手机抓包
2023-03-09
文件向手机传输
推荐使用安卓官方的文件传输工具(大陆需良好的网络情况才可访问)。数据线连接电脑即可进行文件传输。
或者使用adb进行传输。需要预先安装
android sdk
adb push C:\Users\Test\Downloads\1.pem /sdcard/1.pem
系统Wifi配置Charles进行抓包
- 保证运行Charles的客户端与安卓手机在同一局域网内,手机在wifi设置中配置代理为charles的ip与端口(此时charles无需打开系统代理,系统代理用于抓取charles宿主机的包)
- 浏览器打开
chls.pro/ssl
下载证书 或者 电脑charles打开Help -> Save Charles Root Certi... 将证书传入手机 - 手机在设置中搜索“证书”安装或者文件管理器直接打开安装
- charles中对https的包右键开启ssl代理,对需要关注的host进行右键关注方便筛选
注意: 通过手机安装的证书为用户级别证书。对大多数app的ssl包无法生效,需要系统级别的证书。
经root手机可通过面具插件movecert
将用户级证书更改为系统级证书从而成功抓包。或是安装xpose插件TrustMeAlready
免证书抓取https数据包。
未root手机安装virtualxposed
在系统中模拟一个拥有root权限的安卓系统,将目标app安装在该环境中只需用户级别证书即可抓取。
使用postern通过socks5协议进行抓包
如果App检测了是否走系统代理,则wifi代理无效,需要配合Postern 与使用系统wifi代理流程大致相同,而系统wifi代理通过http协议进行抓包。以下是几个不同点
- 在charlse设置中启用socks代理并设置端口
- 安装并打开postern,配置代理中添加一个代理服务器,输入charles所在的ip与端口,代理类型选择
socks5
- 配置规则中删除软件默认规则,新建规则:匹配所有地址 - 通过代理连接 - 选择上一步中建立的socks5代理保存
- 通过打开/关闭VPN进行是否通过charles的控制
mitmproxy进行抓包
mitmdump可通过url匹配出目标数据包,从而对响应进行处理。(如写入文件,解析后存入数据库等)
或是配合airtest
等自动化框架进行自动化操作并记录过程中的目标数据包。
mitmproxy的安装与简单使用
- 安装 推荐通过
homebrew
进行安装
brew install mitmproxy
- 是否安装成功
mitmdump --version
- 运行命令,运行后生成公私钥
mitmdump
- 如需代理mac系统:mac安装密钥。输入命令后自动打开钥匙串,对证书修改为信任
open ~/.mitmproxy/mitmproxy-ca-cert.pem
- 代理手机:手机端安装证书(1.将证书推入手机后,在手机里手动安装. 2. 手机访问http://mitm.it )
adb push ~/.mitmproxy/mitmproxy-ca-cert.pem /sdcard
- python环境启动
pip install mitmproxy # 安装
mitmproxy # 启动
mitmdump对指定数据包的拦截
通过mitmdump的python api,对目标url的数据包进行参数判断与响应存储
- 下方
mitmdump
脚本是对搜索页面结果抓取
import json
from datetime import datetime
from mitmproxy import ctx
# 存储搜索结果的列表
result_list = list()
def response(flow):
# 读取数据包的url
request_url = flow.request.url
# 判断api是否为目标api(host可能会改变)
if '/api/search/result?keyword' in request_url:
# 如有需要可对指定页码进行拦截
# page = request_url.split('&page=')[-1].split('&')[0]
global result_list
# 通过响应解析函数得到该页码请求的搜索结果
result_list += get_search_result(flow.response.text)
# 控制台打印结果
print(result_list)
print('*'*8 + f'result list length is {len(note_id_list)}' + '*'*8)
print('*'*8 + f'result set length is {len(set(note_id_list))}' + '*'*8)
- 运行
mitmdump
脚本。需要在脚本所在目录运行。手机通过系统wifi或者postern设置http代理
# 指明代理端口
mitmdump -p 8889 -s get_search_result.py
r0capture抓包
基于frida的抓包工具,抓包支持协议更广。 注意:需要手机进行root。 参考https://juejin.cn/post/7081295665170481165
电脑端抓包环境
从github拉取r0capture
安装r0capture的依赖
pip install frida-tools
pip install loguru
手机端抓包环境
手机安装frida服务
- 查看手机处理器架构(arm or x86, 32 or 64)
adb shell getprop ro.product.cpu.abi
- 根据架构下载对应的压缩包,解压得到可执行文件frida-server
手机端启动frida服务
shell里运行上一步得到的可执行文件
$ adb shell
bullhead:/ $ su
bullhead:/ # whoami
root
bullhead:/ # cd /data/local/tmp/
bullhead:/data/local/tmp # chmod 777 /data/local/tmp/frida-server
bullhead:/data/local/tmp # ./frida-server &
[1] 6669
电脑端抓包
pcap
格式的抓包数据文件需要安装软件WireShark
进行分析
# 参数:-f 在包未运行时自动启动目标应用 测试小红书会闪退
# spawn 模式
python r0capture.py -U -f 包名
# Attach 模式
python r0capture.py -U 包名 -p 文件名.pcap
python r0capture.py -U -f 包名 -v >> 文件名.txt
补充:如何获取应用的包名
启动使用adb获取包名:先使用adb shell am monitor
,再启动目标app即可获取
例如:小红书包名com.xingin.xhs