发一份自己写的hook KiUserExceptionDispatcher源码【有些小问题】
本帖最后由 贝优妮塔 于 2021-1-4 22:39 编辑最近做游戏科技时发现游戏会自己生成异常内部有使用AddVectoredContinueHandler
自己的dll异常 游戏会退出。。所以有了下边的。。。
结果做好了没什么用因为dll用RaiseException 引生异常后KiUserExceptionDispatcher 根本没收到异常!!直接就退出了。。{:1_907:}
谷歌百度都搜不到
虽然代码量少
自己写了好久才完成 【自学的编程很多不懂哎】
现在贡献给大家了
部分用到了汇编 和 ntdll.dll 偏移可能win7需要修改下才行
我系统是win10 x64最新版的
说下思路
先用minhook hook跳转到汇编的函数地址
保留原函数地址 【detours hook后原地址不知道去了哪里 ,所以没用它】
当异常发生时
汇编钩子函数调用我们自己的函数 【发现两个参数在rsp 所以我认为要处理下才能去我们的函数处理方法参照ntdll 】
现在我们的函数开始处理异常
1.需要处理
【这里我想获取异常处理的__except 地址 然后跳转但是找了好久没找到相关api下边是我百度+谷歌出来的..临时解决方案?】
利用栈回溯 取得异常发生的位置这个位置是异常的下一条指令【RtlLookupFunctionEntry+RtlVirtualUnwind】
这个地址+0x2 偏移 是__except 的地址就这里好了
修改rip+0x2 执行 RtlRestoreContext 函数这里异常处理就结束了 不会再向下运行 -----经测试 不会触发SetUnhandledExceptionFilter AddVectoredContinueHandler AddVectoredExceptionHandler的回调
2.正常返回 回到汇编
汇编直接jmp RtlDispatchException部分 这里用到了ntdll 偏移【用minhook detours跳转桥的地址 总是崩溃 百撕不得琪姐 只能先这样】
系统正常处理。。。结束
源码:https://github.com/dilibili/Hook_KiUserExceptionDispatcher
页:
[1]