前言
本文結(jié)合多篇已有文章,基于iptables + redsocks2 + Charles
,最終實(shí)現(xiàn)對(duì)安卓上特定APP進(jìn)行抓包,且APP無(wú)感知
即APP不能通過(guò)檢查系統(tǒng)代理或者VPN來(lái)判斷是不是有抓包行為
步驟
首先先保存開(kāi)機(jī)后的iptables,如果已經(jīng)修改過(guò),請(qǐng)重啟手機(jī)
iptables-save > /data/local/tmp/iptables.rules
要恢復(fù)iptables為之前的規(guī)則,則使用如下命令,或者重啟手機(jī)
iptables-restore /data/local/tmp/iptables.rules
使用如下命令,作用是:將uid
為10428
所請(qǐng)求的在0-65535
端口上的tcp
流量,轉(zhuǎn)發(fā)到127.0.0.1:16666
,但是排除了來(lái)自127.0.0.1
的請(qǐng)求
參考: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
要實(shí)現(xiàn)抓包,其中127.0.0.1:16666
是一個(gè)透明代理的地址
然而根據(jù)已有文章可知,如果直接設(shè)置為Charles的透明代理地址,對(duì)于https將會(huì)出現(xiàn)invalid first line in request
錯(cuò)誤,只有http的請(qǐng)求數(shù)據(jù)會(huì)被正常解析
參考:利用 Redsocks 解決透明代理的遠(yuǎn)程抓包問(wèn)題
根據(jù)文章可知,借助redsocks
進(jìn)行轉(zhuǎn)發(fā)即可
我這里使用的是redsocks2,編譯參考:靜態(tài)交叉編譯 Android 的 redsocks2
這里直接使用編譯好的即可,也可以考慮自己編譯下,下載后解壓壓縮包
-
https://fh0.github.io/assets/android-redsocks2.tgz
創(chuàng)建配置文件,名為redsocks.conf
,內(nèi)容如下:
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的代理地址,更多詳細(xì)用法請(qǐng)查閱redsocks2
的readme
注意配置文件的每一對(duì){}
后面都應(yīng)該有一個(gè)空行,否則會(huì)提示unclosed section
現(xiàn)在把redsocks.conf
和redsocks2_arm64
推送到/data/local/tmp
然后在root用戶(hù)下運(yùn)行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
現(xiàn)在不出意外的話,Charles應(yīng)該就能看到uid
為10428
所對(duì)應(yīng)APP的全部tcp
數(shù)據(jù)包了(除去來(lái)自127.0.0.1的請(qǐng)求)
如果是只想對(duì)特定端口抓包,那么應(yīng)該使用-m multiport --dports 80,443
這樣來(lái)限定一個(gè)或者多個(gè)端口
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
總結(jié)
-
使用
iptables
將來(lái)自特定uid的全部tcp流量轉(zhuǎn)到指定的透明代理上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
將流量轉(zhuǎn)發(fā)到正向代理,如Charles的socks5代理
redsocks2_arm64下載地址如下
https://fh0.github.io/assets/android-redsocks2.tgz
redsocks.conf內(nèi)容如下
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;
}
其他補(bǔ)充:
-
安裝Charles證書(shū)到系統(tǒng)分區(qū),Charles才能解密https
如果你發(fā)現(xiàn)了文章中的錯(cuò)誤,請(qǐng)指出
效果
審核編輯 :李倩
-
Android
+關(guān)注
關(guān)注
12文章
3908瀏覽量
126917 -
APP
+關(guān)注
關(guān)注
33文章
1562瀏覽量
72273 -
VPN
+關(guān)注
關(guān)注
4文章
288瀏覽量
29598
原文標(biāo)題:Android上基于透明代理對(duì)特定APP抓包技巧
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論