首页
社区
课程
招聘
[旧帖] [求助]ring0中驱动和ring3的代码相互调用的问题 0.00雪花
发表于: 2008-1-28 16:56 7266

[旧帖] [求助]ring0中驱动和ring3的代码相互调用的问题 0.00雪花

2008-1-28 16:56
7266
谢谢各位热心人帮忙解决修改SSDT中服务代码的修改内存保护问题,我成功的在NtCreateProccess中进行了HOOK。不过现在我遇到了新的问题了,我想在NtCreateProccess被执行的时候,能够把运行的可执行文件记录下来并用MessageBox函数显示出来,等我按了按了MessageBox中的确认后,再让这个进程被创建起来,否则就不让进程创建。
我用的方法是用一个可执行文件.exe里面定义的一个函数,这个函数就是显示MessageBox的,然后再去打开.sys的驱动程序,用DeviceIoControl把,然后上面那个函数的入口地址传递进去。在.sys的驱动里HOOK NtCreateproccess,同时保留住这个运行程序的ProccessID,用(PsGetCurrentProcessId函数),在NtCreateProccess被调用的时候,现执行KeAttachProcess 进入可执行文件.exe的地址空间,然后调用传递进去的函数入口地址,执行完成后,KeDetachProcess.

设想挺好的,而且一开始是定义了一个空的函数,什么事情不做,也不传递任何参数,调试发现没有问题。但我调用printf函数显示这个参数或则用MessageBox显示传入的数字时,就系统崩溃了出现了下面的错误了.
UNEXPECTED_KERNEL_MODE_TRAP (7f)
This means a trap occurred in kernel mode, and it's a trap of a kind
that the kernel isn't allowed to have/catch (bound trap) or that
is always instant death (double fault).  The first number in the
bugcheck params is the number of the trap (8 = double fault, etc)
Consult an Intel x86 family manual to learn more about what these
traps are. Here is a *portion* of those codes:
If kv shows a taskGate
        use .tss on the part before the colon, then kv.
Else if kv shows a trapframe
        use .trap on that value
Else
        .trap on the appropriate frame will show where the trap was taken
        (on x86, this will be the ebp that goes with the procedure KiTrap)
Endif
kb will then show the corrected stack.
不知道要如何解决这个问题?或则说我使用的方法是错误的?我看微软的范例里面多时用什么event来处理ring0和ring3的通讯。但没有找到合适的例子...
谢谢各位了。

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
我也想知道,等着学习。。
2008-1-28 17:03
0
雪    币: 400
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
补充一下,我测试传了一个数字作为参数,在.exe文件里对这个数字进行加减和赋值给其他变量,都是可以的,没有什么问题。不过我觉得这种方法应该不是正确的方法,变成了ring0中的代码执行调用执行ring3可执行文件中的代码,总是觉得哪里不对劲。
2008-1-28 17:07
0
游客
登录 | 注册 方可回帖
返回
//