-
-
[重发]一个快速查找叶节点函数的ida脚本,非常方便
-
-
[重发]一个快速查找叶节点函数的ida脚本,非常方便
平日分析一个函数的功能时,为了弄清楚该函数的功能,总是不得不必须先行分析该函数调用的那些子函数的功能,但跳转到子函数去分析时,又要先行分析
该子函数调用的那些子函数,如此循环下去,不胜其烦。于是通常的办法都是从该函数的调用树最底层的函数(我称为叶节点函数)开始,一层一层往上分析。
然而找到该函数最终调用的那些叶节点函数又不方便,IDA倒是自带提供了一个交叉引用外部图形工具,可将一个函数的调用树直接画出来,然而画出来的图形
一团糟,很不清晰,所以我想到了用脚本代替,一次性直接找到那些叶节点函数
另一个需求是:一旦找到了那些叶节点函数,比如找到一个叶节点函数sub_444444,该函数除了调用一些知名的库函数外,不再调用其他函数。我习惯将所有找到
的分析完毕的所有叶节点函数更名为xy前缀形式的函数名,这样,下次再重复寻早那个高层函数的所有叶节点函数,这些所有已更名为xy前缀的原叶节点函数
就不再是叶节点了。(你可以修改脚本文件,将里面的xy字样替换成你喜欢的前缀名)
脚本使用方法:
将附件中的ida.idc文件放在ida安装目录下的idc目录中,替换即可(你自己先备份一下原来的ida.idc吧),然后启动IDA,将光标放在一个函数内部,按下Shift
+Alt+L快捷键,就可以一次性列举出该函数调用的所有叶节点函数了,当你逐个分析完那些叶节点函数后,更名为xy前缀,然后回到原高层函数内部,再次按快捷键
Shift+Alt+L,这个时候列举出的叶节点函数就是先前那些叶节点函数的上层函数了,如此循环,各个击破,嘿嘿
上次发的V1.1版本避免了直接递归函数造成的一直runing问题
但是形如:
void f1()
{
f2();
}
void f()
{
f1();
}
void f2()
{
f();//实际上f间接递归调用了f2
f1();//f1与f2之间交叉调用
}
这种相互的交叉和间接递归调用也会造成脚本一直runing的问题
V1.2版本已经纠正V1.1没注意到的这个问题
另外对于形如下面的这种残缺函数(Debug版尤其多),V1.1版本处理得也不是很好
f()
{
指令
指令
指令
....
jmp 外部函数
}
V1.2版本已纠正这些问题,你可以直接在WinMain()函数内部运行脚本,几秒钟就可以快速找到所有底层的叶节点函数,一般不会出现一直runing的问题
另外修改了脚本的结果输出方式,你可以双击消息窗口中的每一行跳转到对应的函数
另外附带的一个功能是:像VC一样,按 Ctrl+[ 快捷键可以一下子跳转到函数开头处,Ctrl+] 快捷键可以一下子跳转到函数结尾处
献给大家喽,有什么好的其他功能和不足,自己完善去吧,求致谢~
欢迎大家下载使用,使用过程中发现有什么问题请帖出来,请随时注意后面的脚本更新...
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)