簡単な説明
iptables を使用して携帯電話のすべての TCP トラフィックを指定された透過プロキシに転送し、
次に redsocks を使用してトラフィックを Charles の Socks5 プロキシなどのフォワード プロキシに転送します。
iptables + redsocks2 + Charles に基づいて、Android APP は最終的にパケットをキャプチャするように実現されますが、APP は認識できません
。つまり、APP はシステム プロキシまたは VPN をチェックすることによってパケット キャプチャ動作があるかどうかを判断できません。
準備
ルート化された Android スマートフォン 1 台、コンピューター 1 台
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:8080";
relay = "192.168.0.132:7777";
type = socks5;
autoproxy = 0;
timeout = 10;
}
このうち、bind は透過プロキシ アドレス、relay は Charles のプロキシ アドレスです。
端末 adb シェルを開いて電話に接続します
- 既存の iptables ルールを保存する
iptables-save > /data/local/tmp/iptables.rules
- ルールを復元したい場合は、電話機を再起動するか、次のように入力する必要があります。
iptables-restore /data/local/tmp/iptables.rules
- ファイルをアップロードして透過プロキシを有効にする
adb push redsocks2_arm64 /data/local/tmp/redsocks
adb shell chmod +x /data/local/tmp/redsocks
adb shell
su
cd /data/local/tmp
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:8080
./redsocks
- Charles は Socks5 プロキシ ポート 7777 を設定します
指定ポート、アプリ
上記の手順が完了すると、認識されずにアプリをキャプチャするという目標が達成されます。
グローバル トラフィックがプロキシを通過したくない場合は、
- 指定ポート
実際には上に書いてあります。現在は指定ポート 80、443 です。0 ~ 65535 を指定することもできます。これを --dports 0:65535 に変更するだけです。 - アプリが
最初にアプリの uid を見つける必要があることを指定します
まず APP を開き、ps -ef コマンドを使用してアプリケーション パッケージ名の行を見つけます。最初の列は uid です。通常は
u0_a428 のようなものが表示されます。その後、次のコマンドを実行します。uid 関連は u0_a428 として記述できます。 10428 と書き込み
、コマンドを次のように置き換えます。
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dports 80,443 -j DNAT --to-destination 127.0.0.1:8080
参考
https://blog.seeflower.dev/archives/207/
https://mp.weixin.qq.com/s/P0ESUUXBmq2aQnrqDHsDaw
https://blog.mythsman.com/post/62791fb4b5467000017d5c6e/