4

難読化された .Net プログラムで Visual Studio デバッガーを実行したいと考えています。(これは私自身のプログラムです。他の誰かのプログラムをクラックしようとしているわけではありません。)

"System.Diagnostics.Debugger.Break()" を使用してプログラムをコンパイルするか、デバッガーを実行中のプロセスにアタッチすると、デバッガーに "No Source Available" と表示されます。これは理解しています。難読化されたバージョンのプログラムに対応するソースはありません。しかし、[Show Disassembly] をクリックすると、[Disassembly available] が表示された [Disassembly] ウィンドウが表示されます。

なんで?逆アセンブリを機能させるために何ができるかについて何か提案はありますか?

[デバッグ オプション] の下で、[アドレス レベルのデバッグを有効にする] と [ソースが利用できない場合は逆アセンブリを表示する] にチェックを入れています。

ありがとう。

編集

もう少し説明しようとすると...

問題のプログラムは自分のプログラムであり、使用されている難読化プログラムも自分のプログラムです。難読化プログラムは ILDAsm.exe を実行し、ILAsm コードを変更して ILAsm.exe を実行します。

私の難読化は明らかに問題を引き起こしているため、プログラムは正しく動作しません。どのように/なぜ機能しないのかを理解するために、トレースしたいと思います。しかし、何らかの理由で Visual Studio デバッガーに「逆アセンブルがありません」と表示され、何もできません。(難読化されていないプログラムが Visual Studio で実行されると、[逆アセンブリ] ウィンドウを開くことができ、期待される情報が表示されます。VS デバッガーでこの問題が発生するのは、難読化されたバージョンのみです。)

編集2

私の質問に対する答えを見つけることができませんでしたが、現在、一種の回避策があります。

私は WinDbg をインストールし、難読化されたプログラムにアタッチできること、および少なくともシングル ステップで実行できることと、現在の実行場所を逆アセンブリ ウィンドウに表示できることを確認しました。しかし、これまで WinDbg を使用したことがなく、少し難しそうです。

また、sos.dll を WinDbg にロードするためにいくつかの場所で見られるアドバイスに従いました。多分それは助けになるでしょう。

しかし、私が実際に行うことは、プログラムが機能していない場所の周りに多くの一時的なログステートメントをプログラムに投入することであり、うまくいけばその方法である程度理解できると思います。

4

1 に答える 1

4

OK、私はたまたま自分が間違っていたことに出くわしました。

質問の最初の編集で述べたように、難読化は ILDAsm.exe を実行し、ILAsm ステートメントを変更してから ILAsm.exe を実行することによって行われます。ILAsm.exe の実行時に /Debug オプションが欠落していたことが判明しました。したがって、私の Visual Studio ビルドはデバッグ ビルドでしたが、実行時の JIT 変換はリリース/最適化変換でした。

ILAsm.exe で /Debug を指定すると、PDB ファイルが取得されます。Visual Studio デバッガーがプログラムに接続すると、IL ソース コードが表示され、要求があれば逆アセンブリも表示されます。だから今、すべてが順調です!

于 2011-08-07T21:16:15.887 に答える