android反编译apk后,java文件中出现的一些类似乱码的问题
2014-12-11 00:58
609 查看
参考文章:点击打开链接
例如:
label0 :_L1 MISSING_BLOCK_LABEL_30
JVM INSTR ret 7
JVM INSTR tableswitch 1 3: default 269、
JVM INSTR monitorexit
JVM INSTR monitorenter
这些一般是由特殊的for循环、try catch finally语句块、synchronized语句反编译后产生的。
下面,就简单介绍一下,一些反编译后的特殊代码的还原规则。
还原后的Java代码
概述
java class 反编译之后,偶尔回碰到一些不正常的代码例如:
label0 :_L1 MISSING_BLOCK_LABEL_30
JVM INSTR ret 7
JVM INSTR tableswitch 1 3: default 269、
JVM INSTR monitorexit
JVM INSTR monitorenter
这些一般是由特殊的for循环、try catch finally语句块、synchronized语句反编译后产生的。
下面,就简单介绍一下,一些反编译后的特殊代码的还原规则。
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代码如下public boolean f2() { boolean flag = 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_的还原
反编译后的代码public Object f22() { Date date = 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的还原
反编译后的代码public String f4() throws Exception { 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 { Integer i = 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; ClassNotFoundException cnfe; cnfe; cnfe.printStackTrace(); 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 (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } catch (SQLException sqle) { sqle.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException sqlce) { sqlce.printStackTrace(); } } } return null; }
6、两层异常嵌套代码还原
反编译后的代码public int f6() { int i = cal.getTime().compareTo(new Date()); 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; }实际代码
public int f6() { try { try { return cal.getTime().compareTo(new Date()); } catch (Exception e1) { e1.printStackTrace(); return -1; } } catch (Exception e2) { e2.printStackTrace(); return -2; } finally { System.out.println("finally"); } } }
7、非常诡异的代码
反编译后的代码public int f7() { int i = cal.getTime().compareTo(new Date()); } 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; }原始代码
public int f7() { try { try { return cal.getTime().compareTo(new Date()); } catch (Exception e1) { e1.printStackTrace(); return -1; } } catch (Exception e2) { e2.printStackTrace(); return -1; } finally { System.out.println("finally"); } }
相关文章推荐
- javac命令编译java文件成class文件出现中文乱码问题解决
- 用anjuta编译gtk程序时出现类似与"main.c::10:21:gtk/gtk.h:没有那个文件和目录"问题的解决
- java编译UTF-8文件乱码的问题
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题解决起来很简单
- android读取文件时乱码的问题,以及eclipse中java编码查看方式
- Android apk 文件反编译&&如何反编译xml文件&&如何看到apk文件中的java源代码
- Myeclipse出现 java文件中文乱码问题(转载javaeye)
- 载入到Myeclipse中的java文件出现中文乱码的问题
- Myeclipse出现 java文件中文乱码问题
- Android开发中,使用线程下载apk文件,出现FileNotFound的问题,解决办法
- java压缩文件出现中文乱码问题
- 编译Android源码时出现的java版本的问题
- 解决Java获取文件路径出现乱码的问题
- android js调用java 并取得java当中的返回值返回到js的做法其实很简单,打包后出现问题记得修改proguard.cfg文件
- 在Linux下运行编译java文件时出现的问题
- Myeclipse出现 java文件中文乱码问题
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- ANDROID导入文件后的本地无法编译生成R.java的问题
- 解决打开Android SDK Manager时出现“.....\sdk\tools\lib\\find_java.exe不是内部或外部命令,也不是可运行的程序或批处理文件“问题