第一次尝试HOOK,求教从系统dll跳转自己的dll再跳回系统Dll出错的原因
本帖最后由 plazy 于 2022-11-27 11:28 编辑通过一段时间的学习,终于开始动手尝试HOOK系统Dll的相关函数,几经磨难,终于完成代码逻辑,却卡在了还原代码上,请大佬们帮忙指教下。
代码逻辑如下:
这是原kernelbase.dll中的函数指令
https://attach.52pojie.cn//forum/202211/27/111901lanadoo2yy1ttmat.jpg?l
这是修改后的跳转指令
https://attach.52pojie.cn//forum/202211/27/111857jirjlar5ilcg63ya.jpg?l
这是我自己DLL中的函数
什么也不做,直接执行原kernelbase.dll中的指令后跳回,应该没改变任何寄存器吧,能跳回去,但是直接报错,卡在 MOV RDI,QWORD PTR SS: 这句指令上了。
实在想不到是哪里出的错,请大佬们帮忙指出,感激不尽~ 因为你hook的字节长度,破坏了下一条指令,面你hook之后又没有修复被破坏的那条指令,且又回到了那条被你破坏的指令上。所以就错了 楼上说的很有可能,最好能发一下代码好让大家找找问题 没有破坏下一条啊,都是6字节长度{:1_937:} plazy 发表于 2022-11-27 12:23
没有破坏下一条啊,都是6字节长度
明眼人一眼就看到已经被破坏了,告诉你原因。你又不接受。那你慢慢想吧 的确是破坏了,谢谢指教5字节改成6字节了{:1_893:} 分两步跳,先跳到一个空的地方,再转跳 本人是纯业余爱好者,刚接触这一块,容易犯低级错误{:1_893:} 代码尽量要还原,hook的时候尽量先把原来的代码写回去,然后再写自己的代码,再跳回去,达到的效果是一样的。有些人就急,认为原来的代码对自己想要实现目的有阻碍就直接不还原回去这是错误的。 ssjjtt 发表于 2022-11-28 20:41
代码尽量要还原,hook的时候尽量先把原来的代码写回去,然后再写自己的代码,再跳回去,达到的效果是一样的 ...
嗯,多谢指教{:1_893:}
页:
[1]