python静态递归函数_利用IDA Python静态分析函数调用路径

在挖掘设备的固件漏洞时,会面临没有源代码、无法动态跟踪调试的情况,此时就需要进行静态的人工分析。在静态人工分析过程中,往往需要围绕危险函数、用户输入提取需要重点分析的执行路径,以有效缩小分析范围。本文利用IDA Python脚本,实现了自动提取函数正、反向调用关系的功能,可有效辅助分析危险函数调用路径,用户输入流向等。

一、问题描述

近期在研究某款设备,由于该设备使用MIPS架构,IDA Pro的F5无法使用,安装的RetDec插件也不给力,给出的伪代码不忍直视;还有不少代码IDA Pro没有识别出来,且无法识别库函数;此外,固件使用传统的嵌入式操作系统(非类Linux)实现,不存在进程等高级概念,因此也没有解决动态调试的问题。在这种情况下,似乎只能人工静态分析了。

进行初步分析之后,发现需要先解决两个问题:一是将IDA pro无法识别的代码强制转换成代码,以完善IDA pro的交叉引用关系;二是以文本方式提取函数调用关系(正向、反向),取IDA pro的Xrefs graph to和Xrefs graphp from功能,IDA pro的这两个功能对稍微复杂一定的文件根本不存在实用性——显示的图形根本看不清。

二、强制转换未解析的代码

针对第一个问题,考虑到MIPS的指令均为32bit,可利用IDAPython遍历指定的地址空间,把未定义的部分全部转换成代码。具体的代码如下:

def define_func(beg, end):

cur = beg

if beg%4 != 0:

cur = beg 4 - beg%4 # 对齐

end = end - end%4

while cur < end:

if ida_kernwin.user_cancelled():

print('Cancelled')

break

cur_func = ida_funcs.get_func(cur)

print("cur 0xx" % cur)

if cur_func is None:

if ida_funcs.add_func(cur):

cur = ida_funcs.get_func(cur).endEA

else:

cur = cur 4

else:

cur = cur_func.endEA

使用时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值