-
-
[原创]Android逆向-手工还原异常处理技巧
-
发表于:
2017-6-23 01:06
6830
-
最近在学习Android的逆向,发现很多工具对Android异常处理方面的反汇编还原效果很差,甚至使用有些工具遇到复杂的情况还会发生错误,所以在对抗层面上,开发者会选择把重要的代码,套在异常处理中,这时候逆向者就需要手工去还原smali代码了,废话不多说,上个小例子,另附上demo一份(知识浅薄,小生本也愚钝,如有错误,还望各位大虾请轻喷)
开发环境:Eclipse
逆向环境:JEB 2.2.7
系统环境:Win 7 64bit
首先来试试一个try 一个 catch 的情况:
编译完成,apk直接拖到JEB,按Q即可还原出代码:
这时候试试复杂点的情况把(try 两句代码会产生异常,并使用两个对象接收):
这时候我们再使用JEB的Q功能还原,可以看到,JEB已经还原不完全了,虽然代码经我们稍作修改,也能还原!
但是如果碰到更复杂的,jeb还原的代码,就看得我们不知所措了!!
这时候我们再次按Q ,回到samli语法,拖动到该函数最尾部,可以看到catch的管理表:
表结构:
.catch Ljava/io/FileNotFoundException; {:10 .. :1A} :30
“10” : try开始的地方
“1A” : 指的是try结束的地方
“30” : 指的是catch处理的地方
“FileNotFoundException” : 指的是接收异常的对象类型
接着综合表结构的知识,进行手工分析:
10 - 1A :
1A - 2C :
我们看到v4 在此代码块直接使用,并且两处的.line相邻着 由此可得知,此代码块跟上面(10 - 1A
)的是同一块
30 - 3A :
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)