難読化後のリバースエンジニアリングアプリケーション

はじめに



この出版物は、いくつかのリバースエンジニアリング技術の研究を目的としています。 すべての資料は情報提供のみを目的として提示されており、個人的な利益のために使用することを意図したものではありません。




研究テーマ



例として、Atomineer Proドキュメンテーションコード(以降APD)を学習します。 これは、ソースコードでコメントを自動的に生成するように設計されたVisual Studio用のプラグインです。 まず、このプラグインをインストールして、その動作を確認します。 無料版には試用期間があり、この期間中は多くの使用制限があります。 そのため、ファイルにコメントを追加すると、ユーザーは1日で10個のファイルしか処理できないことが通知されます



メッセージ1
画像



プロジェクト全体を処理しようとすると、ユーティリティはこのコマンドが使用できないことを警告するダイアログを表示します。



メッセージ2
画像



さあ始めましょう



最初に、インストールされている拡張機能のディレクトリを調べて、動的ライブラリが1つだけあることを確認します。 必要です。 最初に行うことは、JetBrainsからdotPeekデコンパイラーにアップロードすることです。



dotPeek
画像



画面で見ることができるように、ライブラリは難読化ツールを通過し、変数とメソッドの名前が変更され、a、b、c、dなどの名前が付けられました。これが必要なものです。 まさにそれを探していました。 何ができるか見てみましょう。



パート1



最初に頭に浮かぶのは行を見つけることですが、検索機能はdotPeekにはないため、別の方法で見てみましょう。 Microsoft SDKの標準のildasm.exeを使用してライブラリを逆コンパイルします。 出力は1つのテキストファイルのみを受け取ります。 その中で、「 試用モード 」というメッセージのテキストを探します。 ご注意ください... "



テキストファイル
画像



メソッドを見つけました
.method family hidebysig static bool e()cil管理
クラスCmdDocThisScopeに属します。 では、dotPeekに戻ります。



ネタバレ見出し
画像



だから私たちが持っているもの。 APDトライアルメッセージを表示し、条件に応じてtrueまたはfalseを返すメソッドを見つけました。 このメソッドが呼び出されるすべての場所を見つけます



コール検索
画像



2つのコールポイントのみが見つかりました。これらはメソッドCmdDocThisFile :: cおよびCmdDocThisScope :: cです。



見つけた
画像



クラスの名前とコンストラクターコードから、クラスがメニュー項目を担当していることは明らかです。「c」メソッドの仮想性は、これがユーザーが対応するメニュー項目を選択するためのイベントハンドラーであることを示しています(この情報はさらに役立ちます)。 メソッドがtrueを返した場合、警告のあるダイアログが表示されてもコマンドが実行されると推測するのは簡単です。



CmdDocThisScope :: eメソッドの開始時に、変数fがインクリメントされます。 「ILビュー」ウィンドウを開き、コマンドコードを見つけます。



ILビュー




ウィキペディアには、 これらの手順を説明する記事があります。



次に、APDライブラリファイルでこのメソッドを見つけます。 これは、IDAツールを使用して行います。 関数のあるウィンドウにメソッドが表示され、すでに馴染みのあるコードが表示されます。



IDA




ldsfld命令を選択すると、Hex Viewウィンドウにそのバイナリ表現が見つかります



六角ビュー




チームの説明により、適切な場所が見つかったことを確認できます。



Wiki




このメソッドと後続のステップのコードのさらなる分析は、この記事の範囲外です。



パート2



今、すでに経験のある研究者として、「 'Project all in Project'コマンドはフルバージョンでのみ使用可能です... 」というメッセージが表示されたダイアログへの呼び出しが見つかりました。このメソッドはCmdDocThisProject :: c



CmdDocThisProject :: c




CmdDocThisProjectクラスは「Process Project」コマンドを担当し、「c」メソッドは仮想です。 そして、それはただ一つのことを含んでいます-これはメッセージを伴う対話への呼び出しです。 条件なし、チェックなし。 ソースコードを検索すると、CmdDocThisProject :: iメソッドにつながります。このメソッドは、CmdDocThisProject :: cで期待するものを持っています。 IDAで必要なメソッドを簡単に見つけることができ、CILの手順を学ぶことができます




おわりに



この記事は、彼らの独立した研究のために意図的に白い点を残したと言うことは残っています。



All Articles