检测功能的结尾/序言

逆向工程 艾达 idapro插件 蟒蛇 静态分析 职能
2021-06-22 20:08:13

我试图在 IDApython 中捕捉函数的结尾/序言。任何人都知道我该怎么做的线索/片段/算法?

2个回答

仍然不完全清楚你希望做什么。IDA 没有返回函数的序言或结尾的函数。下面是一些代码,将迭代所有函数,并提供一些您可能添加的建议:

for s in idautils.Functions():
   f = idaapi.get_func(s)
   e = f.endEA
   #s is the start of the function e is the end of the function
   #You can iterate over a functions items with the following
   for i in idautils.FuncItems(s):
      #i is the ea of each function item
      print "%x" % i

如果您对正在寻找的特定序言和尾声有一些想法(push ebp/move ebp,esp?leave/ret?pop ebp/ret?),您总是可以尝试在开始和结束 EA 周围匹配相应的操作码序列。

虽然我不完全确定您的最终目标是什么,但我发现自己在处理需要查找功能的固件转储时。根据架构的不同,当您谈论函数序言时,这会变得很有趣。我发现Milad Kahsari Alhadi 博客中的这个脚本很有用,可能是您查看的一个很好的参考。实际上,该脚本遍历(如上面 WS 所评论的)手动定义或在自动分析中定义的函数,并枚举其“序言”的一部分,然后尝试在二进制文件中找到类似的字节字符串,并尝试对它们进行 MakeCode。

过去,我修改了这个脚本以针对一个在 IDA 中分析得很好的文件(也就是相同架构的 ELF)运行,然后吐出“序言”来针对我懒得手动查找的固件映像使用职能。

注意:我将序言放在引号中,因为实际上这个脚本只是获取第一个操作码并根据我们“喜欢”的助记符检查它。因此,它并没有真正找到可能是您所追求的任意序言。