java class反编译后的代码还原

java class反编译后的代码还原
java class反编译后的代码还原

javaclass利用jad反编译之后,偶尔回碰到一些不正常的代码,例如:

label0:_L1MISSING_BLOCK_LABEL_

30、JVM INSTR ret

7、JVM INSTR tableswitch 1 3: default

269、JVM INSTR monitorexit、JVM INSTR monitorenter,这些一般是由特殊的for循环、try catchfinally语句块、synchronized语句反编译后产生的。下面,就简单介绍一下,一些反编译后的特殊代码的还原规则。

异常

下面的代码前提是类中有如下属性,

Calendar cal = Calendar.getInstance();

1、Exceptioin的还原

反编译后的代码如下:

public boolean f1() { return cal.getTime().after(new Date());Exception e;

e;

e.printStackTrace();

return false;

}还原后的Java代码public boolean f1() { try { return cal.getTime().after(new Date());} catch (Exception e) { e.printStackTrace();

return false;

} }

2、finally代码的还原反编译后的Java代码如下:

publicbooleanf2(){booleanflag=cal.getTime().after(new Date());

System.out.println("finally");

return flag;

Exception e;

e;

e.printStackTrace();

System.out.println("finally");

return false;

Exception exception;

exception;

System.out.println("finally");

throw exception;

}还原后的代码如下:

public boolean f2() { try { return cal.getTime().after(new Date());} catch (Exception e) { e.printStackTrace();

return false;

} finally { System.out.println("finally");

} }

3、MISSING_BLOCK_LABEL_的还原反编译后的代码

publicObjectf22(){Datedate=cal.getTime();

System.out.println("finally");

return date;

Exception e;

e;

e.printStackTrace();

System.out.println("finally");

break MISSING_BLOCK_LABEL_45;

Exception exception;

exception;

System.out.println("finally");

throw exception;

return null;

}还原后的Java代码public Object f22() { try { return cal.getTime();

} catch (Exception e) { e.printStackTrace();

} finally { System.out.println("finally");

} return null;}

4、异常中:

label的还原反编译后的代码

publicStringf4()throwsException{label0:{try{ Integer i = new Integer

(1);

if(i.intValue() >

0) { System.out.println(i);

break label0;

} System.err.println(i);

} catch(Exception dae) { System.err.println(dae);

throw new RuntimeException(dae);

} return null;

} return "Hello";

}注意,这个代码有点诡异,实际代码如下:

public String f4() throws Exception { try { Integeri = new Integer

(1);

if (i.intValue() >

0) { System.out.println(i);

} else { System.err.println(i);

return null;

} return "Hello";

} catch (Exception dae) { System.err.println(dae);

throw new RuntimeException(dae);

} }

5、典型数据库操作代码还原反编译后代码public HashMap f5() { Connection conn = null;HashMap hashmap;

HashMap map = new HashMap();

Class.forName("");

conn = DriverManager.getConnection("jdbc:

odbc:

");

PreparedStatement pstmt = conn.prepareStatement("select * from table");

pstmt.setString(1, "param");

String columnVallue;

for(ResultSet rs = pstmt.executeQuery();

rs.next();

map.put(columnVallue, "")) columnVallue = rs.getString("column"); hashmap = map;

if(conn != null) try { conn.close();

} catch(SQLException sqlce) { sqlce.printStackTrace();

} return hashmap;

if(conn != null) try { conn.close();

} catch(SQLException sqlce) { sqlce.printStackTrace();

} break MISSING_BLOCK_LABEL_188;

SQLException sqle;

sqle;

sqle.printStackTrace();

if(conn != null) try { conn.close();

} catch(SQLException sqlce) { sqlce.printStackTrace();

} break MISSING_BLOCK_LABEL_188;

Exception exception;

exception;

if(conn != null) try { conn.close();

} catch(SQLException sqlce) { sqlce.printStackTrace();

} throw exception;

return null;

}实际代码如下:

public HashMap f5() { Connection conn = null;

try { HashMap map = new HashMap();

Class.forName("");

conn = DriverManager.getConnection("jdbc:

odbc:

");

PreparedStatement pstmt = conn.prepareStatement("select * from table"); pstmt.setString(1, "param");

ResultSet rs = pstmt.executeQuery();

while (rs.next()) { String columnVallue = rs.getString("column");

map.put(columnVallue, "");

} return map;

} catch (SQLException sqle) { sqle.printStackTrace();

} finally { if (conn != null) { try { conn.close();

} catch (SQLException sqlce) { sqlce.printStackTrace();

} } } return null;}

System.out.println("finally"); return i;

Exception e1;

e1;e1.printStackTrace();

System.out.println("finally");

return -1;

Exception e2;

e2;e2.printStackTrace();

System.out.println("finally");

return -2;

Exception exception;

exception;

System.out.println("finally");

throw exception;

1.printStackTrace();

return -1;

} } catch (Exception e2) { e

2.printStackTrace();

return -2;

} finally { System.out.println("finally");

} }

System.out.println("finally");

return i;

Exception e1;

e1;e1.printStackTrace();

_L2: System.out.println("finally"); return -1;

Exception e2;

e2;e2.printStackTrace();

if(true) goto _L2;

else goto _L1 _L1: Exception exception; exception;

System.out.println("finally");

throw exception;

1.printStackTrace();

return -1;

} } catch (Exception e2) { e

2.printStackTrace();

return -1;

} finally { System.out.println("finally"); } }

相关主题
相关文档
最新文档