首页 > 系统相关 >监控Windows API调用

监控Windows API调用

时间:2024-08-01 09:23:50浏览次数:14  
标签:调用 Monitor Windows API 监控 按钮 txt

原文链接:https://www.cnblogs.com/zhaotianff/p/17328559.html

很早就知道有Api Monitor这个软件,可以监控Windows API调用,但当时没有正式的使用场景,所以也没怎么在意。

API Monitor

简介

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/minhook

 x86/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 #include<Windows.h>
2 
3 extern "C" __declspec(dllexport) void MessageBoxShow(LPTSTR str)
4 {
5     MessageBox(NULL, str, L"title", MB_OK);
6 }

然后继续使用上面的MFC工程,增加一个按钮 【消息框】,在按钮事件里加载上面的DLL,并调用导出函数。

 1 void CMonitorAPIDlg::OnBnClickedButton2()
 2 {
 3     CString str;
 4     GetDlgItemText(IDC_EDIT1, str);
 5 
 6     HMODULE hModule = LoadLibrary(L"ApiMonitorDll.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

标签:调用,Monitor,Windows,API,监控,按钮,txt
From: https://blog.csdn.net/zhaotianff/article/details/140838760

相关文章

  • API 不返回扫描仪股票或帐户信息
    我使用API为盈透证券构建了一个交易机器人。但是,我既无法让它返回“TOP-PER_GAIN”,也无法从我的帐户返回可用现金。你们中的任何人都可以告诉我哪里出了问题吗?这是相关的代码。fromib_insyncimport*fromib_insyncimportIB,Stock,MarketOrderimportthreadingi......
  • TypeError:ufunc 的循环不支持 dict 类型的参数 0,该类型没有可调用的 sqrt 方法
    我遇到了一个错误:psi_out_norm.append(np.sqrt(sorted_probs))TypeError:loopofufuncdoesnotsupportargument0oftypedictwhichhasnocallablesqrtmethod不知道如何解决此错误。下面是我正在处理的代码:num_qubits=2sorted_probs={'00':0.182613164......
  • Google Translate API 客户端没有“Translate_image”属性
    importosfromgoogle.cloudimporttranslate_v3beta1astranslatedefupload_and_translate(input_dir,output_dir,target_language):"""Uploadsallimagesinadirectory,translatesthemusingGoogleTranslate,anddownloadsthetrans......
  • pydantic_settings 没有正确调用“之前”验证器
    我正在编写一个pydantic_settings类来从.env文件/环境变量中读取数据。相关部分如下所示:frompydantic_settingsimportBaseSettingsfrompydanticimportField,field_validatorfromtypingimportTupleclassJobSettings(BaseSettings):wp_generate_funnel_b......
  • Windows系统常用端口详解
    135端口135主要用于Microsoft的远程过程调用(RPC)服务。RPCSS(RemoteProcedureCallSubsystem)服务是COM和DCOM服务器的服务控制管理器。它执行COM和DCOM服务器的对象激活请求、对象导出程序解析和分布式垃圾回收。如果此服务被停用或禁用,则使用COM或DCOM的程序将无......
  • 使用Postman测试API短轮询机制:深入指南
    短轮询是一种Web开发中常用的技术,用于在客户端和服务器之间定期检查更新。与长轮询或WebSockets等技术相比,短轮询简单易实现,但可能带来较多的HTTP请求,从而增加服务器负担。Postman作为一个强大的API测试工具,可以用来模拟和测试短轮询机制。本文将详细介绍如何在Postman中测......
  • go-zero api 调用 rpc 实践
    目录rpc部分proto定义rpc代码生成完成rpcserver业务逻辑修改rpc配置文件启动rpcserverapi部分api定义复制rpc生成的代码到api修改对应代码启动apiserver测试及结果postman发送请求apiserverrpcserver在微服务中,外部通过api请求资源,内部通过rpc完成调用处......
  • fastapi 的uvicorn配置日志
      目前从flask框架转fastapi,之前flask框架日志很好用。这次学习了fastapi的日志使用,第一种是自定义日志,这个不讲了,自己封装就好,第二种是使用uvicorn自带日志,Uvicorn是fastapi框架的默认ASGI服务器,它提供了强大的异步能力和高性能。 一、配置输出格式化uvicorn其实已经......
  • .NET 高效灵活的API速率限制解决方案
    前言  FireflySoft.RateLimit是基于.NETCore和.NETStandard构建,支持多种速率限制算法和策略,包括固定窗口、滑动窗口、漏桶、令牌桶等。通过简单的配置和集成,开发者可以快速地将其应用到现有的WebAPI、微服务或中间件中,实现对请求的精确控制。   同时,该库还支持分布......
  • 零门槛AI 绘图:教你为客户定制 ComfyUI Serverless API 应用
    作者:鸥弋、筱姜2023年下半年,ComfyUI以其快速、流畅的图像生成能力,结合多样的自定义节点,迅速在创作者中流行起来。ComfyUI的亮点就是能够批量化生成图像,一键加载大量工作流,让用户可以轻松实现人像生成、背景替换、风格迁移和图像动画化等功能。越来越多的企业及个人开发者希望借......