跳到主要內容

關於.Net/Java 的原始碼安全性與混淆器

同事要交付客戶的程式,不希望讓對方知道他的程式怎麼寫,所以希望客戶拿到執行檔後,不能輕易地使用Reflector這種神兵利器去反編譯。



基本上若沒有經過Obfuscator處理過,Java的class 檔或.Net的dll/exe都能輕易地被反編譯為原始碼。Java上最有名的JAD在原作者不願維護的情況下,只能從好心人提供的地方下載,雖然說搭配DJ Java Decompiler還不錯用,不過隨著Java的演進,遲早不能用。

Java的Obfuscator也很多,我以前試過ProGuardRetroGuardyGuard,以前都是免費軟體,現在... 它們各有各的長處,狠一點混用多做幾次也行,但不見得會比較好。因為我現在不太寫Java,所以也沒有繼續使用。

至於.Net的Obfuscator更是多如牛毛,特別一提yGuard也出.Net的版本,一般人用Visual Studio附的Dotfuscator Community Edition就很夠了,MSDN有用法介紹

很多的Obfuscator對於字串加密等功能都在商用版本才有,若真的要別人看不出來,得要
  1. 用Native Code:你沒看錯,用C/C++寫吧。
  2. 不要寫成dll:做成dll就很容易被置換,某些軟體的破解就是把Dll的某個關鍵檢查function換掉,在Java的軟體上常用這手法。
  3. 在字串的部份用Native Code的function 加解密,而且這function必須放在主程式,放在Dll就破功啦~
Wikipedia上介紹代碼混淆Obfuscated code值得一看,但我相信很少人會這麼辛苦保護自己的程式碼,以後要維護多累呀?

最後再強調一次,我都是"完整交付程式原始碼"給同事或客戶。程式技術日新月異,今天寫的東西明天可能就是垃圾;說難聽點,我寫得有別人好嗎?不給程式碼搞得別人難過會爽嗎?大家都來Open Source吧!

留言

這個網誌中的熱門文章

Personal Bookmark

Java SE 6 + Firefox 2 UI 問題 As I do . Google拋棄了了SOAP API,浮想聯翩 https://www.gandi.net/ VS 2005 SP1中文版推出 Windows Vista中文版下載 ASP.NET 2.0網頁執行管線與快取原理 Cache 2.0快取架構與快取資料自動移除架構圖 flickr sync 分享與試用 SUN Looking Glass 3D圖形介面發布1.0 雅虎勵精圖治推動改革 Wait and see 國內某SOC疑遭駭客入侵 大砲開講 Very Important! 微軟公佈Vista安全程式介面草案 一窺Google開原碼庫房乾坤 qing is writing a dig girl net... wait and see

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!