| |
作者:icelight
以下摘录于delphibbs中dr.yysun 的回答,希望对你有帮助
用 java 编程的人, 如果不想公开源程序, 就得与反编译器作斗争, 必须使用反编译器,先看看别人将会如何看你的程序,再看看obfuscators(扰乱器)的效果.
jad 是 windows 下效果极佳的反编译器 http://www.geocities.com/siliconvalley/bridge/8617/jad.html 围绕这个引擎, 有很多图形界面, 例如 frontend. (我常用)
jode 是免费的 java 反编译器和优化器. http://jode.sourceforge.net/
intr@byte 是个 jbuilder 的外挂工具 (opentool), 使得您在 jb 中能打开 *.class http://www.webappcabaret.com/bjb/index.jsp 它也使用 jad 引擎, 并限制为只反编译器类的定义部分.
有些网站可以帮您反编译, 您给个 url, 它分析出其中有多少个 applet, 然后, 再反编译掉. http://www.jreveal.org/
最后, 您想了解反编译原理, 想自己编个反编译器和扰乱器, 这里有本免费得书 . http://www.riis.com/depile.html
其他到 yahoo 里找吧, 太多了.
jjams_king: 扰乱器就是把 bytecode 中的类名,方法名,变量名等变成无意义的符号。 例如,以下源程序: package temp; public class helloworld { string helloworld = "hello world"; string byeworld = "bye world"; public static void main(string[] args) { new helloworld(true); new helloworld(false); } helloworld(boolean ishappy) { if (ishappy) { system.out.println(helloworld); } else { system.out.println(byeworld); } } } 加扰后,再反编译出来是: package a; import java.io.printstream; public class a { string a; string b; a(boolean flag) { a = "hello world"; b = "bye world"; if (flag) system.out.println(a); else system.out.println(b); } public static void main(string astring[]) { new a(true); new a(false); } }
而更高级的扰乱器,还能加密字符常量和扰乱程序流。加扰后,再反编译后变成这样: package a; import java.io.printstream; public class a { string a; string b; public static boolean c; a(boolean flag) { a = a("q
|
|