利用异常实现短期hook

场景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.mzph.cn/news/101269.shtml

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

相关文章

Android Termux安装MySQL,并使用cpolar实现公网安全远程连接[内网穿透]

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

2023-10-11 LeetCode每日一题()

2023-10-11每日一题 一、题目编号 2512. 奖励最顶尖的 K 名学生二、题目链接 点击跳转到题目位置 三、题目描述 给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始&…

docker概念

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

2018架构真题案例(四十九)

某文件采用多级索引结构,磁盘大小4K字节,每个块号4字节,那么二级索引结果时,文件最大。 A、1024 B、1024*1024 C、2048*2048 D、4096*4096 答案:B 霍尔三维结构以时间堆、()堆、知识堆组成…

聊聊Android签名检测7种核心检测方案详解

聊聊Android签名检测总结与反思 背景: 这篇文章只讲Android端签名检测,安卓发展到现在,因为国内环境没有谷歌市场,所以很多官方推荐的Api没法使用 ,所以国内的签名检测方式也是“千奇百怪” 。发展至今每种方法都有一…

【ElasticSearch】深入探索 DSL 查询语法,实现对文档不同程度的检索,以及对搜索结果的排序、分页和高亮操作

文章目录 前言一、Elasticsearch DSL Query 的分类二、全文检索查询2.1 match 查询2.2 multi_match 查询 三、精确查询3.1 term 查询3.2 range 查询 四、地理坐标查询4.1 geo_bounding_box 查询4.2 geo_distance 查询 五、复合查询5.1 function score 查询5.2 boolean 查询 六、…

WorkPlus一站式解决方案,助力企业构建统一门户系统

在信息爆炸的时代,企业管理面临着海量的数据和各类业务应用的复杂性。如何实现信息的井然有序、高效管理,成为企业发展的关键。WorkPlus作为领先的品牌,致力于打造统一门户系统,为企业提供全方位的服务和解决方案。本文将以知乎的…

广州华锐互动:候车室智能数字孪生系统实现交通信息可视化

随着科技的不断发展,数字化技术在各个领域得到了广泛的应用。智慧车站作为一种新型的交通服务模式,通过运用先进的数字化技术,为乘客提供了更加便捷、舒适的出行体验。 将智慧车站与数字孪生大屏结合,可以将实际现实世界的实体车站…

java 无感hook实现(修改jdk)

背景 1 工作需要,需要修改一个java的程序逻辑,之前都是用的frida修改的,但是现在的工作场景,重视效率,所以frida这种重工具被pass了,只能重新选其他工具,初始的时候是想用java本身的一些修改工…

纸、纸板和纸制品 有效回收组分的测定

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品,也适用于铝箔…

微信小程序通过 movable-area 做一个与vuedraggable相似的上下拖动排序控件

因为只是做个小案例 我就直接代码写page页面里了 其实很简单 组件稍微改一下就好了 wxss /* 设置movable-area的宽度 */ .area{width: 100%; }/* a b c 每条元素的样式 */ movable-view {width: 100%;background-color: red;height: 40px;line-height: 40px;color: #FFFFFF;tex…

day

#include <iostream> using namespace std; class Per {//算术运算符friend const Per operator(const Per &k1,const Per &k2);friend const Per operator-(const Per &k1,const Per &k2);friend const Per operator*(const Per &k1,const Per &…

3ds Max渲染太慢?创意云“一键云渲染”提升3ds Max渲染体验

&#xfeff;在数字艺术设计领域&#xff0c;3ds Max是广泛使用的三维建模和渲染软件之一。然而&#xff0c;许多用户都面临着一个共同的问题&#xff1a;渲染速度太慢。渲染一帧画面需要耗费数小时&#xff0c;让人无法忍受。除了之前给大家介绍的几种解决方法外&#xff1a; …

Vue3中reactive, onMounted, ref,toRaw,conmpted 使用方法

import { reactive, onMounted, ref,toRaw,conmpted } from vue; vue3中 reactive &#xff0c;ref &#xff0c; toRaw&#xff0c;watch&#xff0c;conmpted 用法 toRaw 返回原响应式对象 用法&#xff1a; const rowList toRaw(row) reactive:ref: ref和reactive都是V…

快讯|Tubi 有 Rabbit AI 啦

在每月一期的 Tubi 快讯中&#xff0c;你将全面及时地获取 Tubi 最新发展动态&#xff0c;欢迎星标关注【比图科技】微信公众号&#xff0c;一起成长变强&#xff01; Tubi 推出 Rabbit AI 帮助用户找到喜欢的视频内容 Tubi 于今年九月底推出了 Rabbit AI&#xff0c;这是一项…

有效回收组分含量

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品&#xff0c;也适用于铝箔…

【自动驾驶】PETR/PETRv2/StreamPETR论文分析

1.PETR PETR网络结构如下&#xff0c;主要包括image-backbone, 3D Coordinates Generator, 3D Position Encoder, transformer Decoder 1.1 Images Backbone 采用resnet 或者 vovNet,下面的x表示concatenate 1.2 3D Coordinates Generator 坐标生成跟lss类似&#xff0c;假…

如何对比github中不同commits的区别

有时候想要对比跨度几十个commits之前的代码区别&#xff0c;想直接使用github的用户界面。可以直接在官网操作。 示例 首先要创建一个旧commit的branch。进入该旧的commit&#xff0c;然后输入branch名字即可。 然后在项目网址后面加上compare即可对比旧的branch和新的bran…

【轻松玩转MacOS】故障排除篇

引言 在使用 MacOS 时&#xff0c;遇到故障是在所难免的。不要担心&#xff0c;这篇文章将为您提供一些常见的故障排除步骤&#xff0c;并介绍如何联系苹果的支持团队寻求帮助。让我们一起来看看吧&#xff01; 一、常见的故障排除步骤 1.1 网络连接问题 如果你发现你的Mac…

初识华为云数据库GaussDB for openGauss

01 前言 GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000的扩展能力&#xff0c;PB级海量存储。同时拥有云上高可用&#xff0c;高可…