我可以使用 win32 HANDLE 以编程方式将 sent/received 记录到 USB/COM
Can I programmatically log what's sent/received to a USB/COM using a win32 HANDLE
我正在玩 TEC-Microsystem 设备 (DX5100),它提供了一个带有 API 的 C++ dll 来打开连接:
HANDLE OpenSerialPort(char *PortName, DWORD SupporedBaud);
为了调试 pruprose,我想跟踪每个 sent/received 到端口的数据(一种在同一进程中工作的 "sniffer")。由于我可以访问 Windows API 句柄(HANDLE
返回值),有没有办法使用 Win API 设置任何 "listener" 以了解数据何时正在从 USB 端口发送 to/received?
正如@Some programmer dude 所说,不能保证这是一个有效的 Windows 句柄,但即使是这样,您的选择也是有限的:
后一种方法(与任何 API 用户级别的挂钩技术一样)是不可靠的,因为如果目标进程使用任何类型的诡计来访问句柄,您将不会收到通知。
它可以在同一进程中通过自我修补(更改 IAT table)或在远程进程中通过注入完成,通过 APP_Init DLL 或其他一些注入技术像 LoadLibrary/CreateRemoteThread 那样会进行修补。在任何情况下,您都必须在记录后将请求转发给实际的 ReadFile/WriteFile/DeviceIOControl 函数。
要更改 IAT table,您可能需要参考我的 Load EXE as DLL article which uses the same techique in an unrelated mission. This article, this article and this article 也有更多信息。
我正在玩 TEC-Microsystem 设备 (DX5100),它提供了一个带有 API 的 C++ dll 来打开连接:
HANDLE OpenSerialPort(char *PortName, DWORD SupporedBaud);
为了调试 pruprose,我想跟踪每个 sent/received 到端口的数据(一种在同一进程中工作的 "sniffer")。由于我可以访问 Windows API 句柄(HANDLE
返回值),有没有办法使用 Win API 设置任何 "listener" 以了解数据何时正在从 USB 端口发送 to/received?
正如@Some programmer dude 所说,不能保证这是一个有效的 Windows 句柄,但即使是这样,您的选择也是有限的:
后一种方法(与任何 API 用户级别的挂钩技术一样)是不可靠的,因为如果目标进程使用任何类型的诡计来访问句柄,您将不会收到通知。
它可以在同一进程中通过自我修补(更改 IAT table)或在远程进程中通过注入完成,通过 APP_Init DLL 或其他一些注入技术像 LoadLibrary/CreateRemoteThread 那样会进行修补。在任何情况下,您都必须在记录后将请求转发给实际的 ReadFile/WriteFile/DeviceIOControl 函数。
要更改 IAT table,您可能需要参考我的 Load EXE as DLL article which uses the same techique in an unrelated mission. This article, this article and this article 也有更多信息。