吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2193|回复: 0
收起左侧

[C&C++ 转载] 发一份自己写的hook KiUserExceptionDispatcher源码【有些小问题】

[复制链接]
贝优妮塔 发表于 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)



免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
Li1y + 2 + 1 学习一下
aspire向往 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表