R0如何调用 NtUserSendInput
百度了下,没啥例子,自己试了下 没效果typedef
NTSTATUS
(NTAPI*NTUSERSENDINPUT)(
_In_ ULONG cInputs, // number of input in the array
_In_reads_(cInputs) LPINPUT pInputs,// array of inputs
_In_ int cbSize); // sizeof(INPUT)
NTUSERSENDINPUT NtUserSendInput = NULL;
INPUT input = { 0 };
MOUSEINPUT KeyBoardInput = { 0 };
input.type = 0;
input.mi.dx = 100;
input.mi.dy = 200;
input.mi.mouseData = 0;
input.mi.dwFlags = 1; //MOUSEEVENTF_ABSOLUTE 代表决对位置MOUSEEVENTF_MOVE代表移动事件
input.mi.time = 0;
input.mi.dwExtraInfo = 0;
NtUserSendInput = 0xFFFFF960000EFB74; //用ARK取到 地址
NtUserSendInput(1, &input, sizeof(INPUT));
你先Attach到跟目标进程相同SESSTION的GUI程序(比如explorer.exe),然后再调用试试。
此外,关于怎么调用NtUser系列函数,建议参考USER32.DLL的源码(在泄露的NT4/XP源码和ReactOS源码里都有)。 Tesla.Angela 发表于 2021-4-26 16:33
你先Attach到跟目标进程相同SESSTION的GUI程序(比如explorer.exe),然后再调用试试。
此外,关于怎么调 ...
附加了,还是没效果,应该是调用NTUSER函数不对,或者声明不对吧
typedef
NTSTATUS
(NTAPI* NTUSERSENDINPUT)(
_In_ ULONG cInputs, // number of input in the array
_In_reads_(cInputs) LPINPUT pInputs,// array of inputs
_In_ int cbSize); // sizeof(INPUT)
//驱动入口
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
NTSTATUS Status;
NTUSERSENDINPUT NtUserSendInput = NULL;
INPUT input = { 0 };
MOUSEINPUT KeyBoardInput = { 0 };
input.type = 0;
input.mi.dx = 100;
input.mi.dy = 200;
input.mi.mouseData = 0;
input.mi.dwFlags = 1; //MOUSEEVENTF_ABSOLUTE 代表决对位置MOUSEEVENTF_MOVE代表移动事件
input.mi.time = 0;
input.mi.dwExtraInfo = 0;
PEPROCESS pEProcess = NULL;
KAPC_STATE ApcState = { 0 };
Status = PsLookupProcessByProcessId(1448, &pEProcess);//gui进程
KeStackAttachProcess(pEProcess, &ApcState);
NtUserSendInput = (NTUSERSENDINPUT)0xFFFFF960000EFB74; //用ARK取到 地址
Status = NtUserSendInput(1, &input, sizeof(INPUT));
DbgPrint("STATUS:%X\n",Status);
//取到数据解除附加进程
KeUnstackDetachProcess(&ApcState);
ObDereferenceObject(pEProcess); blackbox 发表于 2021-4-27 09:49
附加了,还是没效果,应该是调用NTUSER函数不对,或者声明不对吧
typedef
NTSTATUS
在注册表CALLBACK里试试,这样子连attach操作都省去了,比如发现调用者是explorer.exe时执行操作。
如果还是不行,那估计就是你代码的问题了。 Tesla.Angela 发表于 2021-4-27 16:55
在注册表CALLBACK里试试,这样子连attach操作都省去了,比如发现调用者是explorer.exe时执行操作。
如果 ...
我测试了下,我这代码在IRP里和注册表回调里可以正常调用,但是放在驱动入口就会蓝,一开始以为是PreviousMode的问题,测试了IRP和注册表里的PreviousMode是UserMode,驱动入口是kernelmodel,手动改了后发现一点关系都没,现在就是注册表回调和IRP能正常调用,驱动头不可以 blackbox 发表于 2021-5-3 18:04
我测试了下,我这代码在IRP里和注册表回调里可以正常调用,但是放在驱动入口就会蓝,一开始以为是Previou ...
因为驱动入口是内核态线程执行的,不是用户态线程执行的。 Tesla.Angela 发表于 2021-5-4 17:43
因为驱动入口是内核态线程执行的,不是用户态线程执行的。
我手动改了PreviousMode,改成了UserMode,也不行
页:
[1]