1

通常、.exe ファイル内の文字列 (ダイアログ ボックスの内容/タイトルなど) は、何らかのリソースに保存されます。

しかし、私が逆アセンブル/リソース検査したいくつかの最近のexeでは、文字列を含むリソースを見つけることができませんでしたがdb、プログラムのソースコードに何とかハードコードされていました。

  • プログラムに直接配置されている文字列を抽出して変更するにはどうすればよいですか? それらはconst char*C++ の s に相当すると思いますか?

  • ダイアログ ボックスやメニューなどのコンテンツを「外部委託」しないのはなぜでしょうか。

4

3 に答える 3

3

PE から文字列を取得する最も簡単な方法は、strings私がこれまでに遭遇したすべての Linux ディストリビューション (uCLinux を含む) に標準装備されているユーティリティです。ほとんどの場合、バイナリ全体を調べて、一連の null で終わる印刷可能な ascii 文字を探します...これが正規の文字列です。 strings --help検索する最小長の文字列、エンコーディング、アーキテクチャ ヘルパー、およびおそらく必要のないその他のものなど、使用可能なパラメーターを示します。

Linux を実行していない場合は、シンプルでありながら効果的な豊富なコマンド ライン ユーティリティのためだけに、Ubuntu Live CD を起動することをお勧めします。

于 2010-03-23T02:26:02.770 に答える
1

文字列は、リソースまたは PE ファイルの読み取り専用データ セクションに配置されます。2 番目は、文字列がコントロールのキャプション/タイトルでない場合によく見られます。分解すると、それらは単なる記憶の一部であり、特別にマークされていません。IDA のようなスマートな逆アセンブラーは、コード内のアドレスへの参照を認識し、文字列定義を強調表示できます。

  • 抽出および変更。文字列のアドレスがわかっている場合は、簡単に抽出して変更できます。文字列のアドレスを取得し、イメージ ベースを減算し、セクションの RVA を減算してから、セクションの物理オフセットを追加します。これにより、ファイル内の文字列の位置がわかります。そこで、16進エディタで変更できます。アドレスを見つけるのは難しいです - 逆アセンブルされたコードを分析する必要があります。
  • ダイアログ ボックスやメニューなどのコンテンツを「外部委託」しないのはなぜでしょうか。全く分かりません。誰かが const char* を宣言し、実際に格納されている場所に注意を払わずにタイトルとして設定する可能性があります。
于 2010-03-16T15:26:41.620 に答える
1

PE ファイル内のデータにアクセスする場合は、このユーティリティを試してください (ソース コードと使いやすい (非 GPL) ライセンスが付属しているため、独自のアプリでコードを使用できます)。

PE ファイル形式 DLL

適切なセクションのアドレスを簡単に見つけて、データを処理できるはずです。DLL を使用する PE ファイル エクスプローラー プロジェクト (ソース付き) もあるので、アプリの DLL を呼び出す方法を確認できます。

于 2010-03-29T19:19:17.910 に答える