-
-
[讨论]关于64位的ssdt HOOK
-
发表于:
2018-11-22 01:58
4846
-
当我打算用KeBugCheckEx去作为跳板跳到我自己的TerminalProcess函数的时候,发现了一个问题。根据公式
真实函数地址 = ssdt(基址) + ssdt[nIndex]>>4
那么我的函数地址是KeBugCheckEx函数的时候算出ssdt表中的偏移地址的公式应该是 偏移地址=(真实函数地址-ssdt基址) << 4,如果当真实函数地址小于ssdt基址时就会出现一个问题,负数前面是有f的,那么当我们进行左移的时候就会丢失前面的f。导致系统在进行寻址的时候找到的是错误的地址,ssdt hook失败。
下面是我测试的结果。如图:
ssdt基址为03ed5b00,但是 KeBugCheckEx函数的地址是03ed4f00。后者减去前者差值为fffff400。进行左移 ffff4000就会丢失最前面的f。如果这个数值作为偏移的话,那么照前面的公式进行计算出的跳转地址就会是0ffff400+
03ed5b00并不是KeBugCheckEx的地址,请问各位前辈应该如何解决这个问题呢
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课