前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

高分寻求帮助-java反编译_J2EE_积木群组 积木首页 - 学院 - 软件测试 - 技术百科 - 问答 - 黄页 - 手册 - 站长工具 - 社区 登录 | 注册 关键字: 找答案 群组 >> J2EE J2EE 共有1554位成员   人气指数 -   最新排名 - 【话题】高分寻求帮助-java反编译 2009-07-19 02:14:04 来自:zhanglj1011 浏览数:96次 请求大虾帮助,还原下面的方法,不胜感激! public void run() { ThreadPoolExecutor threadpoolexecutor; init(); threadpoolexecutor = getRunner(); lastIdleTime = System.currentTimeMillis(); _L3: boolean flag; flag = false; if(udpSocket == null) { synchronized(this) { running = false; } break; /* Loop/switch isn't completed */ } try { label0: { byte abyte0[] = new byte[maxPacketSize]; DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length); udpSocket.receive(datagrampacket); long l1 = System.currentTimeMillis(); int i = datagrampacket.getLength(); if(i > 0) { lastIdleTime = l1; threadpoolexecutor.execute(new LoadBalancerListenerHandler(abyte0, 0, i)); } synchronized(this) { if(!quit) { break label0; } running = false; } break; /* Loop/switch isn't completed */ } } catch(SocketTimeoutException sockettimeoutexception) { label1: { synchronized(this) { if(!quit) { break label1; } running = false; } break; /* Loop/switch isn't completed */ } } catch(Exception exception1) { label2: { synchronized(this) { if(!quit) { break label2; } running = false; } break; /* Loop/switch isn't completed */ } } loadbalancerlistener4; JVM INSTR monitorexit ; break MISSING_BLOCK_LABEL_237; exception3; throw exception3; loadbalancerlistener2; JVM INSTR monitorexit ; goto _L1 exception4; throw exception4; _L1: flag = true; break MISSING_BLOCK_LABEL_237; loadbalancerlistener3; JVM INSTR monitorexit ; break MISSING_BLOCK_LABEL_237; exception5; throw exception5; if(flag) { long l = System.currentTimeMillis(); if(l - lastIdleTime > (long)idleInterval) { lastIdleTime = l; threadpoolexecutor.execute(new LoadBalancerListenerIdler()); } } if(true) goto _L3; else goto _L2 _L2: try { synchronized(this) { if(udpSocket != null) { udpSocket.close(); } udpSocket = null; } } catch(Exception exception) { } killRunner(); shutdown(); return; } 更多相关的话题 twy1997回复于19日02点59分  我用的就是cjava, 谢谢 笨鸟先飞回复于19日03点06分  还原这个里的方法?也太离谱了。我试下我的反编器看看 金路杰回复于19日03点16分  答:楼主的这个代码没有经过混淆器,而且代码结构简单,很容易还原的。 1)由于楼主没有同时提供.class文件[提供了.class文件,可以完全准确还原],楼主所提供的还原代码有部分信息丢失,还好由于程序简单,已正确判读还原了。 2)还原代码如下: (1)楼主虽然只提供了这个run()方法的代码,但从代码中,已正确判读出该方法所在的类,类名一定叫“ LoadBalancerListener”,这是从代码中第一个判读还原出来的。 (2)代码中看起来混乱的部分实际上是由try()catch{}造句产生的,其实对经常判读class代码的程序员,它是很清楚的,一点也不混乱的。 (3)还原的代码: Java code public void run() { ThreadPoolExecutor threadpoolexecutor; init(); threadpoolexecutor = getRunner(); lastIdleTime = System.currentTimeMillis(); while(true){ boolean flag; flag = false; if(udpSocket == null) { synchronized(this) { running = false; break; } } try { byte abyte0[] = new byte[maxPacketSize]; DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length); udpSocket.receive(datagrampacket); long l1 = System.currentTimeMillis(); int i = datagrampacket.getLength(); if(i > 0) { lastIdleTime = l1; threadpoolexecutor.execute(new LoadBalancerListenerHandler(abyte0, 0, i)); } synchronized(this) { if(quit) { running = false; break; } } } catch(SocketTimeoutException sockettimeoutexception) { synchronized(this) { if(quit) { running = false; break; } } flag=true; } catch(Exception exception1) { synchronized(this) { if(quit) { running = false; break; } } } if(flag) { long l = System.currentTimeMillis(); if(l - lastIdleTime > (long)idleInterval) { lastIdleTime = l; threadpoolexecutor.execute(new LoadBalancerListenerIdler()); } } }//while(true) try { synchronized(this) { if(udpSocket != null) { udpSocket.close(); } udpSocket = null; } } catch(Exception exception) { } killRunner(); shutdown(); return; } (4)由于楼主没有提供.class文件,如何验证判读的结果是正确的? 将它编译成.class文件后,再用JAVA反编译程序反编译出代码,楼主可看到,结果[run()的反编译代码与楼主提供的是一模一样的] //以下是对还原后的代码,编译成.class文件后,再用JAVA反编译程序反编译代码[与楼主的代码反编译代码相对比] 说明:为了程序能正确编译,加补了正确的类名,及程序中引用到的其它方法与变量。 Java code // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: LoadBalancerListener.java import java.net.*; import java.util.concurrent.ThreadPoolExecutor; public class LoadBalancerListener { public void run() { init(); ThreadPoolExecutor threadpoolexecutor = getRunner(); lastIdleTime = System.currentTimeMillis(); _L3: boolean flag; flag = false; if(udpSocket == null) { synchronized(this) { running = false; } break; /* Loop/switch isn't completed */ } try { label0: { byte abyte0[] = new byte[maxPacketSize]; DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length); udpSocket.receive(datagrampacket); long l1 = System.currentTimeMillis(); int i = datagrampacket.getLength(); if(i > 0) lastIdleTime = l1; synchronized(this) { if(!quit) break label0; running = false; } break; /* Loop/switch isn't completed */ } } catch(SocketTimeoutException sockettimeoutexception) { label1: { synchronized(this) { if(!quit) break label1; running = false; } break; /* Loop/switch isn't completed */ } } catch(Exception exception1) { label2: { synchronized(this) { if(!quit) break label2; running = false; } break; /* Loop/switch isn't completed */ } } loadbalancerlistener4; JVM INSTR monitorexit ; break MISSING_BLOCK_LABEL_218; exception3; throw exception3; loadbalancerlistener2; JVM INSTR monitorexit ; goto _L1 exception4; throw exception4; _L1: flag = true; break MISSING_BLOCK_LABEL_218; loadbalancerlistener3; JVM INSTR monitorexit ; break MISSING_BLOCK_LABEL_218; exception5; throw exception5; long l; if(flag) l = System.currentTimeMillis(); if(true) goto _L3; else goto _L2 _L2: try { synchronized(this) { if(udpSocket != null) udpSocket.close(); udpSocket = null; } } catch(Exception exception) { } killRunner(); shutdown(); return; } //以下是加被的空的方法与变量名,目的是:能够正确通过编译。 public LoadBalancerListener() { udpSocket = null; running = false; maxPacketSize = 0; } void init() { } void killRunner() { } void shutdown() { } ThreadPoolExecutor getRunner() { return null; } long lastIdleTime; DatagramSocket udpSocket; boolean running; boolean quit; int maxPacketSize; } 欢乐时光回复于19日03点27分  答:12楼中用于验证的人工判读还原后的JAVA代码[目的:与楼主的反编译代码对比],如下: Java code import java.util.concurrent.*; import java.net.*; class LoadBalancerListenerHandler {}//空,用于通过编译 public class LoadBalancerListener { public void run() { ThreadPoolExecutor threadpoolexecutor; init(); threadpoolexecutor = getRunner(); lastIdleTime = System.currentTimeMillis(); while(true){ boolean flag; flag = false; if(udpSocket == null) { synchronized(this) { running = false; break; } } try { byte abyte0[] = new byte[maxPacketSize]; DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length); udpSocket.receive(datagrampacket); long l1 = System.currentTimeMillis(); int i = datagrampacket.getLength(); if(i > 0) { lastIdleTime = l1; // threadpoolexecutor.execute(new LoadBalancerListenerHandler(abyte0, 0, i)); } synchronized(this) { if(quit) { running = false; break; } } } catch(SocketTimeoutException sockettimeoutexception) { synchronized(this) { if(quit) { running = false; break; } } flag=true; } catch(Exception exception1) { synchronized(this) { if(quit) { running = false; break; } } } if(flag) { long l = System.currentTimeMillis(); // if(l - lastIdleTime > (long)idleInterval) // { // lastIdleTime = l; // threadpoolexecutor.execute(new LoadBalancerListenerIdler()); // } } }//while(true) try { synchronized(this) { if(udpSocket != null) { udpSocket.close(); } udpSocket = null; } } catch(Exception exception) { } killRunner(); shutdown(); return; } //以下是人为加上的内容,以便通过编译。 void init(){} void killRunner(){} void shutdown(){} ThreadPoolExecutor getRunner(){return null;} long lastIdleTime; DatagramSocket udpSocket=null; boolean running=false,quit; int maxPacketSize=0; } 对上述代码进行编译.class文件后,再次反编译,看run()反编译代码与楼主的反编译代码对比,以进行验证。还是最好提供.class文件,这样可不用再次验证了。 淩櫻薇回复于19日03点34分  不会,帮顶了。 黄一冰回复于19日03点41分  你用的是什么反编译工具,有一个cjava感觉很好,你要么,发给你 遗莣濄紶回复于19日03点45分  小颖 juliahe回复于19日03点55分  jad , 把带$号的也 反编译 popjw2回复于19日04点02分  我也是用的小颖,以前用CAVAJ,前辈说CAVAJ有时反编译会出错 飘飘然回复于19日04点10分  这个真不知道。。。 哈哈大牛哈哈回复于19日04点15分  答:到目前为止,所有的反编译软件对synchronized(){}及try{}catch{}都不能正确还原,但由于结构简单,经过人工判读,都可正确判读并正确还原。 一个建议:以后楼主不要只提供反编译的代码,要提供.class文件,这样好完全准确还原[而不用对还原后的代码,再次进行编译.class后,再反编译后与你原来的反编译代码进行对比。] 雪cxh73回复于19日04点22分  学习了,不只是技术,还有精神。。。谢谢 cst1026回复于19日04点32分  云上飞翔大虾, 非常感谢,向您学习 xiaoxiaoh回复于19日04点37分  不懂,看看。 百思要其解回复于19日04点44分  期待,帮顶 caicai回复于19日04点48分  不会,帮顶! 快乐的文回复于19日04点54分  学习了 up wangke1996回复于19日05点02分  再顶 mtony2008回复于19日05点10分  帮顶 > 返回话题列表 J2EE的其他话题... 有没有会PHP的, 寻求帮助! VC操作WORD出问题。寻求帮助 ATL 初级问题:还没有解决,再次描述,寻求帮助…… 高分寻求项目组 哪位大虾大航海时代2源程序(pc版的),或者告诉我怎么反编译大航海时代2 高分寻求Outlook,Outlook Express的通讯录的提取和写入代码。 (100分) 寻求帮助:用vc实现QPSK方式的调制并画出星座图。 高分求一个Java基础知识 高分寻求《深入浅出JAVA SWING 程序设计》电子书 jad反编译修改了java文件再编译成class替换出现404错误 寻求帮助:JAVA编译器和JVM的版本不相同 寻求帮助,JAVA开发想德州扑克类似的游戏使用什么技术? 为什么用XJAD反编译过来的JAVA文件,再用JAVAC编译会出错? 不能用jad软件反编译的JAVA问题 高分寻求帮助java反编译2 网址导航成语大全积木 TinyMCE 服务邮箱: Gimoohr(#)gmail.com Copyright © 2008 Gimoo.Net 京ICP备05050695号