针对安装证书后无法抓包的情况,将证书添加到系统路径,使其成为系统信任凭证可解决:
设备要求userdebug获取超级权限:
adb disable-verity
adb reboot
adb root
adb remount
pc端需要配置openssl
进入openssl的安装目录,执行start.bat
输入命令 openssl x509 -subject_hash_old -in 证书文件路径
将证书更名为 哈希值.0
将更名后的证书导入系统路径:
adb push 证书路径 /system/etc/security/cacerts/
进入系统设置查看:adb shell am start -a android.settings.SECURITY_SETTINGS
安装配置好后,实际使用过程中,还是会遇到一些问题,如:抓取的https请求,接口返回都显示为unknown,app很多请求不走代理,无论怎么配置都无法抓到请求
为了解决上面的问题,可以使用iptables 进行请求转发,将请求转发到代理服务器上
② 查看需要转发请求的app uuid
ps -ef | grep 包名
③ 将所有应用u0_aXX的请求到端口0-65535的请求,转发到透明代理 127.0.0.1:16666 上
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner u0_aXX --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
需要指定端口可以用 -m multiport --dports 80,443 这样来限定一个或者多个端口
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner u0_aXX -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:16666
④ 使用redsocks将流量转发到正向代理(charles)
修改redsocks配置文件
修改配置文件redsocks.conf,内容如下:
base {
log_debug = off;
log_info = on;
log = stderr;
daemon = off;
redirector = iptables;
}
redsocks {
bind = "127.0.0.1:16666";
relay = "代理主机地址:8889";
type = socks5;
autoproxy = 0;
timeout = 13;
}
redsoks 里面,bind为透明代理地址及端口;relay为正向代理(charles)地址及端口,注意配置文件的每一对{}后面都应该有一个空行,否则会报错;
将解压文件夹里的 redsocks、redsocks.conf上传到机器里面,并执行redsocks;使用如下命令
adb push redsocks /data/local/tmp/redsocks adb push redsocks.conf /data/local/tmp/redsocks.conf adb shell chmod +x /data/local/tmp/redsocks adb shell chmod +x /data/local/tmp/redsocks.conf adb shell su cd /data/local/tmp ./redsocks
⑤查看chales上的抓包结果,并通过charles的breakepoint 和 maplocal 功能,即可对接口请求,返回进行自定义配置