0

.NET Reflector 5.1.5.0 を使用して、拡張子が.exeのファイルを逆コンパイルしました。プロジェクトにエクスポートした後、多くの「特殊」文字を含むクラスがいくつかあります:(

例:

  • Label_065C (なぜ元のレーベル名が変換されたのか...)

  • matchBaseTag = new Regex(@"(?<=base\s+href\=[ \x27\x22 ])(?[^ \x27\x22 ]*)(?=[\x27\x22])") に一致します。一致 (結果); (x27はヘキサコードだと思います)

  • Copyright \x00a9 ... 株式会社 2008
  • 場合 (this.SiteID == 0xce )
  • addArticle.Parameters.Add("@Title", SqlDbType.NVarChar, 0x100 ) .値

値 (太字) が変更された理由をお聞きしたいです! そして、それらの本当の価値を理解する方法(オリジナル)

私の英語が下手で申し訳ありませんが、どうもありがとうございました! (私はあなたの応答を待っています:( )

4

3 に答える 3

2

表示->オプション->逆アセンブラー->数値形式で数値形式を10進数に設定できます

于 2009-09-21T09:01:38.800 に答える
1

バイナリ ファイル内の情報は、コンパイラがエスケープ シーケンスなどを解釈した後の文字列の内容にすぎません。これはソースではなく生のテキスト データです。同様に、SiteID比較などの値は単なる整数です。

Reflector は、同じバイナリ コードにコンパイルされるいくつかのソースを思い付きます。16 進数のリテラルを使用したか、10 進数のリテラルを使用したかなどはわかりません。表示/オプション/逆アセンブラーで使用する数値形式を変更して、強制することができます。 16 進数または 10 進数にするか、または決定に任せます。\uXXXX非ASCII文字を逆コンパイルする方法を決定するための同様のオプションがあるようには見えません-IMOの代わりにフォームを使用できればいいでしょう\x

「ラベル」ビットについてはわかりません。これは、表示されている場所や以前の状態について十分なコンテキストが提供されていないためです。

于 2009-09-21T08:59:37.763 に答える
0

通常、Reflector の表現と私がそうあるべきだと思うものとの間に違いがある場合、私は ILDasm を使用します。Jonとnajmeddineが言ったことで、整数の問題を修正できると思います。文字列は少し難しくなります (著作権属性値や正規表現文字列など)。

文字列定数 (ソース コード内の引用符で囲まれたもの) は、Unicode バイト シーケンスとしてバイナリ ファイル (BLOB またはユーザー文字列ヒープ) に格納されます。次の手順を実行すると、ILDasm を使用してバイナリの内容を正確に確認できます。 0. アセンブリを ILDasm にロードします。

「著作権」を検索すると、ほとんどの場合、それはブロブ ヒープにあり (属性値はバイトに対して異なるシリアル化を使用し、他のバイナリ値と共にブロブ ヒープにあります)、RegEx 文字列の場合は、ユーザー文字列にある必要があります。ヒープ。

ILDasm の値を確認すると、アセンブリに実際に何が含まれているかがわかります...それと Reflector が示す値との間に違いがある場合...可能性としては、Reflector がバイナリ文字列のベスト エフォート デコードを実行して、読めない文字をより読みやすい形式にエスケープします。いくつかの可能なエンコード/デコードがあるため、Reflecor は有効な文字列を表示することがありますが、正しくデコードされません (' および " の \x27 および \x22 デコードのように)。

要するに、値はアセンブリで変更されていません (ほとんどの場合)、Reflector が元の文字列に正しくデコードされていないだけです。

于 2009-09-22T14:07:26.927 に答える