色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java如何反混淆

林玟書2年前105瀏覽0評論

java如何反混淆?

一般情況下Java應用的開發者為了保護代碼不被別人抄襲,在生成class文件的時候都java文件進行了混淆,這種class文件用反編譯工具得到的結果很難看懂,并且不能進行編譯。本文從研究的角度,淺析如何讀懂這種反編譯過來的文件。

例子一:賦值反編譯過來的代碼如下:

Node node;

Node node1 = _$3.getChildNodes().item(0);

node1;

node1;

JVM INSTR swap ;

node;

getChildNodes();

0;

item();

getChildNodes();

0; item();

getNodeValue();

String s;

s;原始語句:

Node node;

Node node1 = currDocument.getChildNodes().item(0); node = node1;

String s = node.getChildNodes().item(0).getChildNodes().item(0).getNodeValue();

注解:

JVM INSTR swap ;

//賦值語句練習:

String s1;

String s8 = node.getChildNodes().item(1).getChildNodes().item(0).getNodeValue();

s8;

s8;

JVM INSTR swap ;

s1;

10;

Integer.parseInt();

int i;

i;

例子二:不帶參數創建對象反編譯過來的代碼如下:

JVM INSTR new #244 <Class CrossTable>;

JVM INSTR dup ;

JVM INSTR swap ;

CrossTable();

CrossTable crosstable;

crosstable;

原始語句:

CrossTable crosstable = new CrossTable();

注解:

練習:

JVM INSTR new #246 <Class Database>;

JVM INSTR dup ;

JVM INSTR swap ;

Database();

Object obj;

obj;

例子三:帶參數創建對象反編譯過來的代碼如下:

JVM INSTR new #262 <Class StringBuffer>;

JVM INSTR dup ;

JVM INSTR swap ;

String.valueOf(s2);

StringBuffer();

s.substring(j, i);

append();

s6;

append();

toString();

s2; 原始語句: s2 = (new StringBuffer(String.valueOf(s2))).append(s.substring(j, i)).append(s6).toString();

注解:

此語句實際上是:s2 += s.substring(j, i) + s6;

練習:

例子四:for循環反編譯過來的代碼如下:

int k = 0;

goto _L4_L8: ... k++;_L4:

if(k < as.length) goto _L8; else goto _L7

原始語句: for(int k=0;k < as.length;k++) { ... }

注解:

例子五:while循環反編譯過來的代碼如下:

String s1 = "";

goto _L1_L3:

JVM INSTR new #262 <Class StringBuffer>;

JVM INSTR dup ;

JVM INSTR swap ;

String.valueOf(s1);

StringBuffer();

_$2(resultset, s, l);

append();

toString();

s1;_L1:

if(resultset.next()) goto _L3; else goto _L2

原始語句: String s1 = "";

while(resultset.next()) {

s1 = s1 + resultSetToString(resultset, s, l);

}

java的注釋,java如何反混淆