2013-04-13 116 views
2

我有一個DLL文件,我無法用.NET Reflector和JetBrains dotPeek完全解壓。反編譯DLL時缺少名稱

基本上所有領域缺少他們的名字,如:

private int ; 
private string ; 
private bool ; 

是DLL混淆?或者可以在運行時生成這些名稱?

+0

有趣的 - 你也嘗試ILSpy(反射體克隆)? – Axarydax

+0

剛剛嘗試過ILSpy,那裏的名字被替換爲一個灰色的框,其中包含如下文本:STX,ETX,ENQ等 – Gusten

+0

並最終嘗試 - 當您使用ildasm進行反編譯時會發生什麼?它看起來像混淆,用亂碼替換標識符。但另一方面,私人成員*在輸出中沒有名稱,我認爲Reflector將它們命名爲int1,int2,... – Axarydax

回答

4

CLI標準,說什麼字符是有效的符號,有標準的非常靈活的規則。通常情況下,它描述了許多語言可以定位的虛擬機。在標識符中哪些字符是有效的規則是語言實現細節,因此使它們過於嚴格會導致難以將這些語言移植到CLR。

工具利用這種靈活性。 C#和VB.NET都會這樣做,它們會生成包含$<等字符的怪異名稱,以確保它們自動生成的名稱(如迭代器和lambda表達式)不會與程序員挑選的標識符相沖突。

混淆器充分利用了這一點。像STX和ENQ這樣的字符是ASCII控制代碼,值小於0x20的代碼。由於大多數字體沒有該字符代碼的字形,很多程序根本無法顯示它們。

您幾乎肯定會違反此計劃的許可條​​款。 「不反向工程」條款在大多數許可證中都是樣板。一個軟件供應商從來不會經歷混淆的麻煩,然後不包含該條款。

+0

如果混淆器使用Unicode字符,則有更多不可見字符,因爲有更多種類的空格,http://en.wikipedia .org/wiki/Mapping_of_Unicode_characters#Spaces –

+2

我不知道「軟件供應商從來沒有經歷過混淆的麻煩,然後不包含該條款。」 大多數惡意軟件不附帶EULA。 –