程序发布:WatchU,一个用于监视Windows下系统、用户级API调用的工具程序

Redspider Redspider 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
WatchU是一个用于监视Windows下系统、用户级API调用的工具程序,理论上可以监视所有非系统进
程里对绝大多数系统API和全部用户API的调用情况,包括调用参数和返回值。并可监视多线程进程。

由于监听原理的关系,如下API不要设定为监听:
EnterCriticalSection
LeaveCriticalSection
ReadProcessMemory
WriteProcessMemory


WatchU包括两部分,WatchU主程序和wiretap.dll监听库,两者必需放在同一目录下。除此之外,
还包括监听用配置文件,后缀为.xml。目前提供的包括:
ws2_32.xml 对应ws2_32.dll中几个主要的调用函数
user32.xml 对应user32.dll中几个主要的调用函数
kernel32.xml 对应kernel32.dll中几个主要的调用函数

配置文件可以根据需要自己增加或者修改。格式说明如下:
<DLL LIBNAME="ws2_32.dll">
<API APINAME="accept" ATTR="STDCALL" VIRGINCODELEN="8">
<PARAM PARAMNAME="s" ATTR="IN" TYPE="I4" LEN="0"/>
<PARAM PARAMNAME="addr" ATTR="OUT" TYPE="BUFFER" LEN="addrlen"/>
<PARAM PARAMNAME="addrlen" ATTR="OUT" TYPE="PI4" LEN="0"/>
</API>
<DLL>

<DLL>设定需要监视的DLL名称,如果dll不在搜索路径上,需要使用完整路径名;
<API>设定需要监视的函数名称,
ATTR属性设定函数属性,分为STDCALL/CDECL两种,区别就是STDCALL为被调用者清栈,CDECL为调用者清栈;
VIRGINCODELEN属性设定函数起始位置的代码长度,由于监听原理的关系,需要设定原API函数在起始位置处
的代码长度,要求VIRGINCODELEN必需大于等于6,且原函数在VIRGINCODELEN处恰好处于代码分界处。确定
VIRGINCODELEN的方法后面详述。
<PARAM>设定函数的输入参数,必须列举出该函数的全部函数,PARAMNAME只是用于输出监听报告;
ATTR属性设定参数的输入、输出属性,分为IN/OUT/INOUT三种
TYPE为参数类型,I1/I2/I4分别表示1、2、4个字节的整型,PI1/PI2/PI4表示指向I1/I2/I4的指针,
STRING表示为MULTIBYTES字符串,UNICODE表示为UNICODE字符串,BUFFER表示指向二进制数据区的指针,
LEN为参数长度,只有BUFFER属性需要设置该属性,如果BUFFER长度取决于另一个参数,则在该处填写该参数的
PARAMNAME


确定函数VIRGINCODELEN,目前还没有找到更好的方法,只能这样处理(以VC为例):
写这样一段代码,然后在jmp p处设定断点,运行到断点处时,F11单步运行一步,
这是就会看到send函数处的汇编代码,找到第一个代码边界处,使其前面代码的长
度大于等于6,这个长度就是VIRGINCODELEN。各API的VIRGINCODELEN在各WINDOWS版本
下都可能不一样,因此,建议各位都在自己机器上做这样一步工作。
VIRGINCODELEN错误,会导致被监视进程出现非法操作。

#include <windows.h>
#include <stdio.h>

int main()
{
FARPROC p;
HMODULE hLib = ::LoadLibrary("ws2_32.dll");

if (hLib != NULL)
{
p = ::GetProcAddress(hLib, "send");
_asm
{
jmp p
}
}

return 0;
}


监听时,主程序上会显示监听结果,包括每个函数的调用、返回,以及具体参数值;并同时
会将监听结果写入一个trace.log文件,该文件可以通过菜单命令设定路径名。

胡源
http://huyuan.nease.net
hu.yuan@tom.com


下载地址:
http://huyuan.nease.net/assault/WatchU20050622.zip
...全文

相关推荐

CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视

一、需求无论何时,当你在Explorer窗口中创建、删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图。有时候我们的程序中也需要这样的功能,以便当用户在Shell中作出创建、删除、重命名或其他动作时,我们的应用程序也能快速地随之更新。二、原理Windows内部有两个未公开的函数(注:在最新的MSDN中,已经公开了这两个函数),分别叫做SHChan

会思考的草

构建基于C++的文件监视器FileMonitor

C++是一种静态类型、编译式、通用的编程语言,它提供了丰富的数据类型和灵活的内存管理方式。作为C语言的超集,C++引入了面向对象编程(OOP)的诸多特性,如类、继承、多态和封装。此外,C++还支持泛型编程、模板和异常处理。以下是一个简单的C++程序结构,它展示了基本的语法元素:public:" << endl;return 0;在这个例子中,我们引入了标准输入输出库iostream,然后使用声明,这样可以无需前缀直接使用标准库中的类和函数。MyClass。

Pella732

Windows环境下串口监视工具的实战应用

内置实时分析工具是串口监视工具中重要的组件,它提供了对捕获数据的快速分析和诊断功能。典型的内置分析工具包括协议解码、流量统计、错误检测等。协议解码功能允许用户根据预定义的协议格式解析数据包;流量统计则通过图表展示数据吞吐量、包数量等信息;错误检测用于识别数据传输中可能出现的校验错误、帧错误等问题。内置分析工具的实现通常需要对相关协议有深入理解,并编写相应的解码器。开发者可采用模块化设计,使得每种协议的解码器都是一个独立模块,方便未来添加或更新。

你踩到我法袍了

VB.NET实现Windows剪贴板监视器

Windows剪贴板剪贴板(ClipBoard)是内存中的一块区域,是Windows内置的一个非常有用的工具,通过小小的剪贴板,架起了一座彩桥,使得在各种应用程序之间,传递和共享信息成为可能。然而美中不足的是,剪贴板只能保留一份数据,每当新的数据传入,旧的便会被覆盖。相关Windows API最主要的是SetClipboardViewer,每当剪贴板的内容发生变化时,该函数通过WM_DRAWCLI

微wx笑

process explorer监视windows api调用_使用Frida对Windows平台的程序进行逆向分析

Frida由于使用JavaScript语言安装钩子的便利性而在最近变得越来越流行。我看到许多研究都将Frida用于移动平台,但最近Windows似乎在使用方面有了更多的吸引力。在DarunGrim,我们正在研究安全研究人员可以用于日常工作的新方法。Frida是我们认为可用于Windows逆向工程的工具之一。但是,在我们的测试过程中,我们发现符号查找功能是该工具广泛使用的限制因素。我们进行...

人神共奋
评论
收藏 已收藏
分享
返回顶部
Redspider
非技术区 1,510 成员 11,417 内容