首页
社区
课程
招聘
[求助]PsSetContextThread调用不成功
发表于: 2012-12-23 01:51 8790

[求助]PsSetContextThread调用不成功

2012-12-23 01:51
8790
status        = _PsSuspendThread((PETHREAD)dwEThread, &PreviousSuspendCount);
                if (!NT_SUCCESS(status))
                {
                        KdPrint(("Handling_BreakPointer : PsSuspendThread is Failure.\r\n"));
                        return;
                }
                ThreadContext.ContextFlags        = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
                status        = PsGetContextThread((PETHREAD)dwEThread, &ThreadContext, KernelMode);
                if (!NT_SUCCESS(status))
                {
                        KdPrint(("Handling_BreakPointer : PsGetContextThread is Failure.\r\n"));
                        return;
                }
                ThreadContext.ContextFlags        = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
                ThreadContext.Dr0        = Par_BreakPointerPtr->dwDebugRegister0;
                ThreadContext.Dr1        = Par_BreakPointerPtr->dwDebugRegister1;
                ThreadContext.Dr2        = Par_BreakPointerPtr->dwDebugRegister2;
                ThreadContext.Dr3        = Par_BreakPointerPtr->dwDebugRegister3;
                ThreadContext.Dr7        = dwAmountValue;
                ThreadContext.ContextFlags        = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
                status        = PsSetContextThread((PETHREAD)dwEThread, &ThreadContext, KernelMode);
                if (!NT_SUCCESS(status))
                {
                        KdPrint(("Handling_BreakPointer : PsGetContextThread is Failure.\r\n"));
                        return;
                }
                status        = _PsResumeThread((PETHREAD)dwEThread, &PreviousSuspendCount);
                if (!NT_SUCCESS(status))
                {
                        KdPrint(("Handling_BreakPointer : PsResumeThread is Failure.\r\n"));
                        return;
                }
注 : EThread非当前线程...为什么我能调用PsSuspendThread但是PsGetContextThread调用会失败呢?难道是Mode的问题...但是我用PreviousMode        = *(char *)(dwEThread + 0x140);Ethread里面的这个参数也还是不行...观WRK源码是这样实现的...可是为什么不成功呢?望高手指点迷津.PsSuspendThread 和 PsResumeThread是在NtSuspendThread 和 NtResumeThread用特征码定位到的.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因为不想用注入的方式...所以不用RING3的 SetThreadContext...
2012-12-23 01:55
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
试过直接修改目标线程EThread的 TrapFrame结构体里面的...但是会蓝屏.
2012-12-23 02:42
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
应该是要把  *(char *)(dwEThread + 0x140) 改成 KernelMode
  另外就是看 PsSetContextThread 返回值是什么
2012-12-23 13:55
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
操作错误....呜呜.STATUS_UNSUCCESSFUL              ((NTSTATUS)0xC0000001L)
2012-12-23 15:47
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
去调试一下 用 wrk 对比下源码 看看是哪里返回出错的
2012-12-23 18:35
0
雪    币: 247
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
ZwAllocateVirtualMemory  CONTEXT
2023-4-6 10:09
0
雪    币: 138
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
解决了吗,我也碰到了这个问题
2023-4-28 07:15
0
游客
登录 | 注册 方可回帖
返回
//