跳到主要內容

關於.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吧!

留言

這個網誌中的熱門文章

DBeaver 介面語言

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

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

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

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?