安卓手机抓包

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
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/7081295665170481165open in new window

电脑端抓包环境

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格式的抓包数据文件需要安装软件WireSharkopen in new window进行分析

# 参数:-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

参考文档

r0capture https://juejin.cn/post/7081295665170481165open in new window