程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 關於擾亂器與反編譯

關於擾亂器與反編譯

編輯:關於JAVA

以下摘錄於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

switch

case 1: goto 21

case 2: goto 29

case 3: goto 37

case 4: goto 45

case 5: goto 10

default: goto 54

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved