前陣子才評估過SmartAssembly混淆器,今天卻無意發現駭人的壞消息。有個Open Source專案,de4dot,號稱能輕易破解市面上各大品牌混淆器:

  • Agile.NET (aka CliSecure)
  • Babel.NET
  • CodeFort
  • CodeVeil
  • CodeWall
  • CryptoObfuscator
  • DeepSea Obfuscator
  • Dotfuscator
  • .NET Reactor
  • Eazfuscator.NET
  • Goliath.NET
  • ILProtector
  • MaxtoCode
  • MPRESS
  • Rummage
  • Skater.NET
  • SmartAssembly
  • Spices.Net
  • Xenocode

由清單看來,幾乎是一網打盡全球制霸,看過網友討論與自己實測,其威力真的不容小覷。由de4dot的運作原理來看,其實是預先剖析各家混淆保護原理,找出破解方法。反混淆時,先偵測程式所採用的混淆技術,再各個擊破。說穿了,只要投入足夠時間精力,高竿駭客可以破解任何混淆機制,但de4dot可怕之處在於頂尖駭客橫掃過檯面所有混淆器,再推出懶人包讓小學生也能輕鬆擁有可怕玩具。

這則消息對軟體資安當然是個噩耗,但與其避而不談當鴕鳥,繼續相信混淆器仍能提供充分保護,還不如快點正視問題,調整資安防護心態,不過度依賴混淆技術。

混淆或任何防破解技術從來就只是消耗對方資源多寡及阻擋時間長短問題,永不存在堅不可破的情境。現在的情境有點像有人研發出超厲害的穿甲彈,還在街上免費發放,此刻起,就算躲在超厚鋼板的坦克車裡也不能說自己安全無虞。

針對這個議題,我的心得:

  1. 若是絕對機密,就儘量別裝進會部署到客戶端的元件裡,世上沒有任何保護手段能讓你永遠高枕無憂
  2. 到頭來,唯一能給人安全感的,好像還是只有RSA公私鑰加密 (因為Private Key永遠放家裡,不必給出去)
  3. 不可逆的Symbol Renaming(將私有類別、屬性、方法亂改一通)是反混淆唯一無法克服的障礙,當邏輯複雜時仍能形成一定的破解障礙。而把DLL內嵌進來一起混淆,減少類別不必要的公開屬性、方法,可提高反混淆後程式碼的亂度。
  4. 如真要混淆防破解,自製或不知名混淆機制反而比知名產品好。高手不屑花時間研究破解,就少了現成工具助攻,反而比較安全。但是還是要記住,"沒有無法被破解的保護,只差在難易度"!
  5. 我想混淆器廠商將會持續改版推出新演算法讓反混淆失效、而反混淆器開發者則需不斷追隨更新方能保持有效性。猶如電腦病毒作者與防毒軟體廠商間永不停歇的戰爭,只是在混淆器戰爭中,主客立場對調。
  6. 要尊敬那些常寫出你無法理解程式碼的專案成員(又稱人體混淆器),有一天他們的程式碼能讓反組譯駭客在破解時狂罵WTF暴走失控,早早放棄,將會救你一命 (大誤)

Comments

# by Will 保哥

大多數付費的混淆器好像都有「邏輯混淆」的機制。

# by 路人

2 可以劃掉,RSA 大概比這個更容易破~

# by 迪納敏斯

要尊敬那些常寫出你無法理解程式碼的專案成員(又稱人體混淆器),有一天他們的程式碼能讓反組譯駭客在破解時狂罵WTF暴走失控,早早放棄,將會救你一命 (大誤) 哈哈哈哈~

# by 路人

最后一个,无敌的存在~

Post a comment


63 + 14 =