网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

关于扰乱器与反编译 (转载)

http://www.diybl.com/ 2007-2-6  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

以下摘录于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\0041\033/\03162\005,]");
        b = a("{\0308W\027V\0231\023");
        if (!flag) goto 42 else 26;
        System.out.println(a);
        if (!c) goto 52 else 42;
        System.out.println(b);
    }

    public static void main(String astring[])
    {
        new a(1);
        new a(0);
    }

    private static String a(String string)
    {
        char ach[];
        int i;
        int j;
        int k;
        ach = string.toCharArray();
        i = ach.length;
        j = 0;
        k = 0;
        expression 57
        expression ach
        expression j
        expression 97
        expression ach
        expression j
        expression 93
        expression ach
        expression j
        expression 119
        expression ach
        expression j
        expression 64
        expression ach
        expression j
        dup 2 over 1
        push []
        ^
        pop []
        j++;
        k++;
        if (i == j)
            return new String(ach);
        expression k
   &n

欢迎光临DIY部落,点击这里查看更多文章教程   【点击打包该文章】
[1] [2]
如果图片或页面不能正常显示请点击这里 站内搜索:   
上一篇文章:Garbage Collection
下一篇文章:JAVA专业术语集

文章评论

请您留言