JAVA反编译(一)

JAVA编译后的CLass是很容易被反编译的,网上这类工具也比较多。这里是用了DJ Java Decompiler工具。一般没有被混淆过的JAVA代码反编译后基本上都能正常阅读,也有少部分是工具无法完整反编译出来,会带一些JVM语言和label等。如果被混淆过的JAVA代码反编译后前面的情况会出现的更多一些,同时还会把私有变量、方法、类的名称混淆成不方便阅读。这里就记录一下反编译时常见的一些形式。

一、最常见是new一个对象赋给一个变量
JVM INSTR new #2   <Class ArrayList>;
JVM INSTR dup ;
JVM INSTR swap ;
ArrayList();
List tobeRemove;
tobeRemove;

转化后代码为:
List tobeRemove=new ArrayList();

从上面反编译出来的代码可以看出JAVA里面new一个对象的过程。

二、比较复杂的对象创建语句
JVM INSTR new #48  <Class Area>;
JVM INSTR dup ;
JVM INSTR swap ;
JVM INSTR new #49 <Class java.awt.geom.RoundRectangle2D$Float>;
JVM INSTR dup ;
JVM INSTR swap ;
0.0F;
0.0F;
(float)(getWidth() - 1);
(float)(getHeight() - 10);
10F;
10F;
java.awt.geom.RoundRectangle2D.Float();
Area();
Area area;
area;

转化后为:
Area area=new Area(new java.awt.geom.RoundRectangle2D.Float(0.0F,0.0F,(float)(getWidth() - 1),(float)(getHeight() - 10),10F,10F));


三、同步代码
HashMap hashmap = tasks;
JVM INSTR monitorenter ;
if(tasks.remove(new Integer(iTaskID)) == null)
return false;
hashmap;
JVM INSTR monitorexit ;
return false;
hashmap;
JVM INSTR monitorexit ;
throw ;


转化后为:
synchronized (tasks) {
if(tasks.remove(new Integer(iTaskID)) == null){
return false;
}else{
  return true;
}
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值