前言
本文結合多篇已有文章,基于iptables + redsocks2 + Charles
,最終實現對安卓上特定APP進行抓包,且APP無感知
即APP不能通過檢查系統代理或者VPN來判斷是不是有抓包行為
步驟
首先先保存開機后的iptables,如果已經修改過,請重啟手機
iptables-save > /data/local/tmp/iptables.rules
要恢復iptables為之前的規則,則使用如下命令,或者重啟手機
iptables-restore /data/local/tmp/iptables.rules
使用如下命令,作用是:將uid
為10428
所請求的在0-65535
端口上的tcp
流量,轉發到127.0.0.1:16666
,但是排除了來自127.0.0.1
的請求
參考:iptables 在 Android 抓包中的妙用
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
要實現抓包,其中127.0.0.1:16666
是一個透明代理的地址
然而根據已有文章可知,如果直接設置為Charles的透明代理地址,對于https將會出現invalid first line in request
錯誤,只有http的請求數據會被正常解析
參考:利用 Redsocks 解決透明代理的遠程抓包問題
根據文章可知,借助redsocks
進行轉發即可
我這里使用的是redsocks2,編譯參考:靜態交叉編譯 Android 的 redsocks2
這里直接使用編譯好的即可,也可以考慮自己編譯下,下載后解壓壓縮包
-
https://fh0.github.io/assets/android-redsocks2.tgz
創建配置文件,名為redsocks.conf
,內容如下:
base {
log_debug = off;
log_info = on;
log = stderr;
daemon = off;
redirector = iptables;
}
redsocks {
bind = "127.0.0.1:16666";
relay = "192.168.1.14:8889";
type = socks5;
autoproxy = 0;
timeout = 13;
}
其中bind
就是透明代理地址,relay
就是Charles的代理地址,更多詳細用法請查閱redsocks2
的readme
注意配置文件的每一對{}
后面都應該有一個空行,否則會提示unclosed section
現在把redsocks.conf
和redsocks2_arm64
推送到/data/local/tmp
然后在root用戶下運行redsocks2_arm64
即可
adb push redsocks2_arm64 /data/local/tmp/redsocks
adb shell chmod +x /data/local/tmp/redsocks
adb shell
su
cd /data/local/tmp
./redsocks
現在不出意外的話,Charles應該就能看到uid
為10428
所對應APP的全部tcp
數據包了(除去來自127.0.0.1的請求)
如果是只想對特定端口抓包,那么應該使用-m multiport --dports 80,443
這樣來限定一個或者多個端口
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:16666
總結
-
使用
iptables
將來自特定uid的全部tcp流量轉到指定的透明代理上iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
2. 使用redsocks
將流量轉發到正向代理,如Charles的socks5代理
redsocks2_arm64下載地址如下
https://fh0.github.io/assets/android-redsocks2.tgz
redsocks.conf內容如下
base {
log_debug = off;
log_info = on;
log = stderr;
daemon = off;
redirector = iptables;
}
redsocks {
bind = "127.0.0.1:16666";
relay = "192.168.1.14:8889";
type = socks5;
autoproxy = 0;
timeout = 13;
}
其他補充:
-
安裝Charles證書到系統分區,Charles才能解密https
如果你發現了文章中的錯誤,請指出
效果
審核編輯 :李倩
-
Android
+關注
關注
12文章
3935瀏覽量
127349 -
APP
+關注
關注
33文章
1573瀏覽量
72444 -
VPN
+關注
關注
4文章
291瀏覽量
29704
原文標題:Android上基于透明代理對特定APP抓包技巧
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論