简介API Monitor 可以监视、控制应用程序以及服务进行的 Windows API 调用。分为32位和64位版本32位版本只能监控32位程序64位只能监控64位程序。软件官网http://www.rohitab.com/apimonitor下载地址http://www.rohitab.com/downloads核心功能* 支持64位* 应用程序摘要语法高亮* 支持13,000 API , 1,300 COM 接口* 支持Structures, Unions, Enums 和Flags解码显示* 可视化缓冲区数据* 树型显示API调用层次* 解码参数和返回值* 断点* 监控DLL导出函数* 编辑进程内存数据* 调用筛选* COM接口监控* 自带ErrorFormat功能* 调用堆栈* 界面多种布局设置* 进程查看* 服务监控* 线程显示以前用过一个叫做 minhook的库项目地址https://github.com/TsudaKageyu/minhookx86/x64 API Hooking Library for Windows这个库可以把API Hook下来在调用API时可以先执行自己的代码再执行API函数。API Monitor应该也是类似的原理不过API Monitor的强大之处远不止这些向大佬学习就完事了。下面进入主题如何监控API函数调用这里我以CreateFile函数为例进行演示。首先我创建一个MFC工程(MonitorAPI)添加一个按钮和文本框(IDC_EDIT1)。当点击按钮时调用CreateFile创建一个文件。按钮事件1 void CMonitorAPIDlg::OnBnClickedButton1() 2 { 3 CString str; 4 GetDlgItemText(IDC_EDIT1, str); 5 CreateFile(str.GetBuffer(0), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 6 }在API Filter这里可以选择要进行监听的 API函数API Filter列表里的这些API函数都进行了分类方便查找 。如果要快速定位 API可以单击搜索按钮输入要监听的API函数这里以CreateFile为例钩选CreateFile后再将进程添加到监听列表添加进程到监听列表有两种方式针对已经运行的进程直接在进程列表双击添加到监控列表即可如果需要单独运行需要监控的程序在进程监控这里点击 监控新进程 按钮即可。监听开始后单击创建文件按钮可以在右边的摘要中看到 CreateFile的相关调用信息参数这里可以看到调用的参数缓冲区这里缓冲区数据如何编辑内存数据还是以上面的MFC程序为例假设我们在界面上输入的是D:\a.txt我们通过修改内存数据改变成其它的路径。首先在左边的API Fiter这里找到CreateFileW函数右键 菜单中选择 Breakpoint 断点- Before Call在调用前然后开始监听程序在界面上输入 D:\a.txt点击创建按钮API Monitor会弹出 如下对话框如果新值不会超出原来分配的缓冲区大下右键 选择Edit Value。可以直接编辑value。例如我们将D:\a.txt修改成D:\e.txt。(理论上这样是没问题但建议还是申请新内存吧)。修改完成后点击 Continue 按钮函数执行后可以看到在D盘创建一个e.txt文件而不是a.txt文件。我们也可以直接申请新内存然后编辑数据再将 lpFileName参数的地址修改为新地址。右键菜单选择 Edit Memory。然后选择New新开辟一块内存空间大小根据自己需求填写。申请 出来的新内存空间如下此时我们再将自己需要的值编辑进去如 D:\helloworld.txt编辑完成后我们将地址复制下来单击 Close 关闭。再编辑 lpFileName的值替换成新地址的值再单击 Continue可以看到在D盘创建了一个helloworld.txt的文件如何监控DLL中的函数首先我们使用Visual Studio 创建一个DLL工程增加一个导出函数如下1 #includeWindows.h 2 3 extern C __declspec(dllexport) void MessageBoxShow(LPTSTR str) 4 { 5 MessageBox(NULL, str, Ltitle, MB_OK); 6 }然后继续使用上面的MFC工程增加一个按钮 【消息框】在按钮事件里加载上面的DLL并调用导出函数。1 void CMonitorAPIDlg::OnBnClickedButton2() 2 { 3 CString str; 4 GetDlgItemText(IDC_EDIT1, str); 5 6 HMODULE hModule LoadLibrary(LApiMonitorDll.dll); 7 if (hModule) 8 { 9 funcMessageBoxShow func (funcMessageBoxShow)GetProcAddress(hModule, MessageBoxShow); 10 11 if (func) 12 func(str.GetBuffer(0)); 13 14 FreeLibrary(hModule); 15 } 16 }再回到Api Monitor在左上角在Api Filter这里找到External DLL单击Add External DLL添加上面创建的DLL然后在 MessageBoxShow函数前断点。此时再运行上面创建的MFC程序单击 【消息框】按钮即可进入断点。演示过程中使用的代码点击 这里 下载参考Api Monitor官方使用指南API Monitor Tutorials | rohitab.com