NSSCTF MOBILE [SWPU 2019] easyapp の詳細なソリューション

I.はじめに

  1. トピックアドレス: [SWPU 2019]easyapp
  2. 兄貴の問題解決策[SWPU 2019] easyapp pwjcw の WriteUp
    兄貴の問題解決策は非常にシンプルで、フックすることで戻り値を直接見ることができますが、長い間読んでもどのツールを使用してそれを行うのか理解できませんでした。
    他の問題解決法を見ると、soファイルを解析して答えを得るということになっているのですが、関数呼び出しの処理がまだ分かりませんでしたので、その後「Android Frida Reverse and Packet Capture 実戦 (Chen Jialin)」を勉強して
    、フッキングにfridaとobjectionを使用したことは知っていますが、
    それでも再現できませんでした。ここではAndroidのバージョンが原因であると推測されています。問題、低いバージョン(Android 7)では再現に成功しましたが、Android 9以降では失敗します

アプリの対象AndroidバージョンはAndroid 10(sdk29)ですが、Thunderboltエミュレータ(Android 9 x86_64)と実機Redmi Note7(Android 10 arm64)を使用しましたが、各バージョンに対応したSDKをフックできませんでした。 Android は大手企業のソリューションと同様に成功しています。
画像の説明を追加してください

2. Android SDKをインストールする

このステップは主に adb (Android Debug Bridge) ツールを入手するためのものです。
ここでSDK プラットフォーム ツールのバージョンの説明を直接ダウンロードできます。AndroidStudio
をインストールし、SDK を環境変数に設定することをお勧めします。ここでは詳細は説明しません。

3. Android エミュレータをインストールします (Yeshen エミュレータを推奨します)

公式ウェブサイト: Yeshen Simulator
注意: adb が Android 仮想マシンを見つけられないという問題が発生する可能性があります。
最初にエミュレータ パス \Nox\bin\ にある nox_adb.exe と adb.exe のバージョンを確認してください。 Android SDK の adb バージョン。SDK の adb を直接コピーし、名前を変更して、Yeshen エミュレータの nox_adb.exe と adb.exe を置き換えます。adb デバイスを使用して、
画像の説明を追加してください
認識されたデバイスを表示できます。
エミュレータを開くと、正常に認識されるはずです。connect
コマンドを使用して接続すると、adb デバッグが使用できるようになります。

Android バージョンの確認: adb shell getprop ro.build.version.release
SDK バージョンの確認: adb shell getprop ro.build.version.sdk
画像の説明を追加してください

4.fridaとobjectionをインストールする

私の学習ノートでは、Android 逆学習の Frida リバースとパケット キャプチャの実践学習ノートを簡単に紹介しています (継続的に更新されています)が、詳細が十分ではないため、今後も引き続き補足および改善されます
。この偉人の記事によると、frida のインストールと設定のチュートリアルでは、
anaconda の使用を推奨しています Python のバージョンを管理し、複数のデバイスの操作を容易にするために、frida のバージョンごとに別の環境を作成しますanaconda のインストールと使用に関する
インストール チュートリアル(こちらを参照してください) Python 環境の管理に関する記事)

5. 問題解決のプロセス

この質問はネイティブ層の Encrypt 関数を呼び出して比較するため、Encrypt 関数をフックして比較に使用される文字列を直接取得してみることができます。
ここに画像の説明を挿入

  1. フリーダサーバーを起動します
adb shell
su
cd data/local/tmp					
./frida-server-12.8.0-android-x86	

起動後、コマンドラインがここで止まってしまいますので、閉じないように注意し、別のcmdウィンドウを開いて操作します。 2.objection1.8.4環境(frida=
ここに画像の説明を挿入
12.8.0 frida-tools=5.4.0 python=3.7.0)に切り替えます。 16)

conda activate objection1.8.4
frida version

ここに画像の説明を挿入
3. 異議の注入

objection -g com.example.ndktest2 explore

Objection は自動的にアプリを検索し、注入を開始します。
ここに画像の説明を挿入
4. フック関数

android hooking watch class_method com.example.ndktest2.MainActivity.Encrypt --dump-args --dump-backtrace --dump-return

ここに画像の説明を挿入
フックの後、アプリの入力ボックスに何かを入力し、クリックしてログインします。オブジェクションは戻り値YouaretheB3ST
ここに画像の説明を挿入
をフックに返します。 YouaretheB3ST と入力するとログインに成功します。
ここに画像の説明を挿入

6. まとめ

この疑問は 1 か月以上経ってようやく解決しました。単純な疑問ですが、答えを得るのは簡単ではありません。Android の
逆学習への道のりは長く、もっと学び、まとめ、実践する必要があります。
陳嘉林氏による「Android Frida Reverse and Grasp」を学ぶことを強くお勧めします。 パッケージの実戦

おすすめ

転載: blog.csdn.net/OrientalGlass/article/details/131324464