この記事は、携帯電話の秘宝のパケット キャプチャ プロセスを記録します。
携帯電話: Pixel 6
システム: アンドロイド 12
フリーダバージョン:15.2.2
ソフトウェア: アバオ 10.17.0
まず、Postern を使用してネットワーク プロキシを開き、Charles を使用してコンピュータ上のパケットをキャプチャしようとしますが、ネットワークがクラッシュしたことを示すメッセージが表示されます。
次に、特定の宝物に証明書、つまりSSLピンニングをバインドし、インターネット上でSSLピンニングをバイパスするスクリプトをコピーすることができます(https://github.com/httptoolkit/frida-android-unpinning)。
スクリプトを実行すると、ページは正常に表示されましたが、charles にキャプチャされたパッケージは数個だけで、これは明らかに異常です。次に、パッケージを送信するためのインターフェイスを見つけるために逆解析プログラムが必要です。
まず、jadx-gui で Request をグローバルに検索し、次のクラスを見つけます。
見た目が少し似ているので、 anet.channel.request.Request クラスから始めます。このクラスには多くのメソッドがあります。このクラスをトレースするには r0trace を直接使用します。
トレース結果からランダムに関数を見つけてそのコールスタックを解析してみると、下図のマークのメソッドが注目に値すると思います。
jadx-gui でメソッドを表示します。asyncSend メソッドの最初のパラメーターにはリクエスト ヘッダーとリクエスト本文が含まれています。このメソッドは重要ではありません。重要なのは、メソッドが属する DegradableNetwork クラスです。中国語に翻訳されたクラス名は次のとおりです。分解可能なネットワーク
構築メソッドをクリックすると、その実装が表示されます。このクラスは NetworkProxy クラスから継承されます。その構築メソッドは親クラスの構築メソッドを呼び出すだけで、2 番目のパラメータは 1 です。
具体的なロジックはNetworkProxyにあるようですが、このクラスの構築メソッドを見てみましょう
コードの観点から見ると、2 番目のパラメータで型が決まります。このコンストラクタの相互参照を見てみましょう。
只有两个类引用了NetworkProxy的构造方法,其中DegradableNetwork我们已经看过了,它传入的第二个参数是1,下面来看看HttpNetwork,其实看名字也可以看出来一些信息,HttpNetwork类是个http协议相关的,那么DegradableNetwork也就意味着是另一种协议,这可能就是Charles抓不到包的原因。
HttpNetwork类的构造方法调用NetworkProxy的构造方法时,传入的第二个参数是0。
综合以上的信息,我们可以提出一种假设:如果hook了DegradableNetwork类的构造方法,让其在调用父类的构造方法时,第一个参数由1改为0,那么走的就是Http协议了。frida脚本如下:
运行脚本后刷新界面,使charles抓一些包,抓包效果是很好的,图片以及文字都抓到了