針對安裝證書后無法抓包的情況,將證書添加到系統路徑,使其成為系統信任憑證可解決:
設備要求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 功能,即可對接口請求,返回進行自定義配置