同事要交付客戶的程式,不希望讓對方知道他的程式怎麼寫,所以希望客戶拿到執行檔後,不能輕易地使用Reflector這種神兵利器去反編譯。
基本上若沒有經過Obfuscator處理過,Java的class 檔或.Net的dll/exe都能輕易地被反編譯為原始碼。Java上最有名的JAD在原作者不願維護的情況下,只能從好心人提供的地方下載,雖然說搭配DJ Java Decompiler還不錯用,不過隨著Java的演進,遲早不能用。
Java的Obfuscator也很多,我以前試過ProGuard、RetroGuard和yGuard,以前都是免費軟體,現在... 它們各有各的長處,狠一點混用多做幾次也行,但不見得會比較好。因為我現在不太寫Java,所以也沒有繼續使用。
至於.Net的Obfuscator更是多如牛毛,特別一提yGuard也出.Net的版本,一般人用Visual Studio附的Dotfuscator Community Edition就很夠了,MSDN有用法介紹。
很多的Obfuscator對於字串加密等功能都在商用版本才有,若真的要別人看不出來,得要
最後再強調一次,我都是"完整交付程式原始碼"給同事或客戶。程式技術日新月異,今天寫的東西明天可能就是垃圾;說難聽點,我寫得有別人好嗎?不給程式碼搞得別人難過會爽嗎?大家都來Open Source吧!
基本上若沒有經過Obfuscator處理過,Java的class 檔或.Net的dll/exe都能輕易地被反編譯為原始碼。Java上最有名的JAD在原作者不願維護的情況下,只能從好心人提供的地方下載,雖然說搭配DJ Java Decompiler還不錯用,不過隨著Java的演進,遲早不能用。
Java的Obfuscator也很多,我以前試過ProGuard、RetroGuard和yGuard,以前都是免費軟體,現在... 它們各有各的長處,狠一點混用多做幾次也行,但不見得會比較好。因為我現在不太寫Java,所以也沒有繼續使用。
至於.Net的Obfuscator更是多如牛毛,特別一提yGuard也出.Net的版本,一般人用Visual Studio附的Dotfuscator Community Edition就很夠了,MSDN有用法介紹。
很多的Obfuscator對於字串加密等功能都在商用版本才有,若真的要別人看不出來,得要
- 用Native Code:你沒看錯,用C/C++寫吧。
- 不要寫成dll:做成dll就很容易被置換,某些軟體的破解就是把Dll的某個關鍵檢查function換掉,在Java的軟體上常用這手法。
- 在字串的部份用Native Code的function 加解密,而且這function必須放在主程式,放在Dll就破功啦~
最後再強調一次,我都是"完整交付程式原始碼"給同事或客戶。程式技術日新月異,今天寫的東西明天可能就是垃圾;說難聽點,我寫得有別人好嗎?不給程式碼搞得別人難過會爽嗎?大家都來Open Source吧!
留言