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_proxy
Android 禁止代理抓包

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代理设置先关掉
选择allow

Charles流量转发到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


已经可以抓到包了

抓包其他工具:
ClashForAndroid
https://github.com/Kr328/ClashForAndroid/releases
brook
https://github.com/txthinking/brook/releases/tag/v20210214
HttpCanary
https://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中查看

实用FRIDA进阶:内存漫游、hook anywhere、抓包
如何全面的抓取手机流量,避免丢失
为你的android App实现自签名的ssl证书(https)
Frida 学习笔记
自动定位webview中的SLL_read和SSL_write
安卓应用层抓包通杀脚本发布!

Android Https抓包实践