首页
社区
课程
招聘
[求助]不用SetContextThread如何修改调试寄存器
发表于: 2012-3-5 23:29 10770

[求助]不用SetContextThread如何修改调试寄存器

2012-3-5 23:29
10770
SetContextThread被hook了,一旦还原hook就会被发现,有办法不用SetContextThread修改线程上下文吗?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
用异常。。。
2012-3-6 11:09
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
3
膜拜大侠的风范,经常回答新手的问题,我是来学习的
2012-3-6 11:26
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
4
如果是用户态hook的话,也可以直接系统调用NtSetContextThread
2012-3-6 11:31
0
雪    币: 286
活跃值: (62)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
5
再往下一层也不是不可,,pssetcontextthread
2012-3-6 12:37
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
搞定检测线程 非异常之一!如果在内核里面的话,直接摘掉DPC
2012-3-6 17:49
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
奇怪的是用异常也会不起作用,我设置了几个异常,用的VEH,竟然不进入接口,奇怪。
因为对hook的检测有个时间间隔,所以我调用api之前把hook给取消了, 用完又马上恢复hook,检测线程没有发现我的动作,我自己检测dr0~dr7也正确,可就是不进入我设置的异常。
2012-3-7 12:11
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我hook了NtGetContextThread,发现目标进程在不停的调用这个api,句柄参数很多用-1,有些用-2,发现dr0~dr7有异常就会结束进程,我就让hook接口直接给它返回0,不调用原api了,这样是不会被发现下了硬件中断,可是我下的硬件中断一点作用都不起。
2012-3-7 12:16
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
9
-2就是currentthread的假句柄
你直接hook了返回0,他是发现不了的,但是调试器也要调这个api啊,这样调试器肯定也没法正常工作了
2012-3-7 16:46
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
额,我不是用的外部调试器,我是用的注入dll,用VEH设置异常接口,然后修改调试寄存器下硬件断点,这样的也会调用那个api吗?我在其它进程中使用的时候没有问题,也没发现调用了那个api。
2012-3-8 08:13
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我HOOK INT 01 这样下硬件断点可以成功.
        __asm
        {
                PUSH        EAX
                MOV                EAX, 断点一
                MOV                DR0, EAX
                MOV                EAX, 断点二
                MOV                DR1, EAX
                MOV                EAX, DR7
                OR                EAX, 0x270F
                MOV                DR7, EAX
                POP                EAX
        }
        可是为什么我取消断点 :
        __asm
        {
                PUSH        EAX
                MOV                EAX, 0
                MOV                DR0, EAX
                MOV                DR1, EAX
                MOV                EAX, DR7
                AND                EAX, 0xFFFFFFF0
                MOV                DR7, EAX
                POP                EAX
        }
        这样取消断点不行呢...希望大牛指点.

        比如我重新设硬断断点也不行.

        __asm
        {
                PUSH        EAX
                MOV                EAX, 新断点一
                MOV                DR0, EAX
                MOV                EAX, 新断点二
                MOV                DR1, EAX
                MOV                EAX, DR7
                OR                EAX, 0x270F
                MOV                DR7, EAX
                POP                EAX
        }
        望各位大牛指点...解惑.
        难道必须用NtSetContextThread 和异常来设置硬件断点么?
2012-12-22 10:43
0
雪    币: 154
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
12
目测lz是在R3下。。。
RtlDispatchException
LdrInitializeThunk
ZwContuine
2012-12-23 04:06
0
游客
登录 | 注册 方可回帖
返回
//