Android抓包配置合集
Android抓包ALL IN ONE ¶
抓包软件配置 ¶
Charles ¶
初始配置 ¶
Charles注册码
1
2 >Name: Forgo7ten.github.io
>Key: 6868255341EDC5CD3D
-
安装证书
- 菜单栏
Help
->SSL Proxying
->Install Charles Root Certificate
,保存到受信任的根证书颁发机构
Save Charles Root Certificate
,保存证书,配置到手机
- 菜单栏
-
配置访问控制设置
- 菜单栏
Proxy
->Access Control settings...
- 【Add】
0.0.0.0/0
- 点击【OK】
- 菜单栏
-
配置代理服务器设置
-
菜单栏
Proxy
->proxying settings...
-
-
配置SSL代理设置
- 菜单栏
Proxy
->SSL Proxying settings...
- 勾选【Enable SSL Proxying】
- 【Include】下添加
*:443
或者*:*
- 点击【OK】
- 菜单栏
手机代理设置 8889端口及SOCK5代理模式
菜单栏Proxy
->Windows Proxy(Ctrl+shift+P)
:Windows抓包开关(关闭后可不抓Windows的包)
同时Proxy
->proxying settings...
->Windows
中可取消启动时自动打开windows抓包
Charles抓包外网APP:配置External Proxy Settings设置来配置代理(可将包转发到BP,形成app->Charles->BurpSuite->Server链路)
Charles添加新证书 ¶
- 菜单栏
Proxy
→SSL Proxy Settings
→Client Certificates
→Add
添加新的证书 - 输入指定的域名IP以及端口并导入p12格式或者pem格式的证书
之后即可将Charles伪装成使用特定证书的客户端,最终达到正常抓包的目的
Burpsuit ¶
Burpsuit配置上游代理 ¶
(访问google)
Burpsuit中文乱码 ¶
请求与响应报文中文乱码:字体为中文字体(如果有不带编码格式的响应需要在此修改,修改编码UTF-8
)
Burpsuit插件 ¶
菜单栏Extender -》 BAppStore
- Copy as Python-Requests ---- 一键复制成python代码
- Non HTTP Proxy(NoPE)---- 抓取非HTTP协议的数据(有些包抓不到的时候,可以尝试,原理是用伪造的DNS服务器来抓取数据)
- JSON Query ---- 解析json数据…
Android配置 ¶
配置系统证书 ¶
Android7.0系统证书目录:/system/etc/security/cacerts/
用户证书目录:/data/misc/user/0/cacerts-added/
(可以先导入用户证书、之后移动至系统证书目录、省去重命名等步骤)
快捷配置证书脚本:move_cert.sh
计算证书hash值 ¶
需计算相应证书的hash值
openssl version
查看openssl版本;在1.0以上使用-subject_hash_old
、1.0以下使用-subject_hash
.cer
证书
1 | openssl x509 -subject_hash_old -in FiddlerRoot.cer -inform der |
对于.pem
证书
1 | openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem |
其中cer
与.pem
互转
.pem证书转.cer证书
1 >openssl x509 -outform der -in demo.pem -out demo.cer.cer证书转.pem证书
1 >openssl x509 -inform der -in demo.cer -out demo.pem系统证书目录证书格式为
.pem
重命名证书 ¶
将证书重命名为[hashcode].0
拷贝证书进入系统根证书目录 ¶
进行证书临时拷贝
1 | adb push hash.0 /sdcard/ |
先将根目录重新挂载为可读可写目录
1 | adb shell |
1 | disable-verity |
将证书移动到证书目录并赋予权限、修改用户和属组
1 | mv /sdcard/hash.0 /system/etc/security/cacerts/ |
重启
1 | reboot |
其中系统凭据能找到
1 | Fiddler: DO_NOT_TRUST |
安卓8以上 修改system读写权限
1
2
3
4
5
6 adb root
adb disable-verity
adb reboot // 必须重启一次,不然无法生效
adb root
adb remount未测试
安卓10以上,配置系统证书 ¶
https://github.com/NVISOsecurity/MagiskTrustUserCerts
https://github.com/Magisk-Modules-Repo/movecert
配置代理软件 ¶
adb命令代理 ¶
1 | adb shell settings put global http_proxy 127.0.0.1:8888 |
WiFi代理(不建议) ¶
- wifi修改网络
- 高级选项
- 代理:手动
- 设置主机和端口
Drony ¶
Drony for Android - APK Download (apkpure.com)
- 右滑到设置,点击【Networks(网络)-Wifi(无线网络)】
- 选择【当前Wifi】
- 【Proxy type(代理類型)】选择【Manual(手動)】
- 设置【Hostname(主機名)】和【Port(端口)】
- 将【Filter default value(過濾默認值)】改为【4 Direct all(引導全部)】(可改可不改)
- 进入【Rules(規則)】
- 新建规则,选择【本地代理鏈全部】,【选择相应APP】,其他不选
- 在开始页面,将【OFF】改为【ON】,开始代理
Postern ¶
安装postern
配置代理 ¶
服务器名称:随意
服务器地址:电脑局域网地址
服务器端口:8888(与fiddler等端口一致)
代理类型:HTTPS/HTTP CONNECT
保存
另为配合Charles,配置一个代理类型为SOCKS5
,以捕获该类型的数据包,端口等要与电脑抓包软件相符
配置规则 ¶
匹配类型: 匹配所有地址
动作: 通过代理连接
代理/代理组:选择相应代理
勾选开启抓包
目标地址:*
保存
右侧菜单打开VPN ¶
右侧菜单打开VPN
clash ¶
Releases · Kr328/ClashForAndroid (github.com) cfa-2.5.11-premium-universal-release.apk
从文件中导入配置
charles.yaml
1 | mixed-port: 7890 |
自行修改proxies下的ip地址与端口号
SocksDroid ¶
PeterCxy/SocksDroid (github.com)
调试WebView ¶
使用Chrome DevTools Chrome DevTools - Chrome Developers
-
电脑usb连接手机
-
Chrome访问地址
chrome://inspect
该调试方法依赖于 APP自身必须调用WebView.setWebContentsDebuggingEnabled(true);
才会允许被DevTools调试
可以安装Xopsed模块 GitHub - feix760/WebViewDebugHook: Use Xposed force all webView to debug on android 4.4+
自行编写 只需要在目标APP进程中调用静态方法WebView.setWebContentsDebuggingEnabled(true);
HOOK抓包 ¶
清空~/.objection/objection.log
日志文件,objection载入APP
获取加载的所有类
1 | android hooking list classes |
关闭objection,使用grep来过滤网络相关类。结果保存到一个文件
1 | cat objection.log | grep -i HttpURLConnection >> classes.txt |
在该文件 每行行首添加android hooking watch class
(多行编辑)
objection载入APP时,使用-c
参数选定命令文件载入
1 | objection -g com.example.app explore -c "classes.txt" |
可以确定APP的网络请求框架,
之后定位到APP自身的具体方法
- 对混淆后的 okhttp 进行Hook:siyujie/OkHttpLogger-Frida: Frida 实现拦截okhttp的脚本 (github.com)
- r0ysue/r0capture: 安卓应用层抓包通杀脚本 (github.com)
抓包对抗 ¶
- SSL Pinning,又称证书绑定,可以说是客户端校验服务器的进阶版:该种方式不仅校验服务器证书是否是系统中的可信凭证,在通信过程中甚至连系统内置的证书都不信任而只信任App指定的证书。一旦发现服务器证书为非指定证书即停止通信,最终导致即使将Charles证书安装到系统信任凭据中也无法生效。
- 服务器校验客户端(双向校验):这种方式发生在HTTPS验证身份阶段,服务器在接收到客户端的公钥后,在发送session key之前先对客户端的公钥进行验证,如果不是信任的证书公钥,服务器就中止和客户端的通信。
SSL Pinning Bypass ¶
证书绑定校验(客户端校验证书)
对于Android APP来说通常有两种方式:
- 客户端持有证书公钥hash
- 客户端持有证书文件
校验分为两种方式:
- 代码校验
- 配置校验:
res/xml/network_security_config.xml
判断 ¶
抓包报错
1 | Client closed the connection before a request was made. Possibly the SSL certificate was rejected. |
定位:objection HOOKJava.io.File.\$init
,查看是否有参数为/system/etc/security/cacerts
绕过 ¶
Objection ¶
objection提供命令来实现SSL Pinning Bypass
1 | android sslpinning disable |
DroidSSLUnpinning ¶
WooyunDota/DroidSSLUnpinning: Android certificate pinning disable tools (github.com)
JustTrustMe ¶
JustTrustMePlush ¶
HOOK抓包 ¶
- siyujie/OkHttpLogger-Frida: Frida 实现拦截okhttp的脚本 (github.com)
- BigFaceCat2017/frida_ssl_logger: ssl_logger based on frida (github.com)
- r0ysue/r0capture: 安卓应用层抓包通杀脚本 (github.com)
服务器校验客户端证书 ¶
判断 ¶
1 | 400 No required SSL certificate was sent |
绕过 ¶
逆向分析代码 或 Frida hook获取证书密钥
KeyStore Explorer (keystore-explorer.org) 转换证书格式
将App中内置的证书导入抓包软件(charles或Burp)中,使得服务端认为自己仍旧是在与其信任的客户端进行通信,最终达到欺骗服务器的作用。