どのように私はミニダンプで、モジュールのチェックサムを変更できますか?

StackOverflow https://stackoverflow.com/questions/1876051

  •  18-09-2019
  •  | 
  •  

質問

私はそれを配布する前に、私が書く(および販売)

ソフトウェアを圧縮および暗号化されます。毎回私は、それが圧縮され、暗号化される前に、私はすべての.MAPファイルとexeファイルを含む生成されたバイナリを保つ、新しいビルドをリリースます。

それは、クライアントのマシン上でクラッシュすると

私はミニダンプを取り戻します。私は、Visual Studioでこれらのミニダンプを開いて、そこにそれらを探求ます。

私は.MAPファイル内のアドレスを検索することによって、これらのミニダンプをうまく利用してきました。これは、一般的に、コードとクラッシュが発生し、それを修正しかし、これは非常に時間がかかるものである理由について、私がすることができ、一般的な理由の正しい領域に私を取得します。

私はミニダンプのデバッグ中に、元のビルドから保存されたシンボルを使用することができればそれが役立つだろう。

私の問題は、私は右のシンボルを見つけることができないことについての警告を得ることです。私の研究は、クライアントのマシン上のexeファイルのチェックサムは、Visual Studioが構築されたexeファイルのチェックサムが一致しないためであると信じるように私をリード。そして、私は理由を理解、それを圧縮してencyptedされています。もちろん、チェックサムが一致しません。

私は手動でミニダンプを編集したり、配布のチェックサムと一致するように保存されたバイナリのチェックサムを変更することができます把握します。私は私が入ってくるすべてのダンプを変更する必要はありませんので、保存されたコピーを操作することを好むだろうが、私はどちらかとestaticになると思います。

だから、私の質問は:どのように私は、これらのチェックサムを見つけて、私はそれらを交換すべきかを把握することができますか?補助問題として:良い方法はあります

役に立ちましたか?

解決

私は非常に具体的であるためには、

あなたは圧縮して、あなたのバイナリを暗号化する方法を正確に知らなくても、それは難しいます。

この<のhref = "http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx" のrelジョン・ロビンズによってに=「nofollowをnoreferrer」>ブログ記事は、実行可能イメージを実行可能ファイルのPEヘッダーに埋め込まのGUIDを介してそれらのPDBに関連付けられていることを指摘しています。あなたは、実行可能にDUMPBIN / HEADERSを実行し、デバッグディレクトリの出力を探してそれを見ることができるはずです。あなたの圧縮と暗号化は、この情報が利用できる(または正しい)ないようにPEヘッダを変更した場合、それはあなたのデバッガが何かを見つけることができない理由を説明するだろう。

私はあなたがこの問題を解決するために取ることができると思い、いくつかの方法があります。本当にこの作業を取得しようとするには、WinDbgの代わりのVisual Studioのデバッガを使用して検討する必要があります。あなたは、私が一瞬でこれを推薦しています理由を理解するでしょう...

WinDbgのは、シンボルファイルのリラックスしたロードを許可するいくつかのオプションを提供します。このオプションを指定したアイデアは、ソースコードが変更されていないが、バイナリがPDBとは異なるビルドからであれば、GUIDチェックを免除することができ、不一致のシンボルファイルをロードすることができる、ということです。私は、これはあなたの圧縮と暗号化で動作しますどれだけ知っているので、YMMVません。

のWinDbgとそれに付随するツールは、実行可能ファイルとPDBの両方からGUIDをダンプするために使用することができますが、私はそれらのステップが必要ではないであろうことを期待していますので、私は今のところを省略しています。

あなたはWinDbgの中であなたのミニダンプを開いた後、

、あなたはこのすべての作業を取得するためのコマンドラインに複数のコマンドを入力する必要があります:

.symopt +0x40
!sym noisy
ld <exe name>

最初のコマンドは、GUIDチェックをスキップSYMOPT_LOAD_ANYTHINGオプションを有効にします。あなたはより詳細なエラーメッセージを表示できるように!symコマンドは、シンボルロードの詳細出力を可能にします。 ldコマンドを使用すると、<exe name>の代わりに入力します実行可能ファイル名のためのシンボルをロードしようとするのWinDbgを指示します。あなたはldのコマンドを繰り返す場合は、それが正常にシンボルを最初にロードした場合、WinDbgのが示されます。

うまくいけば、このことができます - 。再び、私はこれはあなたの圧縮と暗号化で動作しますどれだけ知っていないが、それは試してみる価値だ。

他のヒント

は、UPXのように、この圧縮/暗号何かか?バイナリの実際の実行可能なコンテンツは、(UPXのようなツールを使って行われるように)変化している場合、あなたは(あなたがアセンブリ言語で複雑なアプリケーションをデバッグ楽しむ場合を除く)運が悪いことになるだろう。お使いのソフトウェアは、そのバイナリが配信される前に暗号化する必要があることを特別/本当に重要なのですか?私の経験では、クラッシュダンプデバッグする機能は、逆にコードのエンジニアリングから人々を停止するよりもはるかに重要である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top