Ghidraを使ってiOSアプリケーションをmsgSend分析し

背景

以前「IDA Proを使用したREobjcモジュールがObjective-Cバイナリファイルに逆変換する」という文で、IDA Proを使ってiOSアプリケーションを分析する過程で、Objective-C言語の動的特性のため、ほとんどの方法での呼び出しは、実際の呼出方法名をパラメータとして行うと述べました。相互参照リストには、本来存在すべき参照レコードが多くありません。

DUO LabsのTodd ManningはIDA Proのシナリオを開発して、逆研究者が相互参照の情報をより全面的に取得するのを助けることができます。残念なことに、このスクリプトはx 64プラットフォームにしか向いていませんので、iOSアプリケーションを分析すれば、このツールはシミュレータに対してコンパイルされたアプリケーションパッケージを補完することができます。

今年3月に開催された2019年RSA大会では、米国家安全局(NSA)がGhidraという逆方向工事の枠組みを公開紹介し、デモンストレーションし、Ghidraをオープンソースツールとして一般に公開した。java編纂の特徴であるため、プラットフォームにまたがって使用でき、様々なCPUアーキテクチャをサポートする。Ghidraは、AndroidおよびiOSを含む主流オペレーティングシステムのバイナリファイルを分析することができる。同時に、ユーザーは、オープンなAPIインターフェースを使用して、自分のGhidraプラグインコンポーネントまたはスクリプトを開発することができる。このような機能が強くて、オープンソースの逆方向のツールについても、私たちは最初に日常的な逆方向の作業に使われました。

初歩的な分析

iOSのテストプロジェクトを構築して、真機デバイスを選択してコンパイルして、ARm 64のCPUアーキテクチャをコンパイルして、GhidraとIDA Proにドラッグして分析しています。

私たちはLionというクラスを作って、その中でlionFirst Methodという方法を作りました。そして

View Controller類のmethod 1メソッドでは、「lion lionFirst Method」を使用して呼び出します。また、我々はLionクラスのLionSecondMethodWithArg 1:and Arg 2:方法で同じ方式で呼び出します。これらの方法の呼び出しは、以前の研究によって実際にはすべてオーブjcmumsg Sendで呼び出されていることが分かります。私たちはIDA ProとGhidraにおいて、lionFirst Methodとその交差引用情報を分析したところ、

IDA Proでは、LionSecondMethodWithArg 1:andArg 2:メソッドでの呼び出しのみを解析した。

Ghidraでは、lionSecondMethodwithArg 1:andArg 2:メソッドの呼び出しだけでなく、別のmethod 1での呼び出しも分析した。

これは思わず私達の注意と興味を引き起こしました。分析してみると、Ghidraはテスト工程の大部分の_objcmugSend呼び出しを解析しました。IDA Proは一部だけ解析しました。

目的

逆プロジェクトにとっては、正確で全面的な相互参照情報が特に重要であり、それは私たちがあるキー関数がバイナリファイルで呼び出されているかどうかを分析してくれます。これに基づいて、GhidraでPythonスクリプトを作成して、実際に呼び出されたクラスと方法名を解析するためのすべての方法を分析する研究を開始しました。

まず、私達は_objcmugSendを探し出す必要があります。そして、実行可能なファイルのすべての方法を遍歴して、ARmコマンドを遍歴しています。もしblコマンドがあったら、それがu objcmugSendかどうかを判断します。bl指令が_bjcmumsSendメソッドを呼び出す前に、プロセッサはメモリデータを読み出し、レジスタにクラス、メソッド名、パラメータ情報を書き込みますので、_bjcmumsgSendであれば、アドレスに従って前に向かってldrコマンドを探します。

上記は非常に簡単な例です。ここでは、プログラムはアドレス0 x 1000644で_objcgSendを呼び出しました。ここで実際に起動する方法は「Lion alloc」です。私達は住所によって前に探していますが、0 x 1000628と0 x 1000622 cの両方でldr指令を使ってメモリからデータを読み出してレジスターに書き込みました。アームのABI文書によれば、関数呼び出し時に最初のいくつかのレジスタが関数のパラメータを格納するために使用されることが分かります。したがって、パラメータがない「Lion alloc」にとって、Lionとallocは、「au bjcmugSend関数」の2つのパラメータであり、armコマンドでも分かるように、blコマンドが「au objcmumsSend」を呼び出す前に、指し示すLionとメソッドallocの参照がそれぞれX 0とX 1レジスタに書き込まれています。

ldrコマンドを見つけたら、ldrコマンドの対応する動作数を分析できます。参照に対応するなら、その引用情報を抽出することができます。再帰的にその参照アドレスを追跡することによって、最終的に指す内容を分析することができる。指し示す内容が類名であれば、今回の対応するクラス情報を探しました。指し示す内容がメソッド名であれば、今回の対応方法情報を探しました。これによって、私達はこの_objcmugSendに対応する実際的な方法で呼び出すことができます。

スクリプトを完全にする

スクリプトを作成する過程で、ldrコマンドに対応する操作数は、最終的に指し示す内容が多いことを発見しました。したがって、私たちは分析を開始する前に、まずこの2つのセクションのデータを解析して保存して、アルバJcmumsg Sendを解析する時に、関連するクラス名と方法名に素早く対応できるようにします。

また、Ghidraは初期分析が完了した後、相互参照情報はすでに完備されています。そして、大部分の_objcmugSendコールに対応した分析が完了したコメントが添付されていますので、これらの2つの情報をまとめて分析し、分析結果を支援することができます。

スクリプトの作成が完了すると、スクリプトによって解析された名前と方法名がGhidra分析の類名と方法名と一致することが分かります。

また、Objective-Cダイナミックな特性のために、「performSelector」のような反射方法があります。シナリオを作成する時もこの特徴を考慮しました。分析して得られた方法の名前がperformSelectorであれば、そのパラメータを追加して分析して本物の呼び出し方法を解析します。

スクリプトの作成が完了したら、テストプロジェクトでスクリプトを実行してみます。93箇所の相互参照が解析され、18箇所はスクリプトによって補完された。同じ試験工程はIDA Pro分析後、相互参照計14箇所のみ解析される。

品物“Ghidraを使ってiOSアプリケーションをmsgSend分析し”隻由《ただゆ》モバイルアプリケーション情報プラットフォーム——ソーシャルレンディングは斈習の共有に使われており、権利侵害があった場合は削除するように伝えてください!

ラベル:
気に入ってると思う
Androidappオンライン制作の長所と短所
IOS携帯アプリの開発者間の競争はま
Android生放送APP開発は電気商取引ルート
Androidモバイルファイナンス分野での
Androidナビゲーションアプリの開発区分
IOSアップルが上海で「モバイルアプ
IOS伝統的なインターネットは自分を
Androidアプリ携帯のクライアントとデブ
IOSDIY概念モバイルエレクトビジネス
AndroidAndroidアプリはモバイル広告収入