我尝试向cmd.exe注入一个dll,它将挂钩输入命令并将它们保存到文件中。 我设法做了注射,并获得了我想在WH_KEYBOARD上使用钩子的一些信息。
如何通过其他方式挂钩cmd.exe进程的输入而不是挂钩键盘事件?
答案 0 :(得分:0)
您可以查看WinAPI调用cmd.exe
生成并找到一个将命令字符串作为参数并挂钩它,例如与Microsoft Detours。你也可以挂钩cmd.exe
的内部函数,但这样不太容易。
我将我在Windows系统上的cmd.exe
(Windows 10 v1511 x86_64)加载到x64dbg,并且有两次调用ReadConsoleW。第一个:
Address=00007FF6331A29CC
Disassembly=call qword ptr ds:[<&ReadConsoleW>]
Destination=cmd.&ReadConsoleW
处理通过控制台输入的每个命令后调用。
Per x64 fastcall convention,rdx
指向其第二个参数(缓冲区)。虽然它正式是一个输出参数,但在调用函数之前,它指向输入命令的CRLF终止副本。
你可以挂钩那个电话或从那里追溯,找到一个更适合挂钩的地方。