4

実行可能ファイルを逆コンパイルしましたが、ソース コード (C#) 内のこれらのシンボルが何であるかを理解できません。ここにソースの例を貼り付けますが、貼り付けようとすると、逆コンパイルされたソースの特殊文字がこのエディターで印刷できません。だから私はいくつかの切り取り画像を取り、ここにリンクを貼り付けているので、誰でも見ることができるので、例は次のとおりです:

画像1

画像2

画像3

私が推測しているのは、このソース コードは難読化されているということですか? また、これらの記号は MSIL に存在しても問題ありませんが、C# でそのまま変換すると、不正な文字になります。そうですか?このようなものをすべて置換するなど、これをどのように乗り越えるかについての提案はありますか?

4

3 に答える 3

9

MSIL では、識別子名として許可されるものについて非常に緩い規則があります。難読化ツールは、C# で表現できない文字を意図的に選択するため、C# へのラウンドトリップができません。

ただし、IL に逆コンパイルして、プロジェクトをコンパイルできます。

C# の unicode identifiersも参照してください。多くの人にとって驚くべきことに、C# 識別子内に Unicode エスケープ コードを含めることができます。例:

class @class
{
   public static void @static(bool @bool) {
      if (@bool)
         System.Console.WriteLine("true");
      else
         System.Console.WriteLine("false");
   }   
}
class Class1
{
   static void M() {
      cl\u0061ss.st\u0061tic(true);
   }
}
于 2012-05-06T21:01:55.043 に答える
1

16 進エディタでファイルを見て、これらの値の「規則」を理解すると、それらをいくつかの接頭辞 (obs_627 など) を付けた ASCII 表現に変換するプログラムを自分で作成できる場合があります。

もちろん、変更するコードベース内からのみ参照される名前のみを変更できます。これらの特別な名前への外部リンク、またはリフレクションと同等のものの内部使用は壊れます。これらのいずれかが当てはまると予想する理由がある場合、それは無駄な努力になります。

于 2012-05-06T21:05:32.810 に答える
1

これらは古い MS-DOS ANSI 文字セットからのものです。

あなたが投稿した最初の例には、ASCII 線画文字が含まれています。IIRC、彼らは約172 10進数(0xAC hex)かそこらから始まりました。

2 番目と 3 番目には、10 進数で 1 から 31 までの ASCII 文字 (16 進数で 0x01 から 0x1F) が含まれます。

表示される文字はほとんどの最新のフォントには存在しないため、コピーして貼り付けることはできません。

于 2012-05-06T21:12:21.093 に答える