在之前的文章中研究过如何修改 Notepad,但是当时的结论是:无法通过 Kernel Debug 的方式调整目标机上的 Application【参考1】。这次实验使用 Kernel Debug 进行同样的操作。实验环境是USB3.0 调试远端 Win 10 环境。
Step1. 建立好 USB 3.0 的连接,然后在被测机上打开 NotePad.exe,另外保证 Symbols 正确加载
Step2. 使用 !process 0 0 列出所有进程:
PROCESS ffffcf0d61835300
SessionId: 1 Cid: 0b08 Peb: 14fbdcc000 ParentCid: 03b8
DirBase: 3d3a5f000 ObjectTable: ffff9381ba013d00 HandleCount: 256.
Image: svchost.exe
PROCESS ffffcf0d65432300
SessionId: 0 Cid: 0e68 Peb: fa07ff1000 ParentCid: 03b8
DirBase: 3f5dba000 ObjectTable: ffff9381b739bd40 HandleCount: 224.
Image: svchost.exe
PROCESS ffffcf0d6a8a0080
SessionId: 1 Cid: 04a0 Peb: 40c7e7c000 ParentCid: 18ac
DirBase: 27b9df000 ObjectTable: ffff9381b72cbcc0 HandleCount: 233.
Image: notepad.exe
Step3. 使用.process /i /p ffffcf0d6a8a0080入侵式调试 Notepad进程,然后再 g 继续。等再次停下时已经在 Notepad进程中了。

之后的做法和【参考1】提到的本地调试相同
Step4. 在打开窗口函数上下断点 bp notepad!ShowOpenSaveDialog,g之后在 Notepad 中 file -> open就会自动停下来

Step5. K 命令查看堆栈

Step6. ub notepad!InvokeOpenDialog+0xc3 反编译

Step7. 我们修改的目标就是上面的 mov rcx,rsi, 使用 a 命令写入代码

再确认修改成功

Step8. G 命令运行,然后重新打开 Open 菜单,可以发现当前能够在打开对话框的情况下聚焦到Notepad 编辑区。
参考:
1.http://www.lab-z.com/windbgn/