49.实现调试器HOOK机制

news2024/9/22 15:27:56

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

上一个内容:47.HOOK引擎优化支持CALL与JMP位置做HOOK

以 47.HOOK引擎优化支持CALL与JMP位置做HOOK 它的代码为基础进行修改

效果图:游戏会崩溃这里没有处理所以会崩溃,处理后面写

实现方式是通过int3指令,只要处理器执行了int3指令就会触发异常,断点就是使用int3实现的,下图在Ollydbg中对代码打断点之后从Cheat Engine中可以看到内存的值是CC,CC就是int3的硬编码,

Ollydbg中的断点删掉然后从Cheat Engine中可以看到内存的值就恢复了,代码实现也是把要HOOK的地址写成int3然后再给VEH添加一个我们的处理进行拦截

代码:

新加类htdHook2

CWndMain.cpp文件里的修改:

hook.SetHook((LPVOID)0x41FDB2, 6, (LPVOID)0);

CWndMain.h文件里修改:

#include "htdHook2.h"
htdHook2 hook;

htdHook2.h文件里的代码:

#pragma once
#include "HOOKPOINT.h"
class htdHook2
{
public:
    htdHook2();
    void SetHook(LPVOID Address, uchar len, LPVOID AddressRet);
};

htdHook2.cpp文件里的代码

#include "pch.h"
#include "htdHook2.h"

LONG _stdcall PvectoredExceptionHandler(PEXCEPTION_POINTERS val) {
    CString wTxt;
    wTxt.Format(L"111----%X", val->ContextRecord->Eip);
    AfxMessageBox(wTxt);
    return EXCEPTION_CONTINUE_SEARCH;
}

htdHook2::htdHook2()
{
    AddVectoredExceptionHandler(1, PvectoredExceptionHandler);
}

void htdHook2::SetHook(LPVOID Address, uchar len, LPVOID AddressRet)
{
    DWORD dOld;
    DWORD dNew;

    // 更改内存权限让它可读可写
    VirtualProtect(Address, 0x1, PAGE_EXECUTE_READWRITE, &dOld);
    char* code = (char*)Address;
    code[0] = 0xCC;
    VirtualProtect(Address, 0x1, dOld, &dNew);
}

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

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

相关文章

DBA 数据库管理

数据库:存储数据的仓库 数据库服务软件: 关系型数据库: 存在硬盘 ,制作表格的 数据库的参数 [rootmysql50 ~]# cat /etc/my.cnf.d/mysql-server.cnf 主配置文件 [mysqld] datadir/var/lib/mysql 存放数据库目录…

【大模型实操 | LoRA、QLoRA微调大模型实战技巧分享,含常见QA解答!】

文末有福利! 引言 今天给大家分享的这篇文章是关于LoRA微调大模型实操技巧,讨论了从实验中得出的主要经验和教训;此外,本文将解答一些与LoRA技术相关的常见问题。如果你对于微调定制化的大语言模型感兴趣,希望这些见…

HTML(28)——空间转换

空间:是从坐标轴角度定义的XYZ三条坐标轴构成了一个立体空间 Z轴位置与视线方向相同 空间转换 平移 属性: transform: translate3d(x,y,z);transform: translateX();transform: translateY();transform: translateZ(); 取值:像素单位数值…

Why Can’t Robots Click The “I’m Not a Robot” Box On Websites?

Clicking a tiny box tells Google all they need to know about your humanity 你好,我是 Jiabcdefh。 if you’ve browsed the internet for any amount of time, you will likely come across a reCAPTCHA box. These boxes appear when you first enter certain websites…

LabVIEW开发高灵敏静电计

开发了一套基于LabVIEW平台的高灵敏静电计控制软件,用于提升闪烁薄膜探测器在中子和伽马射线探测中的灵敏度标定精度。传统的标定方法存在数据准确性不高和操作复杂性高的问题,因此开发这款软件解决这些挑战,通过自动化控制和高效的数据处理&…

删除重复的图片

一、解决:删除重复的图片 最近在用某网盘下载文件时,发现下载的图片文件有重复的,一个图片重复3次下载。严重占用硬盘,下载速度还不快。 原本有1T多的硬盘容量现在还剩300G,只下载了96%,据观察1%的进度大约需要100G的…

Typora篇-忍痛开启

语雀专业会员即将到期, 我看着99元的学费款, 我决定重新用回Typora。 虽然里面有一些文件但是我还是舍不得ಥ_ಥ 99元巨款。 下面开启我的Typora整活历程, 大家有什么好用的插件快捷方式一起来分享啊。

设计模式之职责链模式(Chain of Responsibility Pattern)

1.概念 职责链模式(Chain of Responsibility Pattern):避免将请求发送者与接收者耦合在一起,让多个对象都有机会接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点:安装配置Spark 重 点: 安装配置Spark 难 点:无 内 容: Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …

身边的故事(十五):阿文的故事:再消失

物镜人非,沧海桑田。像我们这些普通的凡人,哪有什么试错的机会,每走一步都是如履薄冰,小心谨慎,错一步可能就会万劫不复。唉,如果...唉...哪有什么如果... 阿文的房子很快装修完成,入新房那天就…

Linux中的粘滞位及mysql日期函数

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限. 为了解决这个不科学的问题, Linux引入了粘滞位的概念. 粘滞位 当一个目录被设置为"粘滞位"(用chmod t),则该目录下的文件只能由 一、超级管理员删除 二、该目录…

【MYSQL】如何解决 bin log 与 redo log 的一致性问题

该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(crash-safe),需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…

【操作系统】进程管理——进程的同步与互斥(个人笔记)

学习日期:2024.7.8 内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法 进程同步与互斥的概念和意义 为什么要有进程同步机制? 回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征&am…

(十五)GLM库对矩阵操作

GLM简单使用 glm是一个开源的对矩阵运算的库&#xff0c;下载地址&#xff1a; https://github.com/g-truc/glm/releases 直接包含其头文件即可使用&#xff1a; #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <io…

进口生骨肉冻干比国产好?盘点值得入手的高赞生骨肉冻干品牌

不少新手养猫人都会好奇&#xff0c;为何进口生骨肉冻干的价格如此高昂&#xff0c;却仍受到众多养猫达人的青睐&#xff1f;与国产生骨肉冻干相比&#xff0c;进口产品价格高出3-4倍&#xff0c;那么这高昂的价格背后&#xff0c;进口生骨肉冻干究竟物有所值&#xff0c;还是只…

Linux--线程(概念篇)

目录 1.背景知识 再谈地址空间&#xff1a; 关于页表&#xff08;32bit机器上&#xff09; 2.线程的概念和Linux中线程的实现 概念部分&#xff1a; 代码部分&#xff1a; 问题&#xff1a; 3.关于线程的有点与缺点 4.进程VS线程 1.背景知识 再谈地址空间&#xff1a…

申请乙级测绘资质最新标准

截止到目前为止&#xff0c;测绘资质申请条件还是按照自然资源部于2021年发布的《自然资源部办公厅关于印发测绘资质管理办法和测绘资质分类分级标准的通知》&#xff08;自然资办发[2021]43号&#xff09;&#xff0c;具体内容如下&#xff0c;近期想申请测绘资质的企业可以参…

泛微E9开发 根据条件显示/隐藏明细行

根据条件显示/隐藏明细行 1、需求说明2、实现方法3、扩展知识点控制明细数据行的显示及隐藏格式参数说明演示 1、需求说明 主表字段“全部显示/隐藏”&#xff08;下拉框&#xff0c;值&#xff1a;0 全部显示、1 全部隐藏&#xff09;&#xff0c;用来控制所有明细行的显示、隐…

C++基础(十二):string类

这一篇博客&#xff0c;我们正式进入STL中的容器的字符串类的学习&#xff0c;C标准模板库&#xff08;STL&#xff09;中的std::string类是一个用于表示和操作字符串的类。它封装了动态分配的字符数组&#xff0c;提供了丰富的成员函数来进行字符串的操作&#xff0c;例如拼接…

019-GeoGebra中级篇-GeoGebra的坐标系

GeoGebra作为一款强大的数学软件&#xff0c;支持多种坐标系的使用&#xff0c;包括但不限于&#xff1a;笛卡尔坐标系&#xff08;Cartesian Coordinate System&#xff09;、极坐标系&#xff08;Polar Coordinate System&#xff09;、参数坐标系&#xff08;Parametric Coo…