復元されたコードの解釈
DE Decompilerは、機械語命令と利用可能なメタデータからDelphi風のPascalによるプログラムロジックを再構築します。バイナリに保持されている情報が結果の詳細度を決定します。
高水準コードリストが表すもの
ネイティブコードの逆コンパイルでは、式、if条件、caseブロック、ループ、認識されたVCLメソッドなどの呼び出しを復元します。これにより、リバースエンジニアリングやセキュリティ解析でプログラムのロジックを調べられます。コードリストは実装を再構築したものであり、元のソースコードそのものではありません。
名前、データ構造、呼び出し
- 変数名: 元のローカル名はバイナリに通常含まれていません。生成された識別子は復元された値を表し、アナリストによって割り当てられた名前を使用するとその役割が明確になる場合があります。
- 型とレイアウト: RTTIは利用可能な場合に型情報を提供します。他の構造体はアクセスサイズとアドレスから推測されるため、フィールドの型、境界、およびシグネチャにはさらなる解釈が必要になる場合があります。
- 呼び出し: 認識されたVCLメソッドは名前で表示されることがあります。識別できない呼び出しは、元のVCL名なしでメソッドベースまたはアドレスベースの呼び出しとして残る場合があります。
- コンパイラの差異: コンパイラの世代、ライブラリ、および最適化は出力される命令とメタデータに影響を与えます。バージョン固有のRTTI知識はそれらを解釈するのに役立ちますが、推測された型や式には修正が必要になる場合があります。
重要な結論を確認する
- 解析対象の正確なバイナリ、ユニット、クラス、およびプロシージャを特定します。
- 機械語命令を使用して不確実な式や型を解決しながら、逆コンパイルされたロジックと宣言を読み込みます。
- 呼び出し元、引数の準備、条件分岐、および関連する文字列参照を調査します。
- 命令または復元された値をファイルデータと比較して確認する必要がある場合は、HEX エディタを使用します。
- 直接観察された内容と、推論に基づく解釈の両方を記録します。
セキュリティ調査
復元された構造とコードは、フォレンジック調査官、アンチウイルス解析担当者、および企業セキュリティチームが、不審なロジック、潜在的なバックドア、および不要な機能の位置を特定するのに役立ちます。結論を出す前に、値や呼び出しがどのように使用されているかを確立してください。文字列や API 名だけでは、悪意のある動作を示すものでもなく、特定の分岐が実行されたことを証明するものでもありません。
ソース復元
復元されたフォーム、宣言、およびプロシージャコードは、手動での復元作業を削減できます。ネイティブコードの逆コンパイルは、コンパイル可能なソースプロジェクトを再現するものではありません。IDE でエクスポートされたコードを開く前に、逆コンパイルの不正確さや互換性の問題をマニュアルで解析・修正し、推論された型と未識別の呼び出しを統合し、欠落しているユニット、コンポーネント、および依存関係を追加してください。復元された素材をビルドするには、この手動作業が必要です。
C++Builderで作成されたアプリケーション
C++Builder固有のライブラリに対応するRTTI知識ベースは、まだ用意されていません。共通のVCLの認識範囲に含まれない関数や、識別できないオブジェクトのプロパティ・メソッドは、ライブラリ内の名前を付けずに表示される場合があります。このため、C++Builderのコードの復元品質は、Delphiで記述されたプログラムより明らかに低くなります。 この制約はコードの復元精度とライブラリ内の名前の識別に関するものです。フォーム表示や構造解析など、その他の機能はDelphiで記述されたプログラムと同じエディションの条件で利用できます。
C++BuilderのコードはDelphi風のPascalとして復元し、PAS/DFM形式で出力します。元のC++ソースには戻しません。他のネイティブコード復元と同様、IDEで利用する前に、推定された型、生成された名前、逆コンパイルの不正確な箇所を手作業で確認・修正してください。