[英]What are these symbols in a decompiled code
我反編譯了一個可執行文件,無法理解源代碼(C#)中的這些符號是什么。 我會在這里粘貼源代碼示例,但是當我嘗試粘貼時,反編譯源中的特殊字符在此編輯器中不可打印。 所以我在這里拍攝幾張剪輯圖片和粘貼鏈接,所以任何人都可以看到,所以示例如下:
我猜的是這個源代碼被混淆了嗎? 並且這些符號可以存在於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.