BurpSuite抓包 burp安装: 可以参考国光大佬的文章BurpSuite Pro 2020.11.3 For Windows macOS 下如何优雅的使用 Burp Suite (2020.11.3)
设置代理: burp拦截禁用先关掉 打开burpsuite-proxy-options-add 添加代理 先ifconfig查看ip地址 在burp中找到对应的ip 手机设置 连接wifi 长按修改网络-高级选项-代理-手动 配置主机名 端口 主机名填写 配置后浏览器访问http://ip111.cn/ 然后看burp上是否有ip111的抓包记录 有的话就代表配置成功
证书安装: 导出证书 Proxy-Options-导出CA证书
传输证书到手机上
1 adb push cacert.cer /sdcard/Download
安装证书 以我的手机Pixel为例,选择设置-安全性和位置信息-加密与凭据-从存储设备安装-选择证书 填写证书名称 提示已安装 就安装成功了 返回选择信任的凭据-用户 有PortSwigger就代表证书安装成功了
android7.0以后安装证书 导出后的证书der转pem格式
1 openssl x509 -inform DER -in cacert.der -out cacert.pem
然后adb push到/sdcard/Download文件夹下,然后设置→安全性和位置信息→加密与凭据→从存储设备安装,选择pem证书 拷贝证书到系统证书目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 adb shell su cd /data/misc/user/0/cacerts-added ls 9a5ba575.0 mount -o remount,rw / cp * /etc/security/cacerts/ mount -o remount,ro / 查看 cd /etc/security/cacerts ls -alit total 1036 710 drwxr-xr-x 2 root root 4096 2021-03-02 14:16 . 2568 -rw-r--r-- 1 root root 973 2021-03-02 14:16 9a5ba575.0
重启后查看系统证书列表是否存在burp的证书 打开浏览器测试抓包
如果用了magisk框架可以使用magisk movecert插件 移动证书 android ssl证书插件https://github.com/Magisk-Modules-Repo/movecert (另外一个插件https://github.com/NVISO-BE/MagiskTrustUserCerts )
burpsuie导入客户端证书 User options -> SSL -> Client SSL Certificate
Charles抓包 如果抓不到包的情况下 反安卓防抓包–no_proxyAndroid 禁止代理抓包
Burp Suite只能对HTTP,HTTPS,websocket进行抓包。如果当APP使用了socket端口进行通信也可以使用postern+charles进行抓包 Postern:https://github.com/postern-overwal/postern-stuff Charles:https://www.charlesproxy.com/ Charles 在线破解工具https://www.zzzmode.com/mytools/charles/ https://www.charlesproxy.com/download/
Charles抓包配置HTTP Proxy-Proxy Settings-Port 默认8888 ifconfig查看本机ip 手机配置 设置-WLAN-修改网络 浏览器访问http://ip111.cn 查看charles是否有抓到的包HTTPS 在上面两步的基础上,你需要为charles添加SSL Proxiyng。具体的步骤是:Proxy - SSL Proxiyng Settings -勾选“Enable SSL Proxying”,并点击下方的Add,你可以这样配置: host是你要抓的域名或者ip(这里用通配符*
,表示抓去所有的https请求),port为443。 下载手机的SSL证书。charles里点击help -SSL Proxying-Save Charles Root Certificate,然后选择目录,保存一个类似于这样的“charles-ssl-proxying-certificate.pem”文件 3)给手机安装证书:
1 adb push charles-ssl-proxying-certificate.pem /sdcard/Download/charles.pem
打开手机设置 -更多设置 -系统安全 -从存储设备安装 -选择charles.pem,点击安装 测试访问https://www.baidu.com 尝试访问 已经可以看到请求包 访问爱奇艺app会提示 Connection established 说明证书不被信任 拷贝证书到系统证书目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 adb shell su cd /data/misc/user/0/cacerts-added ls 9a5ba575.0 af5d8655.0 mount -o remount,rw / cp * /etc/security/cacerts/ mount -o remount,ro / 查看 cd /etc/security/cacerts ls -alit total 1036 710 drwxr-xr-x 2 root root 4096 2021-03-02 14:16 . 2568 -rw-r--r-- 1 root root 973 2021-03-02 14:16 9a5ba575.0
打开爱奇艺app-登录注册-获取验证码SOCKS Proxy-Proxy Settings-勾选Enable SOCKS proxy Postern设置 配置代理 配置规则 打开VPN测试抓包效果,要不wifi代理设置先关掉 选择allowCharles流量转发到BurpSuite Charles设置:Proxy-External Proxy Settings-勾选Use external proxy servers-勾选Secure Web Proxy Secure Web Proxy Server填写127.0.0.1:8080 Burp Suite设置: Proxy-Options勾选127.0.0.1:8080
自签名证书校验 启动frida
1 2 cd /data/local/tmp ./frida-server
找证书文件 解包后查找证书文件 一般查找后缀名为p12的文件
1 2 tree -NCfhl |grep -i p12 find . -name "*.p12"
找证书密码 使用肉丝大佬万能脚本实用FRIDA进阶:内存漫游、hook anywhere、抓包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function hook_KeyStore_load() { Java.perform(function () { var StringClass = Java.use("java.lang.String"); var KeyStore = Java.use("java.security.KeyStore"); KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) { printStack("KeyStore.load1"); console.log("KeyStore.load1:", arg0); this.load(arg0); }; KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) { printStack("KeyStore.load2"); console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null); this.load(arg0, arg1); }; console.log("hook_KeyStore_load..."); }); }
执行脚本
1 2 3 4 5 6 7 8 9 获取包名 frida-ps -U|grep -i xx 执行脚本 frida -U -f com.xx.xx --no-pause -l xx.js 导出证书 adb shell cd /sdcard/Download mv android.content.res.AssetManager\$AssetInputStream@82749d9.p12 soul.p12 adb pull /sdcard/Download/soul.p12
可以看到证书密码已经暴露出来了
charles导入证书 导入证书后所有的请求都是使用该证书进行访问的建议抓完包去除
Charles设置: Proxy-SSL Proxying Settings-Client Certificates 导入证书-输入密码-ip和端口都填* 或者填写对应的ip和端口 尝试抓包
sxxl 抓包提示网络错误 脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 //打印自签名证书 function hook_KeyStore_load2(){ Java.perform(function() { var ByteString = Java.use("com.android.okhttp.okio.ByteString"); var myArray=new Array(1024); var i = 0; for(i=0;i<myArray.length;i++){ myArray[i]=0x0; } var buffer = Java.array('byte',myArray); var StringClass = Java.use("java.lang.String"); var KeyStore = Java.use("java.security.KeyStore"); KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) { console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); console.log("KeyStore.load1:", arg0); this.load(arg0); }; KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) { console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null); if (arg0){ var file = Java.use("java.io.File").$new("/sdcard/Download/"+ String(arg0)+".p12"); var out = Java.use("java.io.FileOutputStream").$new(file); var r; while( (r = arg0.read(buffer)) > 0){ out.write(buffer,0,r) } console.log("save success!") out.close() } this.load(arg0, arg1); }; console.log("hook_KeyStore_load..."); }); } function hook_ssl() { Java.perform(function() { var ClassName = "com.android.org.conscrypt.Platform"; var Platform = Java.use(ClassName); var targetMethod = "checkServerTrusted"; var len = Platform[targetMethod].overloads.length; console.log(len); for(var i = 0; i < len; ++i) { Platform[targetMethod].overloads[i].implementation = function () { console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments); //printStack(ClassName + "." + targetMethod); } } }); } function printStack(str_tag) { var Exception= Java.use("java.lang.Exception"); var ins = Exception.$new("Exception"); var straces = ins.getStackTrace(); if (undefined == straces || null == straces) { return; } console.log("==" + str_tag + " Stack strat ==="); console.log(""); for (var i = 0; i < straces.length; i++) { var str = " " + straces[i].toString(); console.log(str); } console.log(""); console.log("===" + str_tag + " Stack end ===\r\n"); Exception.$dispose(); } function main(){ hook_KeyStore_load2(); } setImmediate(main)
1 2 3 4 5 查找包名 pm -l |grep -i soul package:cn.soulapp.android 执行脚本 frida -U -f cn.soulapp.android --no-pause -l xx.js
已经获取成功了,把证书导入charles抓包 已经可以抓到包了
统一xx查询 https://ss.cods.org.cn/mobile/download 双向证书校验 使用脚本获取证书和密码 已经获取到证书 导入证书到charles 发现还无法抓到包sslpinning了
sslpinning 使用objection
1 objection -g com.xx.xx explore -s " android sslpinning disable"
或者脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function hook_ssl() { Java.perform(function() { var ClassName = "com.android.org.conscrypt.Platform"; var Platform = Java.use(ClassName); var targetMethod = "checkServerTrusted"; var len = Platform[targetMethod].overloads.length; console.log(len); for(var i = 0; i < len; ++i) { Platform[targetMethod].overloads[i].implementation = function () { console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments); //printStack(ClassName + "." + targetMethod); } } }); }
使用大佬的脚本进行hook ssl
1 2 3 4 5 6 7 function main(){ hook_ssl(); } setImmediate(main) frida -U -f com.ninemax.ncsearchnew --no-pause -l xx.js
已经可以抓到包了
抓包其他工具: ClashForAndroidhttps://github.com/Kr328/ClashForAndroid/releases brookhttps://github.com/txthinking/brook/releases/tag/v20210214 HttpCanaryhttps://httpcanary.com/zh-hans/install.html 安卓应用层抓包通杀脚本https://github.com/r0ysue/r0capture
tcpdump Tcpdump+wireshark tcpdump是linux下的抓包工具,在android中没有,需要下载对应的工具。 下载地址:https://www.androidtcpdump.com/android-tcpdump/downloads 然后通过adb放到对应的目录: adb push tcpdump /data/local/ tcpdump -i any -p -vv -s 0 -w capture.pcap 抓到的包到wireshark中查看
LINKS 实用FRIDA进阶:内存漫游、hook anywhere、抓包 如何全面的抓取手机流量,避免丢失 为你的android App实现自签名的ssl证书(https) Frida 学习笔记 自动定位webview中的SLL_read和SSL_write 安卓应用层抓包通杀脚本发布!
Android Https抓包实践
Author:
tea9
Permalink:
http://tea9.github.io/post/2081828674.html
License:
Copyright (c) 2017-2025 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY ?