7

申し訳ありませんが、C++ ソース コードは設計の実装と見なすことができ、リバース エンジニアリングとは設計を取り戻すことを意味します。バイナリから C++ ソースを取得するものとして読んだことがある方も多いと思います。UML を生成して C++ コードベースを理解する - ツールと方法論に、より正確な質問を投稿しました。


C++ (ソース コード) をリバース エンジニアリングできるツールはたくさんあると思いますが、通常、結果を理解するのはそれほど簡単ではありません。

誰かが良い方法論を見つけましたか?

たとえば、私が見たいと思うかもしれないものの1つは、GUIレイヤーと、それがどのように分離されているか(または残りから分離されていないか)だと思います。ツールが何らかの方法でパッケージを検出し、手動で整理できるようにする必要があると考えてください。

4

4 に答える 4

10

私の知る限り、コンパイルされた C++ をリバース エンジニアリングできる信頼できるツールはありません。

さらに、そのようなデバイスを構築することは不可能に近いと思います。コンパイルされた C++ プログラムは、機械語命令にすぎません。それが C++ コンストラクトにどのようにマップされるかを知るには、コンパイラ、コンパイラ設定、含まれるライブラリなどを無限に知る必要があります。

どうしてそんなものが欲しいの?目的によっては、目的を達成するための他の方法があるかもしれません。

于 2010-11-23T23:46:50.247 に答える
4

完全な解決策ではありませんが。IDA ProHexraysを調べる必要があります。

これは、従来の意味での「リバース エンジニアリング」を意味します。のように、コードが C のような言語でどのように見えるかについて十分なアイデアを提供しますが、完全に機能するソース コードを提供することはできません (提供できません)。

特定のセグメント (通常は関数) がどのように機能するかをよく理解するのに役立ちます。これは「ユーザー支援」です。つまり、構造体またはクラスが実際に存在する場合、オフセットの逆参照が頻繁に行われます。その時点で、逆コンパイラに構造体定義を提供することができ (クラスは、実際には、v テーブルなどの余分なものを含む単なる構造体です)、新しい型情報でコードを再分析します。

私が言ったように、それは完璧ではありませんが、「リバースエンジニアリング」をしたいのであれば、私が知っている最良の解決策です. 完全な「逆コンパイル」が必要な場合は、ほとんど運がありません。

于 2010-11-24T03:34:03.137 に答える
3

分解で制御フローをプルすることはできますが、データ型を取り戻すことはできません...

アセンブリには整数(および場合によってはいくつかのショート)しかありません。オブジェクト、配列、構造体、文字列、およびポインタ演算がすべて同じ型であると考えてください。

于 2010-11-23T23:58:46.627 に答える