强大的 API 监控工具 之 Win32Exts for API Monitor 介绍
强大的 API 监控工具 之 Win32Exts for API Monitor 介绍
Win32Exts for API_Monitor 是Win32Exts项目组提供的一个强大的API 监视工具,相较于流行的 API_Monitor,
它具有解码功能强大、灵活二次扩展开发、与其他脚本语言完美融合交互 等等优异的特性。
Github下载地址:
https://gitee.com/tankaishuai/Win32Exts_for_API_Monitor
编者按:
开发此项目的目的是为了弥补当下流行的 API Monitor 的一些不足之处:
(1) 很多时候API无法成功监控,例如笔者在 Win10 x64 管理员权限下监控 API RegOpenKeyExW,API Monitor 并没有正确的工作。相反,Win32Exts_for_API_Monitor 却工作的很好。
(2) API Monitor 的解码参数信息过于简单,通常仅支持解码一些整型参数与字符串,以及常量表示。Win32Exts_for_API_Monitor 却可以支持解码各种复杂的数据类型以及 自定义结构体!! 格式表示,
同时对于预定义不支持的类型也提供了插件扩展方式支持之。
(3) API Monitor 仅仅只能监控API函数调用完成之前的结果,对于调用之后的信息并不能正确地得到。例如以下形式的导出函数:
BOOL PathAppendW(__inout WCHAR *pszPath, LPCWSTR szSubPath);
由于参数 pszPath 是一个输入输出型参数,API Monitor 并不能正确拿到函数调用之后是什么结果内容。
Win32Exts_for_API_Monitor 可以正确监控API调用之前,以及调用之后的参数、返回值 信息。
同时线程信息、LastError信息也一应俱全。
(4) API Monitor 仅仅只能监控API 调用,不能阻止这种行为。Win32Exts_for_API_Monitor 可以实现阻止指定的API调用,并且伪造一个指定的返回码 以返回调用上下文。例如 以下阻止 RegOpenKeyExW 直接返回 0x233:
(5)API Monitor 不能 递归嵌套式监控( 例如:函数 [A] -> B -> ... -> [A] -> ... ),而 Win32Exts_for_API_Monitor 可以实现。
当然,API Monitor 也有一些优点是 Win32Exts_for_API_Monitor所不具备的,具体体现在:
(1) 预定义了大量的API声明,但也限制了其灵活性。
Win32Exts_for_API_Monitor 并不提供除示例外的任何API声明, 可以非常灵活的按照输出格式自由配置。
(2) 友好的用户界面,目前 Win32Exts_for_API_Monitor 并不提供一个完整的用户界面,捕获的函数调用信息 以控制台、日志、或者调试输出的方式记录。
鉴于此,大家可以酌情选择使用之。
本文主要介绍 Win32Exts_for_API_Monitor 的基本用法:
1、 设置抓取API列表
API Monitor 的API配置是以XML形式保存的,例如:
比较复杂,Win32Exts_for_API_Monitor 仅仅只需要在 win32exts.ini 中按如下格式记录参数类型符即可:
[fake_ret_val=或*]module!function,[^][in_args][,out_args]
或
[fake_ret_val=或*]module+offset,[^][in_args][,out_args]
或
[fake_ret_val=或*]virtual_addr,[^][in_args][,out_args]
其中 [] 表示可选参数,
^表示监控函数返回,如果不指定 out_args,则缺省与 in_args 类型描述相同。
如果指定 [fake_ret_val=或*] 这个,表示拦截该API的调用(__stdcall 用 =,_cdecl 用 *),并以 fake_ret_val 作为返回值返回调用上下文。
以上配置中逗号(,)后面的 in_args、out_args 是参数类型描述,预定义的类型描述见下表:
==================================================
a : LPSTR (gbk)
t : LPSTR (utf-8)
w或s : LPWSTR
i或d : int
u : unsigned int
x : hex
b : true/false
c : char
h : short
l : int64
f : float
g : double
v : VARIANT *
k : UNICODE_STRING *
m : BSTR
p : hex
@ : 注册表 hkey
# : 窗口 hwnd
$ : 文件handle
| : 进程 handle
! : 进程 id
~ :线程 handle
. : 模块 hDll
< : 局部atom
> : 全局atom
? : IUnknown *
& : 二进制(buf, size)
% : 二进制(buf)
' : time_t
" : FILETIME *
[struct_name] : 自定义结构体,结构体 struct_name 的各个成员需定义在:
win32exts.ini 的 [StructFmt] 下面。支持结构体各种嵌套,同时对于循环链表也能够正确的输出。
==================================================
另外,字母大小写有区别,小写表示按值传递,而大写表示按引用方式传递。例如监控:
psapi!GetModuleFileNameExW,|pwu
会输出完整的 进程名、模块句柄、模块名、缓冲区尺寸。
配合脚本语言,可以支持运行时动态的添加、修改该API监控列表。
2、 开始监控进程
首先你需要将程序路径添加到 PATH 环境变量!!!
然后可以
直接打开图形界面程序 API_Monitor_For_GUI.exe,
或者执行批处理:
Api_Monitor 16进制的进程窗口句柄
或者直接运行:
rundll32 "%cd%\win32exts.dll",MyAnyHookApi_RunDll32 --hwnd=16进制的进程窗口句柄
即可开始监控。
对于无窗口进程,则可以使用下列命令行:
rundll32 "%cd%\win32exts.dll",MyAnyHookApi_RunDll32 -–thread=目标线程Id -–type=钩子类型
3、 与Lua等脚本的交互
由于 Win32Exts for Lua/JavaScript/VBScript/Python等等过于复杂,可实现的功能非常丰富,需要了解的可联系作者(tankaishuai@126.com)沟通。
例如以下Lua脚本直接在目标进程注入一个扩展模块:
4、 扩展插件的编写
编写一个常规 Dll:MyAnyHookDisplayCall.dll 实现并导出下列接口:
bool MyAnyHookDisplayCall(
LPCSTR szFuncName,
bool bIsCallRet,
INT_PTR *pArgs,
LPCSTR *pszFmt,
__inout LPSTR *lpszOutText){
… …
}
即可实现自定义的参数类型解码输出。如有需要,具体开发细节可联系作者。
强大的 API 监控工具 之 Win32Exts for API Monitor 介绍相关推荐
- API Monitor(API监控工具)
概观 API Monitor是一个免费软件,可以让你监视和控制应用程序和服务,取得了API调用. 它是一个强大的工具,看到的应用程序和服务是如何工作的,或跟踪,你在自己的应用程序的问题. 产品特点 6 ...
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- C++ WINDOWS API 第2章 Windows API概要
目录 2.1 Windows数据类型.. 1 2.1.1 Windows数据类型示例.. 1 2.1.2 Windows 数据类型与标准C 数据类型的关系.. 5 ...
- api接口加密_谈谈API接口开发中的安全性如何解决
如今各种API接口层出不穷,一个API的好与不好可以从很多方面来考量,其中"安全性"就是一个API接口最基本也是最重要的一个特点.本文就来跟大家聊聊关于API接口开发的安全性问题. ...
- html5通过api调数据库,使用HTML5数据库API [关闭](Using HTML5 Database API [closed])
使用HTML5数据库API [关闭](Using HTML5 Database API [closed]) 我正在开发一个使用phonegap/cordova 2.2的web应用程序,并希望将数据存储 ...
- node api框架_使用Web API,Node和Nexmo从浏览器发送SMS
node api框架 Short Message Service (SMS) is not a new technology, and has been around since even befor ...
- 程序员常说的API是什么意思?API类型有什么呢?
程序员常说的API是什么意思?API类型有什么呢? API是什么意思呢?在定义上,API(Application Programming Interface),中文翻译是应用程序编程接口,是一些预先定 ...
- dita文档_使用DITADoclet和DITA API专业化生成DITA Java™API参考文档
dita文档 2009年12月11日修订说明:在" 目标"和" 安装org.dita.dost插件 "标题下添加了两个指向可下载资源的链接. 2014年3月7日 ...
- 微服务架构开发实战:API网关意义和常见API网关的实现方式
API网关意义 API网关旨在用一套单一且统一的API入口点,来组合一个或多个内部API. API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理是一样的.API网关统一服务入口,可方 ...
最新文章
- string数组怎么定义
- 佐治亚理工学院计算科学与工程系博士生招生!
- android studio编译提示错误:android Error:(21, 19) 错误: 程序包R不存在
- 动态规划:求最长公共子序列和最长公共子串
- Swift中NSData与NSDictionary之间的相互转换
- 如何快速完成整理笔记?
- VMware Workstation卸载清理批处理命令
- Hbase Solr 二级索引,更新数据部分字段丢失问题
- netty获取玩家chanel_Netty4.X 获取客户端IP
- C#LeetCode刷题-图
- 快来一起玩转LiteOS组件:RHas
- arm linux 蜂鸣器qt,Qt 程序中使用蜂鸣器 ioctl()
- gerrit与crowdid, openid集成,设置openIdSsoUrl 直接登录
- sublime前端开发常用插件
- Windows 10驱动开发入门(五):创建虚拟显示器 Indirect Display驱动开发
- C语言从键盘输入1605,山东理工大学ACM平台题答案关于C语言 1605 Balloon Comes!
- ubuntu 20 安装手册
- 修身齐家治国平天下 读 战国策 和 编程卓越之道 有感
- SimpleFOC移植STM32(二)—— 开环控制
- 用递归和非递归求斐波那契数列
热门文章
- 远程桌面快捷键的使用
- win2016开启smb服务器_使用Hyper-v Server 2016构建免费的SMB3服务器
- 手机照片删除了怎么恢复?怎么找回删除的手机照片
- 【FPGA】UART串口通信
- 4.用程序实现支付链接转为二维码
- adb之mokey的用法
- cas 修改服务器ip,Cas 服务器 Service(Cas客户端)注册信息维护
- 乌合之众 -- 群体心理
- 计算机视觉安推商汤科技经典,商汤科技人脸实战应用亮相安博会 推动平安城市建设...
- 使用Process Monitor探测Windows系统高DPI缩放设置的注册表项