欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Android逆向-手工还原异常处理技巧

[原创]Android逆向-手工还原异常处理技巧

最近在学习Android的逆向,发现很多工具对Android异常处理方面的反汇编还原效果很差,甚至使用有些工具遇到复杂的情况还会发生错误,所以在对抗层面上,开发者会选择把重要的代码,套在异常处理中,这时候逆向者就需要手工去还原smali代码了,废话不多说,上个小例子,另附上demo一份(知识浅薄,小生本也愚钝,如有错误,还望各位大虾请轻喷)

开发环境:Eclipse

逆向环境:JEB 2.2.7

系统环境:Win 7 64bit


首先来试试一个try 一个 catch 的情况:

 


编译完成,apk直接拖到JEB,按Q即可还原出代码:

 

 

这时候试试复杂点的情况把(try 两句代码会产生异常,并使用两个对象接收):

  


这时候我们再使用JEBQ功能还原,可以看到,JEB已经还原不完全了,虽然代码经我们稍作修改,也能还原!

但是如果碰到更复杂的,jeb还原的代码,就看得我们不知所措了!!

 


这时候我们再次按Q ,回到samli语法,拖动到该函数最尾部,可以看到catch的管理表:

 

 

表结构:

.catch Ljava/io/FileNotFoundException; {:10 .. :1A} :30

10 : try开始的地方

1A : 指的是try结束的地方

30 : 指的是catch处理的地方

FileNotFoundException : 指的是接收异常的对象类型

 

接着综合表结构的知识,进行手工分析:

10 - 1A

 

// File file = new File("/data/local/1.txt"); // try上面的代码

try {

 

    v4 = new FileOutputStream(file);

 

}


1A - 2C

 

 

我们看到v4 在此代码块直接使用,并且两处的.line相邻着 由此可得知,此代码块跟上面(10 - 1A

)的是同一块

String v5 = "hello";

v4.write(v5.getBytes());

FileOutputStream v3 = v4;

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功