好友
阅读权限10
听众
最后登录1970-1-1
|
贝优妮塔
发表于 2021-1-4 19:25
本帖最后由 贝优妮塔 于 2021-1-4 22:39 编辑
最近做游戏科技时 发现游戏会自己生成异常 内部有使用AddVectoredContinueHandler
自己的dll异常 游戏会退出。。所以有了下边的。。。
结果做好了没什么用 因为dll用RaiseException 引生异常后 KiUserExceptionDispatcher 根本没收到异常!!直接就退出了。。
谷歌百度都搜不到
虽然代码量少
自己写了好久才完成 【自学的编程很多不懂哎】
现在贡献给大家了
部分用到了汇编 和 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
Hook_KiUserExceptionDispatcher.zip
(2.32 MB, 下载次数: 46)
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|