JAVA代码混淆,jar混淆反编译
一般情况下爪哇应用的开发者为了保护代码不被别人抄袭,在生成班级文件的时候都爪哇岛文件进行了混淆,这种班级文件用反编译工具得到的结果很难看懂,并且不能进行编译。本文从研究的角度,浅析如何读懂这种反编译过来的文件。
例子一:赋值
反编译过来的代码如下:
节点节点;
节点node1=_$3.getChildNodes().项目(0);
节点1
节点1
JVM INSTR交换;
节点;
getChildNodes();
0;
item();
getChildNodes();
0;
item();
getNodeValue();
字符串s;
s;
原始语句:
节点节点;
节点node 1=币种单据。获取子节点().项目(0);
节点=节点1
String s=node.getChildNodes().项目(0)。getChildNodes().项目(0)。getNodeValue();
注解:
JVM INSTR交换;//赋值语句
练习:
字符串S1;
String s8=node.getChildNodes().第(1)项getChildNodes().项目(0)。getNodeValue();
S8;
S8;
JVM INSTR交换;
S1;
10;
整数。parse int();
int I;
我;
例子二:不带参数创建对象
反编译过来的代码如下:
JVM INSTR新#244类交叉表
虚拟机(Java Virtual Machine的缩写)指令民主统一党
JVM INSTR交换;
CrossTable();
交叉表交叉表;
交叉表;
原始语句:
CrossTable CrossTable=new CrossTable();
注解:
练习:
JVM INSTR新的#246类数据库
虚拟机(Java Virtual Machine的缩写)指令民主统一党
JVM INSTR交换;
database();
对象目标文件
目标文件
例子三:带参数创建对象
反编译过来的代码如下:
JVM INSTR新# 262类字符串缓冲区
虚拟机(Java Virtual Machine的缩写)指令民主统一党
JVM INSTR交换;
字符串。(S2)的价值;
字符串缓冲区();
s.substring(j,I);
append();
S6;
append();
toString();
S2;
原始语句:
S2=(新字符串缓冲区(字符串。(S2的)价值.append(s.substring(j,I))。追加(s6).toString();
注解:
此语句实际上是:s2=s.substring(j,I)S6;
练习:
例子四:用于循环
反编译过来的代码如下:
int k=0;
goto _L4
_L8:
.
k;
_L4:
如果(k为。长度)goto _ L8否则转到_L7
原始语句:
for(int k=0;k为长度;k)
{
.
}
注解:
例子五:当循环
反编译过来的代码如下:
字符串S1=" ";
去腰神经2
_L3:
JVM INSTR新# 262类字符串缓冲区
虚拟机(Java Virtual Machine的缩写)指令民主统一党
JVM INSTR交换;
字符串。(S1)的价值;
字符串缓冲区();
_$2(结果集,s,l);
append();
toString();
S1;
_L1:
if(resultset。next())goto _ L3;否则去L2
原始语句:
字符串S1=" ";
while(resultset.next())
{
S1=S1结果集tostring(结果集,s,l);
}
注解:
http://apps.hi.baidu.com/share/detail/17189115
欢迎有此兴趣的朋友和我交流。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。