利用IDAPython给Windows API下条件断点


问题描述:在逆向分析过程,经常需要跟踪操作系统API的调用情况。使用IDA进行调试的过程中,可以通过界面操作给指定API设置断点。但是界面操作存在操作不便,不利于分析自动化等缺陷。使用IDAPython脚本实现给API函数下条件断点,可有效解决上述问题。一、通过界面操作给Windows API下断点1、操作过程以给LoadLibraryA函数下断点为例,程序ida01.exe(EXE文件)对应的源代码如下:①用IDA打开EXE文件后,设置调试器在入口暂停。操作路径:点击Debugger→Debugger setup,选中Suspend on process entry point。②按F9,运行EXE③在上图的modules窗口中找到kernel32.dll,然后双击,在右侧出现Module:kernel32.dll标签窗口,如下图所示
④找到LoadLibraryA函数,然后双击,IDA View窗口将导航至LoadLibraryA函数处,点击指定地址左侧的小圆点,即可下断点。下完断点后如下图所示
⑤如果只在加载SAEXT.DLL时中断执行,那么可以将断点设置成条件断点。具体方法:在Breakpoints窗口中右击指定断点,点击Edit,然后在condition编辑框中输入strstr(GetString(Dword(esp+4),-1, 0), "SAEXT.DLL") != -1。需要说明的是,此编辑框中必须是IDC脚本表达式,不能使用IDAPython脚本。表达式中Dword(esp+4)是获取第一个参数值,在此例中就是文件路径的指针,GetString(Dword(esp+4))是获取路径,strstr则进行搜索,如果路径中包含SAEXT.DLL为真,断点才有效。2、问题分析①上述下断点的过程,首先要确定API函数所在的DLL,而分析人员很难记住API函数与所在DLL的对应关系②无法与自动化脚本想结合,整个过程都需要人工介入二、IDAPython脚本实现Windows API条件断点1、思路将所有Windows API与DLL的对应关系保存到文件,当用户下断点时,脚本自动查找API函数对应的DLL文件名。找到文件名后,利用文件名+函数名定位函数地址,然后下断点并设置相关条件。2、脚本代码由两个文件组成,一个是IDAPython脚本break_api.py,一个是存放API函数和DLL对应关系的数据文件win_api.dat(可从附件下载)。两个文件都放到了[IDA安装目录]Pythonscript下,break_api.py脚本内容如下:代码很简单,不做多余的解释。3、脚本使用方法①用IDA打开EXE文件后,设置调试器在入口暂停。操作路径:点击Debugger→Debugger setup,选中Suspend on process entry point。②按F9,运行EXE③alt+f7,导入break_api.py④在Output window窗口,选择Python脚本,然后调用BptAPI(‘LoadLibraryA’),即可给LoadLibraryA函数设置条件断点,具体条件和前面的界面操作免费云主机域名一致,如果有其他需求,可对条件表达式进行修改。三、小结本文只是简单给出使用IDAPython脚本给windows API函数下条件断点的方法,读者朋友们可根据各自需求进行灵活应用,进而实现复杂分析过程的自动化。希望对大家有帮助。附件下载

相关推荐: 杂谈–DML触发器学习

触发器按类型分为三类:1. DML 触发器,在数据变更时触发;2. DDL 触发器,在修改数据库级别或实例级别对象时触发;3. Login 触发器,在用户登录时触发;最常见的是DML触发器,DML触发器又可以分为两类: INSTEAD OF触发器和AFTER触…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/27 11:05
下一篇 01/27 11:05