断点检测学习

突然看到了一种反调试的手段,检测api函数的首字节是否为0xcc,即int 3类型的断点,来反调试,尝试一下

#include<stdio.h>
#include<stdlib.h>
void fun(int a) {a++;a--;a += 5;a -= 5;return;
}
int main() {void (*ptr)(int) = NULL;ptr = fun;int i =0; char *arr=(char*)(ptr);for (i = 0; i < 99; i++) {printf("0x%2x\t", arr[i]);}return 0;
}

最开始的时候就遇到了一个问题,我用的virtual studio ,但是这是c++编译的,导致最后的函数指针不是指向的fun函数,这里可以很清楚的看到。

额,不太清楚编译的原理,那我用纯c,直接用devc++,里面有自带的gcc编译器

然后就和我预想的一样了,fun就是那个函数指针,在fun里多打一点断点(有个问题,为什么fun函数编译出来会有个nop,不是很懂)

执行结果上面就有预期的0xCC了,可见,ida确实是用的int 3断点

这种方法很简单,也很容易绕过,我们来看一下硬件断点,硬件断点基于DRx寄存器,换句话说,可以通过检测DRx寄存器来检测硬件断点

可以通过SetThreadContext直接设置指定线程的调试寄存器

DRx寄存器可以直接操作,但是需要设置特权级CPL等于0,这里采用比较简单的方法,直接用GetThreadContext获取当前线程的上下文

我一共下了3个硬件断点,执行结果如下

可见,确实用DRx寄存器来设置了硬件断点,而该程序正常执行情况(没有断点)如下

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
const char *strr = (const char*)"hello touful";
int main()
{   printf("enter\n");//获取当前线程的句柄HANDLE hThread = GetCurrentThread();//创建一个CONTEXT结构体CONTEXT threadContext;threadContext.ContextFlags = CONTEXT_ALL;//获取当前线程的运行上下文if (!GetThreadContext(hThread, &threadContext)){printf("GetThreadContext failed\n");return 0;}printf("DRO = 0x%x\n", threadContext.Dr0);printf("DR1 = 0x%x\n", threadContext.Dr1);printf("DR2 = 0x%x\n", threadContext.Dr2);printf("DR3 = 0x%x\n", threadContext.Dr3);printf("exit\n");return 0;
}

这里顺便贴出CONTEXT结构体的定义

typedef struct DECLSPEC_NOINITALL _CONTEXT {//// The flags values within this flag control the contents of// a CONTEXT record.//// If the context record is used as an input parameter, then// for each portion of the context record controlled by a flag// whose value is set, it is assumed that that portion of the// context record contains valid context. If the context record// is being used to modify a threads context, then only that// portion of the threads context will be modified.//// If the context record is used as an IN OUT parameter to capture// the context of a thread, then only those portions of the thread's// context corresponding to set flags will be returned.//// The context record is never used as an OUT only parameter.//DWORD ContextFlags;//// This section is specified/returned if CONTEXT_DEBUG_REGISTERS is// set in ContextFlags.  Note that CONTEXT_DEBUG_REGISTERS is NOT// included in CONTEXT_FULL.//DWORD   Dr0;DWORD   Dr1;DWORD   Dr2;DWORD   Dr3;DWORD   Dr6;DWORD   Dr7;//// This section is specified/returned if the// ContextFlags word contians the flag CONTEXT_FLOATING_POINT.//FLOATING_SAVE_AREA FloatSave;//// This section is specified/returned if the// ContextFlags word contians the flag CONTEXT_SEGMENTS.//DWORD   SegGs;DWORD   SegFs;DWORD   SegEs;DWORD   SegDs;//// This section is specified/returned if the// ContextFlags word contians the flag CONTEXT_INTEGER.//DWORD   Edi;DWORD   Esi;DWORD   Ebx;DWORD   Edx;DWORD   Ecx;DWORD   Eax;//// This section is specified/returned if the// ContextFlags word contians the flag CONTEXT_CONTROL.//DWORD   Ebp;DWORD   Eip;DWORD   SegCs;              // MUST BE SANITIZEDDWORD   EFlags;             // MUST BE SANITIZEDDWORD   Esp;DWORD   SegSs;//// This section is specified/returned if the ContextFlags word// contains the flag CONTEXT_EXTENDED_REGISTERS.// The format and contexts are processor specific//BYTE    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];} CONTEXT;

对于内存断点,是以页的方式添加的,设置页的权限位就行了,最常用的两种断点实现了最常用的检测方式

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

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

相关文章

项目讲解:让你在IT行业面试中以开发、实施、产品更近一步

1、会议系统项目 项目介绍 提示&#xff1a;可以简单介绍IT技术发展的背景 面试准备 开发 实施 产品 2、医疗项目 项目介绍 提示&#xff1a;可以谈谈你认为IT行业就业方向有哪些&#xff0c;并说出你认为最好的就业领域是什么&#xff1f; 面试准备 开发 实施 产品 3、数字化交…

【STM32】W25Q64 SPI(串行外设接口)

一、SPI通信 0.IIC与SPI的优缺点 https://blog.csdn.net/weixin_44575952/article/details/124182011 1.SPI介绍 同步&#xff08;有时钟线&#xff09;&#xff0c;高速&#xff0c;全双工&#xff08;数据发送和数据接收各占一条线&#xff09; 1&#xff09;SCK:时钟线--&…

Spring Boot要如何学习?【云驻共创】

Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。我这里会分享一些学习Spring Boot的方法和干货&#xff0c;包括…

计算机毕业设计选题推荐-内蒙古旅游微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Spring Cloud Alibaba Sentinel 简单使用

Sentinel Sentinel 主要功能Sentinel 作用常见的流量控制算法计数器算法漏桶算法 令牌桶算法Sentinel 流量控制Sentinel 熔断Sentinel 基本使用添加依赖定义资源定义限流规则定义熔断规则如何判断熔断还是限流自定义 Sentinel 异常局部自定义异常全局自定义异常系统自定义异常…

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…

树与二叉树堆:树

目录 树&#xff1a; 树的概念&#xff1a; 树的相关概念&#xff1a; 1、结点的度&#xff1a; 2、叶节点&#xff1a;度为0的节点 3、非终端节点或分支节点&#xff1a; 4、父节点和子节点&#xff1a; 5、兄弟节点&#xff1a; 6、树的度&#xff1a; 7、树的层次或…

linux centos7 安装nginx

1、添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm2、安装nginx sudo yum install -y nginx3、启动nginx sudo systemctl start nginx.service开机自动启…

JS--localStorage设置过期时间的方案(有示例)

原文网址&#xff1a;JS--localStorage设置过期时间的方案(有示例)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何使用localStorage设置数据的过期时间。 问题描述 localStorage是不支持设置过期时间的&#xff0c;cookie虽然支持设置过期时间但它存的数据量很小。所…

Deep Learning for Monocular Depth Estimation: A Review.基于深度学习的深度估计

传统的深度估计方法通常是使用双目相机&#xff0c;计算两个2D图像的视差&#xff0c;然后通过立体匹配和三角剖分得到深度图。然而&#xff0c;双目深度估计方法至少需要两个固定的摄像机&#xff0c;当场景的纹理较少或者没有纹理的时候&#xff0c;很难从图像中捕捉足够的特…

基于JPBC的无证书聚合签名方案实现

基于JPBC的无证书聚合签名方案实现 摘要 一开始签名方案是基于PKI的&#xff0c;无证书签名起源于 基于身份密码体制&#xff0c; 2009 年第一篇无证书签名方案1被提出&#xff0c;随后出现了一些列方案2,3;包括无配对的无证书聚合签名方案4,更多内容参考文献5. 暂时没有看见…

网工内推 | 字节原厂,正式编,网络工程师,最高30K*15薪

01 字节跳动 招聘岗位&#xff1a;网络虚拟化高级研发工程师 职责描述&#xff1a; 1、负责字节跳动虚拟网络产品的研发&#xff0c;包括但不局限于网络VPC、NAT、LB负载均衡等&#xff1b; 2、负责字节跳动网络基础平台的研发&#xff0c;包括但不局限于网络控制面系统、容器…

如何通过算法模型进行数据预测

当今数据时代背景下更加重视数据的价值&#xff0c;企业信息化建设会越来越完善&#xff0c;越来越体系化&#xff0c;以数据说话&#xff0c;通过数据为企业提升渠道转化率、改善企业产品、实现精准运营&#xff0c;为企业打造自助模式的数据分析成果&#xff0c;以数据驱动决…

Sentinel 系统规则 (SystemRule)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

【Python 千题 —— 基础篇】2 的 N 次方

题目描述 题目描述 2 的 N 次方。输入一个整数 N&#xff0c;使用 for 循环计算 2 的 N 次方的值。 输入描述 输入一个整数值 N。 输出描述 输出 2 的 N 次方的值。 示例 示例 ① 输入&#xff1a; 20输出&#xff1a; 请输入一个整数 N: 20 2 的 20 次方的值是: 10…

sqlmap的使用笔记及示例

sqlmap的使用笔记 文章目录 sqlmap的使用笔记1. 目标2. 脱库2.1. 脱库&#xff08;补充&#xff09; 3. 其他3.1. 其他&#xff08;补充&#xff09; 1. 目标 操作作用必要示例-u指定URL&#xff0c;检测注入点sqlmap -u http://example.com/?id1-m指定txt&#xff0c;里面有…

PTA 7-50 完全二叉搜索树

7-50 完全二叉搜索树 超详细讲解&#xff0c;超详细讲解&#xff0c;超详细讲解&#xff01; 7-50 完全二叉搜索树 分数 30 全屏浏览题目 作者 陈越 单位 浙江大学 一个无重复的非负整数序列&#xff0c;必定对应唯一的一棵形状为完全二叉树的二叉搜索树。本题就要求你输…

Nacos介绍与使用

Nacos介绍与使用 文章目录 Nacos介绍与使用一. 什么是Nacos1 Nacos功能1.1 配置中心1.2 注册中心 2.为什么要使用Nacos 二.Nacos 部署安装1. Nacos 部署方式2. Nacos 安装3. 配置数据源4. 开启控制台授权登录&#xff08;可选&#xff09; 三. Nacos配置中心的使用1. 创建配置信…

2023年【T电梯修理】考试题及T电梯修理考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试题是安全生产模拟考试一点通总题库中生成的一套T电梯修理考试报名&#xff0c;安全生产模拟考试一点通上T电梯修理作业手机同步练习。2023年【T电梯修理】考试题及T电梯修理考试报名 1、【多选题】GB/T1…

python日志输出和命令行参数解析示例

代码包含日志终端输出、日志文件输出和命令行参数解析示例 主要功能&#xff0c;根据命令行参数复制对应比例的文件到指定的文件夹中&#xff0c;并输出相应日志 import os import random import shutil import logging import argparse def copy_random_files(input_folder, …