利用异常实现短期hook

news2024/11/20 13:41:59

场景1

调用目标call 需要跳过某些判断或者函数

场景2 

目标call 只需要部分指令执行

大概实现技术

设置线程上下文设置drX寄存器 实现硬件执行断点

主动调用目标call

通过硬件断点获取寄存器或修改eip

以上实现不改变crc且不通过驱动实现。只对当前执行线程有效,不使用线程句柄

调用call 的过程中有4个硬件断点随意修改call内部流程,适合在游戏主循环中使用.

---------------------------------------------------------------------------

已经通过hook方法 把所有读写call均在目标主线程调用。

通过主动调用1050F7A0这个call 但是不执行1050F805 

1050F805 此时的 ECX则是我需要得到的值

void __declspec(naked) _stdcall hook_handleEIP()

{

_asm

{

//E

popeax //目标地址有push,先平盏

moveax,ecx //得到数据后修改eax作为返回值 然后ret掉目标函数

retn    4

}

}

EXCEPTION_DISPOSITION

__cdecl

_except_handler(

struct _EXCEPTION_RECORD *ExceptionRecord,

void * EstablisherFrame,

struct _CONTEXT *ContextRecord,

void * DispatcherContext )

{

EXCEPTION_DISPOSITION ERet = ExceptionContinueSearch;

//判断异常是否为单步异常,硬件断点也是单步异常

if (ExceptionRecord->ExceptionCode==EXCEPTION_SINGLE_STEP) 

{

//判断异常地址,不是目标地址则是第一次的单步

if ((DWORD)ExceptionRecord->ExceptionAddress != 0x1050F805)

{

//B

SetHardwareBreakpoint(ContextRecord,0x32D3F805,DR_3,CODE,SIZE_1);//设置硬件断点相关标志位

ERet = ExceptionContinueExecution;//告诉系统异常已处理

}else if ((DWORD)ExceptionRecord->ExceptionAddress == 0x1050F805)

{

//D

RemoveHardwareBreakpoint(ContextRecord,DR_3);//删除硬件寄存器标志位

//修改eip到自己的函数上

ContextRecord->Eip = (DWORD)hook_handleEIP;

ERet = ExceptionContinueExecution;//告诉系统异常已处理

}

}

return ERet;

}

DWORD ExecutionFunction()

{

//A

DWORD handler = (DWORD)_except_handler;//异常处理函数

_asm

{

pushhandler//注册异常处理函数

pushFS:[0]

movFS:[0],ESP

pushfd

pushfd

orDWORD PTR[esp],0x100//设置dr7单步标志

popfd //执行到这里会触发单步异常

nop

popfd

}

//以上是注册异常处理函数

//以下是主动调用目标函数

DWORD dwRet;

_asm

{

pushad

push0

moveax,1050F7A0h

calleax //C

mov[dwRet],eax

popad

}

//F

//删除异常接收函数

_asm

{

moveax,[ESP]

movFS:[0], EAX

addesp, 8

}

return dwRet;

}

//以上函数执行过程有标注 A-B-C-D-E-F顺序

描述完毕。

设置drX寄存器可以参阅

https://blog.csdn.net/binhualiu1983/article/details/51646094 

非常详细.

需要注意的是目前这个函数有逻辑跳转,如果没正确执行到1050F805就会离开这个函数,然后dr3寄存器未清理,导致被保护检测

所以执行完call 后主动清理drX寄存器一次就完整了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu离线编译安装cmake 3.22.5(could not fonud OPENSSL) and cmake-versinon查不到版本问题

1、首先去cmake官网下载压缩包,例如: cmake-3.22.5.tar.gz 2、拉到ubuntu进行解压: tar -zxcf cmake-3.22.5.tar.gz 3、cd 进入目录 cd cmake-3.22.5 4、执行configure可执行文件 ./configure 如果在编译过程中出现报错:Could NOT findOpenSSL,原因可能是缺少ssl库 按…

第四节(1):EXCEL中判断一个WORD文件是否被打开

《VBA信息获取与处理》教程(10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网…

如何计算一个结构体的大小?(C语言)

文章目录 写在前面1. 结构体的内存对齐2. 结构体大小的计算方式(四步法)3. 修改默认对齐数4. 内存对齐的意义5. 结构体设计技巧 写在前面 我们知道C语言中各种内置类型定义的变量都是有大小的,比如 int 类型的变量占4个字节,而像…

对一个变速器原理的分析

背景 原本是朋友在调试一个看起来比较新的变速器驱动,整体来说支持两种变速模式,一种是进程级,这种用了HOOK,中规中矩的实现,原理网上都有。另一种是”系统级内核全局变速“,这个模式初步看了下有些特殊&a…

猫头虎带您了解CSDN1024城市开发者大会分会场报名指南(文末送30元优惠券)

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

全链路压测:保障系统稳定性与性能的关键措施

随着互联网应用规模的不断扩大和用户对系统性能要求的提高,全链路压测成为保障系统稳定性和性能的关键环节。本文将介绍全链路压测的概念、重要性以及实施全链路压测的步骤和最佳实践,以帮助读者更好地理解和应用全链路压测技术。 一、全链路压测的概念与…

客服支持Chatbot提供即时回答,改善用户体验

大家在网上冲浪了那么久,一定对于客户支持Chatbot都有所了解。客户支持Chatbot就像真人客服一样,可以与人进行简单的对话,并针对人们的需求给出相应的回答。虽然有时候得到的答案并不怎么靠谱吧,但是总的还是比较节省人工的&#…

docker概念

docker 容器:就是提供在多台主机上运行的应用程序相同的运行环境。 docker的概念 是开源的容器,是由Go语言开发的,是容器里面运用的工具,他是一个轻量级的虚拟机,可以利用docker在多台主机上创建与运行容器。 docke…

矩阵剪辑系统源码----pc/手机端双开发

剪辑系统,剪辑矩阵系统,剪辑矩阵系统主要是针对抖音、快手、bili平台的一个工具,今天就来给大家交流一下这 个产品的主要功能以及构成。剪辑矩阵系统,矩阵剪辑系统源码-这产品主要功能就是一个视频剪辑功能,这个视频剪…

深入解析:探索Nginx与Feign交锋的背后故事 - 如何优雅解决微服务通信中的`301 Moved Permanently`之谜!

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

2023年中国数据存储市场现状及发展前景预测分析

中商情报网讯:当前,新一代信息技术快速发展推动信息产业发生了重大变革,数据存储行业将很快成为信息领域一个重要的产业分支。生成式人工智能催生算力需求,各种新兴应用场景对数据存储的容量、效率、流动性和安全性等方面提出了更…

快速入门C++

W...Y的主页😊 代码仓库分享💕 🍔前言: 我们学习了C语言,有了C语言的底子就更容易学习C,今天让我们认识一下C,并了解分析一下C。 目录 什么是C 为什么会出现C C的发展史 C与C语言的区别 …

漫画:大模型用于腾讯广告,难在哪?

(一)关键词:三大套路 大模型火了,大模型的套路也火了。 套路一: 但凡有点科技含量的公司, 没个大模型都对不起“市值”和“估值”。 面子谁不要? 那用开源。 套路二: 说早有布局&…

代码随想录Day16 LeetCode T654 最大二叉树 T617 合并二叉树 T700 二叉搜索树中的搜索

本文思路和更详细的解析来自于:代码随想录 (programmercarl.com)​​​​​​ LeetCode T654 最大二叉树 题目链接:654. 最大二叉树 - 力扣(LeetCode) 题目思路: 这题和昨天的题目很像,我们仍然需要构造一棵二叉树,我们仍然使用递归来完成,以下我们开始…

vue原生实现element上传多张图片浏览删除

vue原生实现element上传多张图片浏览删除 <div class"updata-component" style"width:100%;"><div class"demo-upload-box clearfix"><div class"demo-upload-image-box" v-if"imageUrlArr && imageUrlAr…

使用 Eziriz .NET Reactor 对c#程序加密

我目前测试过好几个c#加密软件。效果很多时候是加密后程序执行错误&#xff0c;或者字段找不到的现象 遇到这个加密软件用了一段时间都很正常&#xff0c;分享一下使用流程 破解版本自行百度。有钱的支持正版&#xff0c;我用的是 Eziriz .NET Reactor 6.8.0 第一步 安装 Ezi…

内存操作函数(memcpy、memmove、memset、memcmp)---- C语言

文章目录 摘要1. memcpy1.1 函数介绍1.2 模拟实现 2. memmove2.1 函数介绍2.2 模拟实现 3. memset3.1 函数介绍 4. memcmp4.1 函数介绍 摘要 本篇文章介绍了C语言中常用的内存操作函数&#xff0c;包括 memcpy、memmove、memset和memcpy。这些函数用于处理内存数据的复制、移动…

新鲜速递:Spring Cloud Alibaba环境在Spring Boot 3时代的快速搭建

了解 首先&#xff0c;Spring Cloud Alibaba使用的是Nacos作为服务注册和服务发现的中间件。 能力在提供者那里&#xff0c;而消费者只需知道提供者提供哪些服务&#xff0c;而无需关心提供者在哪里&#xff0c;实际调用过程如下图 准备工作 1、需要下载并安装Nacos最新版…

计算机丢失msvcr120.dll解决办法,快速解决的力量文件丢失

关于计算机丢失msvcr120.dll应该很多朋友都遇到过&#xff0c;本篇文章将和大家探讨一下关于计算机丢失msvcr120.dll解决办法。同时想和大叫一起了解一下msvcr120.dll文件到底有什么作用&#xff0c;是不是必须将其恢复。 一.msvcr120.dll的作用 msvcr120.dll文件时电脑中的一…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 编写服务器

文章目录 一、自定义应用层协议请求与响应channel 二、自定义请求格式三、自定义响应格式四、服务器代码编写 一、自定义应用层协议 咱们这里的客户端与服务器的通信是基于TCP协议实现的. 当前要交互的 Message,以及调用各种API的请求,其实都是二进制数据. 因此咱们要自定义…