我的核心问题是如何对未记录的功能进行逆向工程。我想调用函数“xxxMouseEventDirect”(位于 win32kfull.sys)。我已经能够为此收集一些信息,但现在我有点卡住了。
调用层次如下:NtUserSendInput -> xxxSendInput -> xxxMouseEventDirect。
该函数如下所示:
NTSTATUS __fastcall* xxxMouseEventDirect (ULONG dx, ULONG dy, ULONG mouseData, ULONG dwFlags, ULONGLONG time, ULONGLONG extraInfo, ULONGLONG, ULONG);
我比较确定我正确调用了函数参数,但是调用函数时还是出现蓝屏。
蓝屏是这样发生的:
mov rax, qword ptr [win32kfull!_imp_gptiCurrent (fffffbe9`4c720ec0)]
mov r14, qword ptr [rax]
cmp qword ptr [r14+1B0h], rcx ; <--- Bluescreen because r14 == 0
当我调用 NtUserSendInput 时,rax 指向一个指针,然后通过 [r14+1B0h] 使用该指针。我直接调用xxxMouseEventDirect时,rax指向0,导致[r14+1B0h]导致蓝屏。我现在想知道 win32kfull!_imp_gptiCurrent 中存储了什么以及为什么当我直接调用 xxxMouseEventDirect 时它不在那里。
我在逆向工程领域比较新,想知道一般如何处理这样的问题。具体的技巧当然也很受欢迎。
谢谢