我的思路是找到该函数的内存地址,反向查找页表所在的位置,修改页表的内容,然后将函数的前几个字节保存起来,并且通过一条jump指令让他跳到我的函数的地址。事后再恢复原来的内容。有愿意讨论的,请在此发表贴子或者给我发信,我的信箱在我的资料里有。
回复(39) 2002-06-20 10:05 来自版块 - 内核编程
表情
pjf还有《undocumented windows NT》的第四章你一定的看看,hehe(2002-06-21 18:00)
pjf至于页目录表的问题,我觉得windows2000还是和linux差不多吧,他们应该都是简单得线性关系。但是这仅仅是停留在理论上,我还没实践所以不好说 ----------------------------------------------------------------...(2002-06-21 17:57)
ysy巴西赢了,我也把函数钩过来了。不过比较笨! 至于页目录表的问题,我觉得windows2000还是和linux差不多吧,他们应该都是简单得线性关系。但是这仅仅是停留在理论上,我还没实践所以不好说。 另外,另外楼上的大虾提到一些参考资料,网上在那儿有?我看看之后再发表意见...(2002-06-21 17:29)
VanCheer刚刚看球去了,巴西赢了,happy。 你说得不错,这就会导至“漏球”,内核调试器有时也会漏(不过原因肯定不一样啦);我没用这种方法,因为知道被钩函数开始代码,所以总是先让它在hook函数例执行开始代码再jmp回去。 大兄弟,快去回答我的ntoskrnl的问题(2002-06-21 16:48)
pjf刚刚看球去了,巴西赢了,happy。 你说得不错,这就会导至“漏球”,内核调试器有时也会漏(不过原因肯定不一样啦);我没用这种方法,因为知道被钩函数开始代码,所以总是先让它在hook函数例执行开始代码再jmp回去。(2002-06-21 16:48)
fracker我提出的问题怎么没人理睬了?难道这不是问题吗?(2002-06-21 16:09)
pjf页目录表里的每一项即页目录项的内容为0 ----------------------------------------------------------------------- 并不是每一项,而是开始的一些项与没用的项根本没映射,你用Softice一直d下去,自让会看到...(2002-06-21 14:07)
pjf另外我之所以讨论内核所在的位置,是因为内核的线性地址和物理地址之间应该存在一个简单的线性关系,那就是物理地址+内核的起始地址。linux里面是0xc0000000,而windows2000是0x80000000 ---------------------------------...(2002-06-21 13:00)
fracker假设你要hook函数 KerenelFunc,你的函数是MyFunc,你的挂接方式是保存KernelFunc的最开始的8个字节,然后在MyFunc里面你应该是这样做的吧: MyFunc{ 1.恢复原来的前8个字节; 2.Call KernelFunc; 3.在...(2002-06-21 12:16)
ysycr3变化倒没关系,因为内核空间是由所有进程共享的。(2002-06-21 11:09)

返回顶部