2015-05-19 70 views
1

所有混淆器都會說他們不能混淆動態變量,類等,因爲它可能會導致錯誤。就我的理解而言,動態符號是 被編程爲在運行時添加或刪除可能在編譯時不存在的屬性的符號。在什麼情況下動態符號不會被混淆?

如果我混淆了預編譯時間,是不是剛剛命名符號不同的首要的equivelant,因此不應該引起任何問題?

+0

是的,它只是以不同的方式命名變量。使用混淆器仍然沒有多大作用 - 它不是重要符號的名稱,而是它的使用場景。如果混淆器無法確定在非動態場景之外不使用符號,則它將無法混淆符號。 – xxbbcc

+0

但是,請注意,源混淆(我認爲這就是預編譯混淆的含義)具有相同的問題 - 您知道何時使用符號(以及如何),但混淆器只能通過解析源來猜測。它表現出與SWF混淆相同(或更多)的問題 - 使用SWF混淆,至少編譯器已經通過代碼一次並刪除了大部分垃圾。 – xxbbcc

+0

謝謝,但基本上混淆器可以選擇包含所有變量(包括動態變量)的混淆。如果這樣做,它可能會破壞程序。我無法圍繞代碼如何破解我的頭。 – CausingUnderflowsEverywhere

回答

0

某些代碼可以使用字符串(例如,從資源文件讀取的字符串)引用變量/類型(符號) - 例如通過反射。您發現的混淆器可能無法檢測符號何時被字符串引用 - 它可能會重命名符號,其名稱出現在字符串中 - 並且在混淆之後,代碼將被破壞,因爲該字符串將引用已重命名的符號。

如果混淆器混淆了框架標籤,但沒有使用新名稱(或SWF中的資源文件)更新字符串,這也可能導致錯誤 - 代碼可能會從XML資源加載舊名稱,但時間軸不再有舊的標籤。

這些都是通過混淆處理破壞代碼的簡單方法,但還有很多。這是大多數混淆器產品具有「忽略列表」的原因 - 在混淆期間要忽略的符號名稱列表(或正則表達式)。在大型項目中,維護忽略列表可能相當不方便,因爲需要記住包含混淆後可能會中斷的所有符號。

相關問題