首页
社区
课程
招聘
[讨论]关于64位的ssdt HOOK
发表于: 2018-11-22 01:58 4819

[讨论]关于64位的ssdt HOOK

2018-11-22 01:58
4819
当我打算用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的地址,请问各位前辈应该如何解决这个问题呢


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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 9210
活跃值: (1876)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
FFFFF800041AC2EC -  FFFFF80003EDA300 = 2D1FEC
还是花钱买吧。
2018-11-22 11:38
1
雪    币: 854
活跃值: (69)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
问题已经解决。感谢吉林小伙的指导。操作系统在进行右移的时候用的是sar,不是shr,所以也不存在上面的问题。。

2018-11-22 13:17
1
游客
登录 | 注册 方可回帖
返回
//