一. 安装mitmproxy
1. 安装python3-venv
apt install python3-venv
2. 获取源代码
git clone https://github.com/mitmproxy/mitmproxy.git cd mitmproxy ./dev.sh
3. 激活python3虚拟环境,并执行
. venv/bin/activate mitmdump
二. 上传证书到 手机
1. 运行mitmproxy后,会自动在 ~/.mitmproxy 目录下生成证书:
mitmproxy-ca.pem 证书和私钥
mitmproxy-ca-cert.pem PEM格式的证书
mitmproxy-ca-cert.cer 跟PEM格式的证书完全一样,只是扩展名不同
2.制作一个Android兼容的证书
2.1 获得mitmproxy证书的hash值
openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1
会显示 hash值为 c8750f0d
注意,要用 -subject_hash_old 选项,而不是 -subject_hash 这样才会得到 openssl 0.9 兼容的hash值
2.2 android证书文件名 以.0结尾
cat mitmproxy-ca-cert.pem > c8750f0d.0 openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -noout >> c8750f0d.0
一步到位
hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0
3. 将证书放入 /system/etc/security/cacerts/
adb push c8750f0d.0 /data/local/tmp/ adb shell su # mount -o remount,rw /system # setenforce 0 # mv /data/local/tmp/c8750f0d.0 /system/etc/security/cacerts/ # chmod 644 /system/etc/security/cacerts/c8750f0d.0 # chown root:root /system/etc/security/cacerts/c8750f0d.0 # setenforce 1 # mount -o remount,ro /system
如果是用Magisk来root的,上述命令中有些应该适当修改
mount -o remount,rw /sbin/.magisk/mirror/system_root
三.让手机通过usb上网
1. 手机开启无线数据,或者开启wifi
2. 手机开启usb共享,PC上启用usb网卡
3. PC上启用有线连接
ip addr add 192.168.1.158/24 dev eno1 ip route add default via 192.168.1.1 dev eno1 ip route del default via 192.168.42.129
4. 在手机上给usb网卡重新分配ip
ip addr del 192.168.42.129/24 dev rndis0 ip addr add 10.42.0.2/24 dev rndis0
5. 手机上 修改路由表 (rmnet_data3根据实际情况修改)
ip route add 10.42.0.0/24 dev rndis0 table rmnet_data3 ip route delete default table rmnet_data3 ip route add default via 10.42.0.1 table rmnet_data3 ip -6 route del default table rmnet_data3
6. PC上开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -j MASQUERADE iptables -t nat -n -L
7. PC上给usb网卡重新分配地址
ip addr del 192.168.42.140/24 dev usb0 ip addr add 10.42.0.1/24 dev usb0
8. 在手机上检测
ping 10.42.0.1
9. 手机上设置私人DNS
四. PC上配置mitmproxy环境
1. 将80和443端口的流量都重定向给 mitmproxy
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080
2.透明模式启动mitmproxy
mitmproxy --mode transparent --showhost
五. 用frida解除 ssl pinning
frida -U -f com.sinovatech.unicom.ui -l ../ssl.js --no-pause