<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    實戰|安卓上基于透明代理對特定APP抓包技巧

    VSole2023-02-23 14:10:50

    前言

    本文結合多篇已有文章,基于iptables + redsocks2 + Charles,最終實現對安卓上特定APP進行抓包,且APP無感知

    即APP不能通過檢查系統代理或者VPN來判斷是不是有抓包行為

    步驟

    首先先保存開機后的iptables,如果已經修改過,請重啟手機


    iptables-save > /data/local/tmp/iptables.rules
    

    要恢復iptables為之前的規則,則使用如下命令,或者重啟手機


    iptables-restore /data/local/tmp/iptables.rules
    

    使用如下命令,作用是:將uid10428所請求的在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.confredsocks2_arm64推送到/data/local/tmp

    然后在root用戶下運行redsocks2_arm64即可


    adb push redsocks2_arm64 /data/local/tmp/redsocksadb shell chmod +x /data/local/tmp/redsocksadb shellsucd /data/local/tmp./redsocks
    

    現在不出意外的話,Charles應該就能看到uid10428所對應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
    

    總結

    1. 使用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

    如果你發現了文章中的錯誤,請指出

    效果

    iptables透明代理
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    使用如下命令,作用是:將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. redsocks { bind = "127.0.0.1:16666"; relay = "192.168.1.14:8889"; type = socks5; autoproxy = 0; timeout = 13;}
    虛擬機和Gateway都運行在虛擬機中,虛擬機器將默認網關設置為GateWay。最終目標是,將HostOnly的所有網絡流量,都通過代理的形式,發送到遠程服務器。透明代理配置主要有兩種配置方法,分別是通過wireguard配置和x2ray。
    一旦發現服務器證書為非指定證書即停止通信,最終導致即使將抓包工具的證書安裝到系統信任憑據中也無法生效。fridafrida是一款輕量級的hook框架,專業點的說法就是動態插樁工具,可以插入一些代碼到原生App的內存空間去動態地監視和修改其行為。該框架從Java層Hook到Native層Hook無所不能,但是持久化還是要依靠Xposed框架,另外由于其過于火爆,一些廠商也研究了反調試的方法。ObjectionObjection是基于frida的集成工具,其主要功能支持Android和iOS兩大移動平臺。
    iptable使用詳解
    2022-12-09 09:10:52
    而放入內核的地方必須要是特定的位置,必須是tcp/ip的協議棧經過的地方。這五個位置被稱為五個鉤子函數,也叫五個規則鏈。這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。為了讓這些功能交替工作,制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。
    NAT穿透是如何工作的
    2022-08-11 06:32:23
    整個過程對雙方透明。本文接下來都將關注在 UDP 上。對收發包的 socket 有直接控制權。例如,從經驗上來說,無法基于某個現有的網絡庫實現 NAT 穿透,因為我們 必須在使用的“主要”協議之外,發送和接收額外的數據包。某些協議將 NAT 穿透與其他部分緊密集成。
    隨后Gartner于2019年提出安全訪問服務邊緣,將零信任網絡訪問 作為核心組件之一,進一步的讓所有企業相信并擁抱零信任。基于路由模式的方案通常采用開源的TUN或TAP驅動,整體實現難度較低。Packet Filter方案實現難度相對路由模式要更高些,這也可能是初創公司沒有廣泛使用此方案的原因。
    美國聯邦調查局(FBI)、美國國家安全局(NSA)、美國網絡司令部和國際合作伙伴發布了聯合網絡安全咨詢,警告俄羅斯國家支持的網絡行為者使用受損的Ubiquiti EdgeRouter進行惡意網絡操作。
    iptables常用命令總結
    2023-04-18 10:08:25
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT:允許通過 SSH 連接進入系統,前提是 SSH 服務已經開啟并監聽在 22 端口上。iptables -D INPUT 2:刪除 INPUT 鏈中的第二條規則。iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT:限制 HTTP 流量,最多允許 10 個并發連接,超過限制則拒絕連接。確保自己已經備份了原始的 iptables 配置,以防止在操作過程中出現意外情況,導致系統無法訪問網絡。避免在 iptables 中使用 ACCEPT 命令,因為 ACCEPT 會接受所有的數據包,包括惡意數據包,容易被攻擊者利用。
    你加密的壓縮包比你想象中的還不安全! 哪怕對于信息安全人員來說,很多時候給壓縮包加上一個密碼就以為的是萬事大吉了。但事實是,很多情況下,你的加密壓縮包,遠遠沒有你想象的安全。
    ?iptables由上而下,由Tables,Chains,Rules組成
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类