加密与解密 调试篇 动态调试技术 (二)

news2024/12/23 5:52:44

我们在 (一)中调试了一个程序   接着我们开始继续学习

常见的断点

这里有

INT 3断点
硬件断点
内存断点
消息断点等

1.INT 3 断点

我们在OllyDbg中 可以使用 命令 bp 或者 F12进行断点

INT3断点 就是在程序中 对该位置的代码 进行替换

替换为INT3

INT3 是一个软中断指令 
在x86框架中触发进行调试
INT3就是最常用的断点

其中软中断 是 代码触发的 而不是硬件问题触发的中断

在ollydbg中 其实我们按下F2 程序就会在这里设置 INT3 只是ollydbg进行了隐藏

显示出来的是中断前的指令

INT3 机器码是 0xCC 也叫做 CC指令

在程序执行到INT3指令导致的异常时候

调试器会捕捉到异常
从而停在断点处
然后把断点处的代码恢复为之前的代码

INT3的优点是可以设置无数个断点
缺点是改变了代码 容易被软件检测到



检测

如果软件防止API被下断点
有一些软件检测API的首地址是否为0xCC 

这里给出检测方式

用C语言检测
这个方法就是 取得检测函数的地址
然后读取第一个字节
判断是否为CC
这里是检测的代码 对MessageBoxA


FARPROC Uaddr ;
BYTE Mark = 0;
(FARPROC&) Uaddr = GetProcAddress (LoadLibrary("user32.dll"),"MessageBoxA");
加载 user32.dll库中的 MessageBoxA函数
Mark = *((BYTE*))Uaddr;                 把Mark 设定为 指向 Uaddr的指针
if(Mark == 0xCC)                判断第一个字节是否为0xCC 即INT3
    return TRUE

当程序执行后 对MessageBoxA下断点 程序就会发现

绕过

如果我们要躲过检测 就把断点设置在函数的尾部或者内部 

例如把断点设置在函数入口的下一行 这样我们就可以绕过检测

2.硬件断点

硬件断点和BRx调试寄存器有关

RBx调试寄存器中的 x可以是 0~3的数字

RBx调试寄存器用于设置硬件断点 在CPU执行到设置的地址的时候 
就会触发中断 然后交给调试器进行调试

 

DRx调试寄存器具有8个寄存器 (DR0~DR7) 其中 某些寄存器又有自己的特性

DR0~DR3:调试地址寄存器 用于保存需要监视的地址 例如设置硬件断点

DR4~DR5:保留 未公开作用

DR6:调试寄存器组状态寄存器

DR7:调试寄存器组控制寄存器

原理

硬件断点的原理是

使用DR0 DR1 DR2 DR3设定地址  (最多设置4个断点)
然后使用DR7 设定状态


硬件执行断点和CC指令执行断点的作用一样
但是 硬件并不会修改地址第一字节为CC 所以更难检测


在调试器检测到DR0~DR3中的地址的时候 就会触发中断 交给调试器

而不是修改代码 进行中断 

在ollydbg中也可以设置硬件中断

 我们给出硬件中断的例子

还是之前的TraceMe.exe

在CPU窗口的寄存器窗口 右键->查看调试寄存器

然后我们在004013AA处设置硬件中断

然后F9执行程序

我们发现 DR0变为中断地址

在我们设置断点后
其实OllyDbg是在DR0~DR3中的一个设置为中断地址 
然后再DR7中设置相应的控制位

当程序调试到中段地址 CPU就会向OllyDbg发送异常信息

然后可以中断

删除硬件断点

调试->硬件断点

当然也有快捷键

在地址按下F4 可以进行硬件中断 并且在中断后自动删除断点

硬件中断对比INT3中断 不容易被程序察觉 并且运行速度快
缺点是 只能设置4个断点

3.内存断点

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

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

相关文章

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时之网络安全新定义

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络安全新定义 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序,是人工智能技术驱动的自…

如何利用ChatGPT在工作中提高生产力?

[请微信搜索“云智AI助手”、“云智博瑞”关注我们 │ 谢谢支持 ] Cloud wisdom, AI assistant 每次人工智能成为头条新闻,都会引发对它是否会让人类失业的讨论。尽管某些工作可能会变得多余,我们应该学会与人工智能共同工作,将其作为增强自…

Python统计学13——回归的多重共线性、异方差、自相关的检验

在基础统计学,或者是计量经济学里面,需要对回归问题进行一些违背经典假设的检验,例如多重共线性、异方差、自相关的检验。这些检验用stata,r,Eviews什么都很简单,但是用python很多人都不会。下面就带大家实…

2023.5.14Ubuntu忘记MySQL密码

如果您忘记了MySQL的密码,可以按照以下步骤重置MySQL的密码: 停止MySQL服务: sudo service mysql stop启动MySQL服务,并跳过授权表: sudo mysqld_safe --skip-grant-tables &使用MySQL客户端连接到MySQL&#x…

【搭建轻量级图床】本地搭建LightPicture开源图床管理系统 - 异地远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…

吃鸡史:傻鸡是怎么进化并“称霸”世界的?

鸡,给我们的印象是温顺的:温顺地长大,温顺地下蛋,温顺地进油锅… 若是鸡祖宗们知道,有一天它们的鸡子鸡孙会进化成一群不会飞、只知道吃的傻鸡,几千年前的红原鸡骨怕是都要惊得飞出土了! 毕竟…

day17 回话跟踪技术Cookie与Session

会话跟踪技术 问题:一次会话中的多次请求不会共享数据,不能显示.若通过传参数在路径上来解决该问题,不安全. 作用:解决HTTP无状态 http,cookie,session使用的区别 如果使用http中的request.setAttribute(),只能一次共享一个 若使用cookie,cookie存在浏览器中,每一次请求都…

JAVA——类间双向关联关系的实现-Contact与Phone类(电话簿管理系统)

首先:确定代码雏形框架(原始代码) 先根据以往经验写出一般的电话簿管理系统,先把代码雏形框架确定好。 原始代码运行结果: 原始代码源码: package bidirectionalDome;import java.util.ArrayList;public…

前端基础面试题八股文

html语义化的理解 代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息 方便其他设备解析: 如屏幕阅读器、盲人阅读器、移动设备等&#xff0c…

【敬伟ps教程】自由变换

文章目录 自由变换 自由变换 变换可以针对整个图层(组或链接图层),或者选区内 基本操作 编辑–自由变换(CtrilT); 自由变换的控件框来控制变换的效果; 自由变换是独立进行操作的模式,操作结束后需要点击确…

nginx -- 基本操作命令

修改nginx 配置,重新启动nginx流程,先进入到nginx目录 查看nginx状态 ps -ef | grep nginx 修改完/conf/nginx.conf 配置文件后保存 检查配置文件是否正确 ./sbin/nginx -t 检查文件配置正常 关闭nginx ./sbin/nginx -s quit 启动nginx ./sbin/nginx 完成

无线AP中小型、大型两种常见组网方式

无线AP(Access Point)网络覆盖是现代无线网络中的重要组成部分。它提供了无线信号的传输和接收功能,使用户能够在无线网络中进行通信和访问互联网。针对不同的需求和场景,存在两种常见的无线AP网络覆盖组网方式:中小型…

IMX6ULL平台的I2C

IMX6ULL平台的I2C 文章目录 IMX6ULL平台的I2C概述模式和操作 外部信号时钟功能描述I2C系统配置仲裁程序时钟同步信号交换外围总线访问复位中断字节顺序 初始化初始化序列启动的生成传输后软件响应停止的生成重复启动的生成从模式仲裁失败软件限制 I2C内存映射/寄存器定义I2C地址…

三维医学图像处理系统(PACS)源码

三维医学图像处理系统(PACS)源码 系统概述: 它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成, 具有完善的影…

opencv 裁剪图片方法详解

OpenCV 是一个用于计算机视觉和机器学习的开源库。它包含了很多图像处理的功能,包括裁剪图片。在 Python 中,我们可以使用 OpenCV 的 cv2 模块来实现图片的裁剪。 以下是使用 OpenCV 裁剪图片的详细步骤: 1. 导入所需的库: python…

python3.8,torch1.10.2+cu113、torch-geometric 安装

【1】conda create -n name python=3.8 【2】安装 torch 注意先看可适应的最高cuda版本 https://data.pyg.org/whl/ 版本对应 【3】按照顺序安装torch-geometric: torch-sparse、torch-scatter、torch-cluster、 torch-spline-conv \torch-geometric pip install torc…

详解c++新特性—c++11

目录 1、auto 1.1、解释 1.2、语法 1.3、注意事项 1.4、实例 1.5、auto和const的结合 1.6、auto的限制 1.7、auto的应用 2、decltype 2.1、解释 2.2、语法 2.3、注意事项 2.4、实例 2.5、decltype推导规则 2.6、decltype实际运用 3、返回值类型后置 3.1、解释…

怎么用手机拍照方式将车辆合格证转为excel表格?

将车辆合格证转为结构化的Excel文档是一项常见的需求,它可以让用户更方便快捷地对其中的数据进行查询和储存、管理。但当前支持这种需求的手机软件非常少,怎么办呢?用金鸣表格文字识别小程序,即可通过手机拍照,快速地实…

基于JavaSpringBoot+Vue+uniapp实现微信掌上图书小程序

最近开发了一个基于JavaSpringBootVueuniapp实现微信掌上图书小程序,系统非常的nice。 文章目录 1,系统技术简介1.1 Mysql数据库1.2SpringBoot框架 2,系统功能介绍2.1 系统前台功能2.2 系统后台管理2.3 流程图和结构功能图 3,系统…

HydroD 实用教程(八)频域水动力分析

目 录 一、前言二、前处理三、定义/提交作业3.1 创建分析作业3.2 定义分析工况3.3 配置分析选项3.4 设置输出文件3.5 提交求解计算 四、输出文件4.1 Hydrodynamic Results Interface File4.2 Loads Interface File4.3 Analysis Control Data File for Structural Analysis4.4 W…