当前位置: 首页 > news >正文

反调试防护-API

IsDebuggerPresent()
CheckRemoteDebuggerPresent()

其内部实际调用NtQueryInformationProcess()

bool _stdcall ThreadCall()
{while (true){BOOL  pbDebuggerPresent = FALSE;CheckRemoteDebuggerPresent(GetCurrentProcess(), &pbDebuggerPresent);if (pbDebuggerPresent !=0){printf("debug\n");system("pause");exit(-1);}if (IsDebuggerPresent()!=0){printf("debug\n");system("pause");exit(-1);}}
}int main()
{CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCall, NULL, 0, NULL);system("pause");return 0;
}

FS/GS寄存器

debug标志:

X86:FS:0x30

FS指向TEB,FS:30指向PEB,PEB+2指向debug标志。

X64:  GS:0x60

GS指向TEB,GS:60指向PEB,PEB+2指向debug标志。


NtGlobalFlag标志:

在PEB里面


—raedfsdword():
bool _stdcall ThreadCall()
{while (true){//	DWORD dwPeb = __readfsdword(0x30);//	UCHAR BeingDebugged = *(UCHAR *)(dwPeb + 2);//	ULONGLONG ullPeb = __readgsqword(0x60);//	UCHAR BeingDebugged = *(UCHAR *)(ullPeb + 2);//	DWORD dwPeb = __readfsdword(0x30);//	DWORD NtGlobalFlag = *(DWORD *)(dwPeb + 0x68);//  if (NtGlobalFlag == 0x70) printf("debug");//	ULONGLONG dwPeb = __readgsqword(0x60);//	DWORD NtGlobalFlag = *(DWORD *)(dwPeb + 0xbc);//  if (NtGlobalFlag == 0x70) printf("debug");}
}int main()
{CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCall, NULL, 0, NULL);system("pause");return 0;
}

Heap标志:

bool _stdcall ThreadCall()
{while (true){/*DWORD dwPeb = __readfsdword(0x30);DWORD ProcessHeap = *(DWORD*)(dwPeb + 0x18);DWORD dwFlags = *(DWORD*)(ProcessHeap + 0x40);DWORD dwForceFlags = *(DWORD*)(ProcessHeap + 0x44);if (dwFlags != 0x2 || dwForceFlags != 0){printf("debug\n");system("pause");exit(0);}*/UINT64 dwPeb = __readgsqword(0x60);UINT64 ProcessHeap = *(PUINT64)(dwPeb + 0x30);DWORD dwFlags = *(DWORD*)(ProcessHeap + 0x70);DWORD dwForceFlags = *(DWORD*)(ProcessHeap + 0x74);if (dwFlags != 0x2 || dwForceFlags != 0){printf("debug\n");system("pause");exit(0);}}
}int main()
{CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCall, NULL, 0, NULL);system("pause");return 0;
}

上面有些都是依靠api,如果对方挂钩了,api就失效,只有手动实现标志位检查

ZwQueryInformationProcess手动实现

拿PEB:
bool _stdcall ThreadCall()
{MyZwQueryInformationProcess Func = (MyZwQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwQueryInformationProcess");PROCESS_BASIC_INFORMATION pbi = { 0 };while (true){Func(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL);CHAR flag = *((PCHAR)(pbi.PebBaseAddress) + 2);if (flag == TRUE){printf("debug\n");system("pause");exit(0);}}
}int main()
{CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCall, NULL, 0, NULL);system("pause");return 0;
}
调试端口:
bool _stdcall ThreadCall()
{MyZwQueryInformationProcess Func = (MyZwQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwQueryInformationProcess");DWORD isDebugPort = 0;while (true){Func(GetCurrentProcess(), ProcessDebugPort, &isDebugPort, sizeof(isDebugPort), NULL);if (isDebugPort == TRUE){printf("debug\n");system("pause");exit(0);}}
}int main()
{CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadCall, NULL, 0, NULL);system("pause");return 0;
}
隐藏端口:
    DWORD isProcessDebugFlags = 0;func(GetCurrentProcess(), (PROCESSINFOCLASS)0x1F, &isProcessDebugFlags,             sizeof(isProcessDebugFlags), NULL);if (isProcessDebugFlags == 0){printf("debug\n");system("pause");exit(0);}DWORD isProcessDebugObjectHandle = 0;func(GetCurrentProcess(), (PROCESSINFOCLASS)0x1E, &isProcessDebugObjectHandle, sizeof(isProcessDebugObjectHandle), NULL);if (isProcessDebugObjectHandle != 0){printf("debug\n");system("pause");exit(0);}

相关文章:

反调试防护-API

IsDebuggerPresent() CheckRemoteDebuggerPresent() 其内部实际调用NtQueryInformationProcess() bool _stdcall ThreadCall() {while (true){BOOL pbDebuggerPresent FALSE;CheckRemoteDebuggerPresent(GetCurrentProcess(), &pbDebuggerPresent);if (pbDebuggerPres…...

【视频讲解】非参数重采样bootstrap逻辑回归Logistic应用及模型差异Python实现

全文链接:https://tecdat.cn/?p37759 分析师:Anting Li 本文将深入探讨逻辑回归在心脏病预测中的应用与优化。通过对加州大学欧文分校提供的心脏病数据集进行分析,我们将揭示逻辑回归模型的原理、实现过程以及其在实际应用中的优势和不足…...

Linux系统中命令wc

wc(word count)命令是Linux和Unix系统中用于计算字数的一个非常实用的工具。它可以统计文件的字节数、字数、行数等信息。默认情况下,wc命令会输出这三个统计值,但你也可以通过选项来指定只输出其中的某些值。 基本用法 wc [选项…...

redis集群部署

创建ConfigMap redis-cm.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-cluster data:update-node.sh: |#!/bin/shREDIS_NODES"/data/nodes.conf"sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/&quo…...

VUE条件树查询

看如下图所示的功能,是不是可高级了?什么,你没看懂?拜托双击放大看! 是的,我最近消失了一段时间就是在研究这个玩意的实现,通过不懈努力与钻研并参考其他人员实现并加以改造,很好&am…...

vue框架学习 -- 日历控件 FullCalendar 使用总结

最近在项目中要实现日期排班的功能,正好要用到日历视图的控件,经过对比发现,vue 中 使用 FullCalendar 可以实现相关需求,下面对使用过程做一个总结。 一. 引入 FullCalendar 控件 package.json 中添加相关依赖 "dependen…...

[数据集][目标检测]猪数据集VOC-2856张

数据集格式:Pascal VOC格式(不包含分割的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2856 标注数量(xml文件个数):2856 标注类别数:1 标注类别名称:["pig"] 每个类别标注的框数&#xff1a…...

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中,设备管理涵盖多个关键方面,对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术,获取设备…...

OpenCV图像文件读写(3)统计多页图像文件中的页面数量函数imcount()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 返回给定文件中的图像数量。 imcount 函数将返回多页图像中的页面数量,对于单页图像则返回 1。 函数原型 size_t cv::imcount (cons…...

【数据治理-构建数据标准体系】

构建数据标准体系分为六大主要步骤,分别是: 1、规划数据标准 2、开发数据标准 3、发布数据标准 4、执行数据标准 5、数据标准遵从检查 6、维护数据标准 1、规划数据标准 (1)数据标准的规划首先是在公司业务架构和数据架构的范围…...

AI新方向:OpenAI o1是一个更擅长思考的模型系列:高级推理+逻辑严密+更广泛的知识,用于解决复杂的逻辑问题,慢思考

之前推出AI store感觉偏应用,也千篇一律,是AI的一个方向:广度。 现在推出o1 更严密的逻辑,也是AI的一个方向:深度。花更多时间,推理复杂的任务并解决比以前的科学、编码和数学模型更难的问题。确保AI的使用…...

Laravel部署后,CPU 使用率过高

我在部署 Laravel 应用程序时遇到严重问题。当访问量稍微大一点的时候,cpu马上就到100%了, 找了一大堆文档和说明,都是说明laravel处理并发的能力太弱,还不如原生的php。最后找到swoole解决问题。 1、php下载swoole插件&#xff0…...

Rust调用tree-sitter支持自定义语言解析

要使用 Rust 调用 tree-sitter 解析自定义语言,你需要遵循一系列步骤来定义语言的语法,生成解析器,并在 Rust 中使用这个解析器。下面是详细步骤: 1. 定义自定义语言的语法 首先,你需要创建一个 tree-sitter 语言定义…...

如何解决跨域请求中的 CORS 错误

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介如何解决跨域请求中的 CORS 错误1. 引言2. 什么是 CORS?2.1 同源策略示例: 2.2 CORS 请求的类型 3. CORS 错误的原因3.1 常见 CORS 错误示例 4. 解决 CORS 错误的常见方法4.1 在服务器端启用 CORS4.1.1 Node…...

计算机知识科普问答--20(96-100)

文章目录 96、为什么要进行内存管理?1. **多进程环境中的内存共享与隔离**举例:2. **提高内存利用率**举例:3. **虚拟内存支持**举例:4. **内存分配的灵活性与效率**举例:5. **内存保护**举例:6. **内存分段和分页的管理**7. **内存交换(Swapping)**举例:8. **提升系统…...

济南站活动回顾|IvorySQL中的Oracle XML函数使用示例及技术实现原理

近日,由中国开源软件推进联盟PG分会 & 齐鲁软件园联合发起的“PostgreSQL技术峰会济南站”在齐鲁开源社举办。瀚高股份IvorySQL作为合作伙伴受邀参加此次活动。 瀚高股份IvorySQL技术工程师 向逍 带来「IvorySQL中的Oracle XML函数兼容」的议题分享。在演讲中&a…...

【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch

【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术Que2Search 目录 文章目录 【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术Que2Search目录0. 论文信息1. 研究背景:2. 技术背景和发展历史:3. 算法建模3.1 模型架构3.1.1 双塔与分类 …...

海滨体育馆管理系统:SpringBoot实现技巧与案例

2系统关键技术 2.1JAVA技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…...

个人计算机与网络的安全

关于 wifi 大家都知道 wifi 已经使用了 wpa3 非常安全 但很多人不知道 pin 和 wps 这两项有漏洞 我发现很多用户都简单设置了这两项 他们的设置 使他们的网络出现了漏洞 关于 国产的 linux 老实说全是漏洞 默认开启 很多服务 但初始化的设置都有漏洞 关于 系统安全 老…...

AIGC教程:如何用Stable Diffusion+ControlNet做角色设计?

前言 对于生成型AI的画图能力,尤其是AI画美女的能力,相信同行们已经有了充分的了解。然而,对于游戏开发者而言,仅仅是漂亮的二维图片实际上很难直接用于角色设计,因为,除了设计风格之外,角色设…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...