如何使用 IDA/WinDbg 在 cmd.exe 中中断剪贴板操作?

逆向工程 艾达 视窗 调试 风袋
2021-06-13 03:47:14

我的目标是查看当用户将文本粘贴到 Windows 命令提示符中时“幕后”发生了什么。所以我加载cmd.exe到与 WinDbg 调试器一起设置的 IDA Pro。

我最初的猜测是在必须用于访问剪贴板的OpenClipboard API上放置一个断点,但似乎 cmd.exe 甚至不依赖于User32.dll(OpenClipboard 来自何处):

在此处输入图片说明

那我读对了吗?

附注。我正在 Windows 10 上执行此操作。

编辑:你知道,除了延迟加载之外还有其他东西。我让cmd.exe初始化并开始运行,之后我暂停了它。加载的模块列表仍然没有user32.dll

在此处输入图片说明

我的延迟断点也没有在剪贴板操作时触发:

在此处输入图片说明

是否还有其他一些进程可以执行所有“命令行”逻辑?

编辑 2:只是试图附加到一个正在运行的conhost.exe

在此处输入图片说明

IDA Pro 以管理员身份运行时出现此错误:

在此处输入图片说明

编辑 3:只是试图conhost.exe通过 WinDbg 本身附加到并得到这个错误。我不确定NTSTATUS 0xC00000BB在这里如何适用:

在此处输入图片说明

2个回答

实际的控制台窗口是由 conhost.exe 绘制和管理的,而不是 cmd.exe。 conhost.exe 调用 OpenClipboard

好吧,如果你不能用 windbg 附加,那么你还有一些其他的问题
uac / clamped down / policy / whatever //conhost.exe 是可
附加的(检查你是否附加到正确的 conhost.exe,其中一些可能是由system user

屏幕截图显示了 Windbg 被附加到 conhost 并在 OpenClipBoard 上与 Hwnd(consoleWindowClass 的句柄)断开

在此处输入图片说明

关于粘贴操作

0:001> kb2
 # ChildEBP RetAddr  Args to Child              
00 020afc28 00adf554 020afd34 00000111 00000000 conhost!DoPaste+0x3d
01 020afcb8 773ec4e7 00080260 00000111 0000fff1 conhost!ConsoleWindowProc+0x847
0:001> ub eip l1
conhost!DoPaste+0x37:
00ae2d05 ff155411ad00    call    dword ptr [conhost!_imp__GetClipboardData (00ad1154)]
0:001> ? @$retreg
Evaluate expression: 10616892 = 00a2003c
0:001> du poi(@$retreg)
00172fa0  "2580 windbg.exe        Pid 3424 "
00172fe0  "- WinDbg:10.0.10586.567 X86"
0:001> g

至于评论是的,也许我不知道
粗略看一眼谷歌说 conhost 现在是 Windows 10 中 cmd 的子项
一些 ms 开发人员的 conhost 增强技术预览文章没有提到任何关于 conhost 的内容protected super proteccted or ultra protected process
,我没有方便的 win10 所以只有当我在 winX 下 spleunk 到那时快乐狩猎时,我才能回答您的评论

好吧,看来我也可以在 winX 中附加
(winx 在 vmware player(测试模式)中运行)windbg 屏幕截图正在目标操作系统内运行

在此处输入图片说明