簡體   English   中英

這些符號在反編譯代碼中是什么

[英]What are these symbols in a decompiled code

我反編譯了一個可執行文件,無法理解源代碼(C#)中的這些符號是什么。 我會在這里粘貼源代碼示例,但是當我嘗試粘貼時,反編譯源中的特殊字符在此編輯器中不可打印。 所以我在這里拍攝幾張剪輯圖片和粘貼鏈接,所以任何人都可以看到,所以示例如下:

圖片1

圖2

圖3

我猜的是這個源代碼被混淆了嗎? 並且這些符號可以存在於MSIL中,但是當在C#中進行翻譯時,它們會產生非法字符。 那正確嗎? 關於如何解決這個問題的任何建議,比如對這些東西進行替換?

MSIL對於允許作為標識符名稱的內容有非常寬松的規則。 混淆器故意選擇C#無法表示的字符,因此您無法往返C#。

但是,您可以反編譯為IL並能夠編譯項目。

另請查看C#的unicode標識符 您可以在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);
   }
}

您可以使用十六進制編輯器查看該文件,找出這些值的“規則”,然后您可以自己編寫一個程序,將它們轉換為具有一些前綴的ascii表示 - 即obs_627或其他。

當然,您只能更改僅在您要更改的代碼庫中引用的名稱。 與這些特殊名稱的任何外部聯系,或任何相當於反射的內部使用都會破壞。 如果有理由期待其中任何一種都是這種情況,那么這將是一種浪費的努力。

這些來自舊的MS-DOS ANSI字符集。

您發布的第一個示例包含ASCII線條繪制字符。 IIRC,他們開始大約172十進制(0xAC十六進制)左右。

第二個和第三個包含1到31個十進制之間的ASCII字符(十六進制表示法為0x01-0x1F)。

您無法復制和粘貼它們,因為大多數現代字體中不存在顯示的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM