當前位置:編程學習大全網 - 源碼下載 - 混淆的class文件怎麽進行反編譯

混淆的class文件怎麽進行反編譯

壹般情況下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 ;

JVM INSTR dup ;

JVM INSTR swap ;

CrossTable();

CrossTable crosstable;

crosstable;

原始語句:

CrossTable crosstable = new CrossTable();

註解:

練習:

JVM INSTR new #246 ;

JVM INSTR dup ;

JVM INSTR swap ;

Database();

Object obj;

obj;

例子三:帶參數創建對象

反編譯過來的代碼如下:

JVM INSTR new #262 ;

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 ;

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);

}

  • 上一篇:受疫情影響張家口崇禮七家景區和滑雪場2022年1月4日起暫不接受遊客
  • 下一篇:抽象類有構造方法嗎?
  • copyright 2024編程學習大全網