利用异常实现短期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没法使用 ,所以国内的签名检测方式也是“千奇百怪” 。发展至今每种方法都有一…

【ARM Coresight 系列文章 9 -- ETM 介绍 1】

文章目录 ARM Coresight ETM 介绍1.1.1 ARM Coresight ETM 版本介绍1.1.2 ARM Coresight 常见术语1.2 ARM Coresight ETM 常用寄存器介绍1.2.1 TRCVIIECTLR(ViewInst Include-Exclude Control Register)1.2.2 TRCVISSCTLR(ViewInst Start/Stop Processing Element Comparator C…

【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作为领先的品牌,致力于打造统一门户系统,为企业提供全方位的服务和解决方案。本文将以知乎的…

常见的C/C++开源QP问题求解器

1. qpSWIFT qpSWIFT 是面向嵌入式和机器人应用的轻量级稀疏二次规划求解器。它采用带有 Mehrotra Predictor 校正步骤和 Nesterov Todd 缩放的 Primal-Dual Interioir Point 方法。 开发语言:C文档:传送门项目:传送门 2. OSQP OSQP&#…

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

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

Python 中最常用的4种股票价格移动平均方法(三)

一、简介 移动平均线是各级交易者和投资者最广泛使用的技术指标之一。它们通过计算特定时期内的平均价格来帮助消除股票价格的固有波动性。移动平均线计算起来很简单,但也有更复杂的形式,旨在捕捉市场的更多细微差别。 这个由四部分组成的系列将讨论总共 4 种不同的移动平均方…

【8】c++设计模式——>单一职责原则

C面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类,所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。让类的功能单一,不让类与具体的事物耦合。 设计模式中所谓的单一职责原则,就是对一个类而言&…

CountDownLatch闭锁原理解析

CountDownLatch闭锁原理解析 在Java并发编程中,CountDownLatch是一个常用的工具类,用于实现闭锁(latch)。闭锁是一种常见的同步机制,用于控制线程的执行流程,确保某些线程在执行之前满足特定的条件。CountDownLatch尤其在多线程协…

DIY一个智能音箱

十一假期里将蓝牙音箱改造成一个智能音箱, 参考了网上的实现方法, 后台的大语言模型使用的是百度的文心一言. 账号 Picovoice 唤醒词服务 https://console.picovoice.ai/ 我绑定了github账号. 访问https://picovoice.ai/,注册账号,然后进入控制台, 目前不…

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…

docker命令,免sudo

docker命令,免sudo 一、创建docker用户组 # 查看有无用户组 cat /etc/group | grep docker # 若无,创建 sudo groupadd docker二、添加当前用户到用户组 sudo gpasswd -a ${USER} docker三、重启docker服务 sudo service docker restart四、重启会话…

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 &…