您的位置:首页 > 编程语言 > Java开发

如何看懂Java混淆后的反编译代码

2013-01-24 13:20 381 查看
如何看懂Java混淆后的反编译代码

分类: JAVA相关

如何看懂Java混淆后的反编译代码

作者:dozb

一般情况下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);

}

分享到:

上一篇:Tomcat的class加载的优先顺序一览
下一篇:惨淡人生,平淡生活
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: