C/C++逆向分析实战:变量存储与安全防护全攻略

news/2025/10/11 14:47:32/文章来源:https://www.cnblogs.com/virboxprotector/p/19132964

在软件开发的世界里,C/C++语言因其卓越的性能和强大的功能而备受开发者青睐。然而,随着技术的不断进步,逆向工程也逐渐成为一种常见的攻击手段。今天,我们将深入探讨C/C++中不同类型的变量在逆向分析中的表现,并分享一些实用的安全防护技巧,帮助你保护程序免受恶意篡改。
一、Demo代码解析
为了更好地理解变量在逆向分析中的表现,我们先来看一个简单的C语言程序。这个程序虽然简单,但却包含了普通局部变量、静态局部变量、全局变量、静态全局变量和const全局变量等多种类型的变量,堪称一个“变量的小型动物园”。
c
复制

int g_global_int = 0x01;
static int g_static_global_int = 0x02;
const int g_const_global_int = 0x03;

void local_variable_demo()
{
int local_int = 0x04;
static int static_local_int = 0x05;
const int const_local_int = 0x06;

printf("%d, %d, %d\n", local_int, static_local_int, const_local_int);

}

void global_variable_demo()
{
printf("%d, %d, %d\n", g_global_int, g_static_global_int, g_const_global_int);
}

int main()
{
local_variable_demo();
global_variable_demo();

return 0;

}

接下来,我们将使用x64dbg工具对编译后的程序进行逆向分析。x64dbg是一个开源的调试工具,它可以帮助我们深入查看程序的内部结构和运行过程,就像一个“代码的X光机”。
二、局部变量的逆向分析
(一)普通局部变量
在local_variable_demo函数中,普通局部变量local_int的存储和访问方式如下:

栈空间的开辟:sub esp, 0xD8,这条指令通过减少栈顶指针esp的值来开辟栈空间。栈空间是程序运行时动态分配的一块内存区域,用于存储函数的局部变量、函数调用的上下文信息等。栈空间的特点是后进先出(LIFO),就像一个装满盘子的架子,你只能从最上面拿盘子,也只能把新的盘子放在最上面。
变量的初始化:mov dword ptr ss:[ebp-0x8], 0x4,将值0x04写入栈上的ebp-0x8位置。ebp是基址指针寄存器,它指向当前函数的栈帧的底部。通过ebp加上偏移量,可以方便地访问函数的局部变量和参数。
变量的读取:mov edx, dword ptr ss:[ebp-0x8],将ebp-0x8位置的值读取到寄存器edx中,以便后续操作。寄存器是CPU内部的一块非常小但速度极快的存储区域,用于存储临时数据和指令。在访问内存中的数据时,通常会先将数据加载到寄存器中,然后再进行操作。

(二)静态局部变量
静态局部变量static_local_int的存储和访问方式有所不同:

静态局部变量在程序编译时就已经初始化完成,其地址指向数据段。在运行时,直接从数据段读取值,如mov ecx, dword ptr ds:[0BAA024h]。静态局部变量的特点是它在函数调用结束后不会被销毁,而是保留在内存中,直到程序结束。这使得静态局部变量可以保存函数调用之间的状态信息。

(三)const局部变量
const_local_int的存储和访问方式与普通局部变量类似,但在编译器层面,const变量的值不可修改。如果尝试修改,编译器会报错。const关键字的作用是告诉编译器,这个变量的值是只读的,不能被修改。这不仅可以防止程序员不小心修改了变量的值,还可以让编译器进行一些优化,提高程序的性能。
三、全局变量的逆向分析
在global_variable_demo函数中,三种全局变量的存储位置如下:

普通全局变量和静态全局变量存储在.data段,该段是可写的。全局变量是在整个程序范围内都可以访问的变量,它们在程序启动时被初始化,并在程序结束时被销毁。普通全局变量和静态全局变量的区别在于,普通全局变量可以在程序的任何地方访问,而静态全局变量只能在定义它们的文件内部访问。
const全局变量存储在.rdata段,该段是只读的。const全局变量的特点是它的值在程序运行过程中不能被修改,这使得它被存储在只读数据段中,以防止被意外修改。

四、安全性问题与防护措施
逆向工程可能会导致程序的数据被篡改,从而引发安全问题。为了保护程序,我们可以采取以下措施:

使用保护工具:如Virbox protector,它可以对程序进行加密和保护,防止调试和分析。这些保护工具通过加密程序的代码和数据,使得逆向工程变得更加困难。它们还可以检测到调试器的存在,并在检测到调试器时停止程序的运行,从而防止恶意篡改。
内存校验:定期校验内存中的关键数据,确保其未被篡改。内存校验是一种通过计算数据的校验和或哈希值来检测数据是否被篡改的技术。如果数据被篡改,校验和或哈希值就会发生变化,从而可以检测到篡改行为。

通过以上措施,我们可以有效提升程序的安全性,防止恶意篡改。
五、总结
今天,我们通过一个简单的Demo程序,深入探讨了C/C++中不同类型的变量在逆向分析中的表现,并讨论了如何保护程序免受恶意篡改。希望这篇文章能帮助你更好地理解和应用这些知识,提升你的开发和安全防护能力。
如果你对C/C++的逆向分析感兴趣,或者有其他技术问题想要探讨,欢迎在评论区留言。让我们一起学习,共同进步!

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

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

相关文章

2025 最新超声波清洗机厂家推荐排行榜:工业 / 精密 / 实验室多场景适配厂商权威解析数控/通过式/多功能/实验室超声波清洗机厂家推荐

在工业制造精密化、医疗检测严苛化、科研实验精细化的趋势下,超声波清洗机已成为跨领域生产的核心设备,其性能直接决定产品合格率与实验准确性。但当前市场乱象显著:部分厂商技术滞后,设备无法达到半导体行业微米级…

(8)ASP.NET Core2.2 中的MVC路由一 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LED无线打气泵方案芯片(CSU18P88)

无线打气泵是一种常见的气体压缩设备,它可以将空气或其他气体压缩成高压气体,用于充气、输送、压缩等工业和生活领域。打气泵的原理是利用机械或电动力量将气体压缩,使其体积减小,压力增大,从而达到充气的目的。无…

穿透式监管合规:政府投资基金数字化报送实践(璞华公开课第4期活动回顾)

2025年9月12日,由苏州市金融科技协会指导、璞华科技有限公司主办的第 4 期线上公开课 ——“穿透式监管合规:政府投资基金数字化报送实践” 顺利收官。本次公开课聚焦政府投资基金监管痛点,结合政策要求与实践案例,…

PiXYZ Studio 2021:Unity 生态下工业级 3D 数据处理的效率革命

在工业设计与实时 3D 开发领域,复杂 CAD 模型的导入、优化与衔接始终是影响项目效率的关键环节。Unity 推出的PiXYZ Studio 2021,正是针对这一痛点打造的专业 3D 数据准备与优化工具 —— 它通过自动化批处理、实时协…

国产项目管理工具Gitee:数字化转型浪潮中的本土化破局者

国产项目管理工具Gitee:数字化转型浪潮中的本土化破局者 当今企业数字化转型已进入深水区,项目管理工具作为提升协作效率的核心引擎,正经历着从"能用"到"好用"的质变过程。在这一领域,国际巨头…

网络安全领域没有真正的初级岗位

本文深入探讨网络安全领域初级岗位的特殊性,强调扎实的技术基础在安全领域的重要性,包括系统架构、网络知识和编程能力等核心技能,为想要进入该领域的人提供实用建议。网络安全领域没有真正的"初级"岗位 …

2025年磁翻板液位计生产商,制造商哪家好?生产厂家推荐这家!

河北光科测控设备有限公司成立于2009年,注册资金1100万,公司坐落在燕赵大地河北邯郸,占地面积70余亩,已通过ISO9001-2015质量管理体系、ISO14001-2015环境管理体系、ISO45001-2018职业健康安全管理体系三体系认证。…

2025牛客暑期多校训练营4

For the Treasury! 题意简化 在公元11世纪早期的英格兰,有维京海盗团伙。阿斯凯拉德作为一伙维京海盗的首领,要分\(n\)件排成一列的财宝,按约定他本应拿前\(k\)件。但他夜里偷偷调换财宝(每次只能交换相邻两件,每…

软件测试进阶之路:2025年测试工程师必须掌握的三大热门领域

技术进步永无止境,测试工程师唯有不断学习、持续进阶,才能在快速变化的技术 landscape 中保持核心竞争力。希望本文能为您的测试进阶之路提供有益指引。在软件工程日益复杂的今天,测试工程师的角色正经历深刻变革。…

实用指南:Qt QEventLoop的使用的一个问题讨论

实用指南:Qt QEventLoop的使用的一个问题讨论pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

Putty设置SSH隧道,隧道和代理的原理区别(KIMI)

Putty设置SSH隧道,隧道和代理的原理区别(KIMI)本文内容为和AI大模型KIMI的对话记录,仅供参考。User: 我有一台服务器,用putty和winscp能够登录,但是jupyterlab启动后无法从笔记本的浏览器进入,应该如何设置?需…

创新突破!天翼云TeleDB数据库通过中国信通院数据库迁移工具专项测试

近日,天翼云数据传输服务软件(DTS)依据《数据库迁移工具能力要求》,结合天翼云TeleDB数据库产品,顺利通过中国信息通信研究院(简称“中国信通院”)“可信数据库”数据库迁移工具专项测试。测试结果表明,天翼云…

Node.js基础库介绍与使用

Node.js 核心库是内置的、无需安装的模块,提供了文件操作(fs)、网络通信(http/https)、路径处理(path)、工具函数(util)、事件驱动(events)、流处理(stream)和加密(crypto)等基础功能,是其强大能力的基…

gaussdb常用操作 - 吾辈当奋斗

启停# root登录 su - gauss # 停止 gs_ctl stop # 启动 gs_ctl start# 单节点启动 su - gauss gssp# 不常用的操作 # 停止gaussdb gs_ctl stop -D 路径 # 启动gaussdb gs_ctl start -D 路径 # 重启gaussdb gs_ctl res…

Go语言熟练使用指南

掌握 Go 语言并达到熟练水平需要系统学习以下几个方面的内容: 一、语言基础核心基础语法和特性 变量声明:var vs 短声明 :=数据类型:基本类型、复合类型、类型转换 控制结构:if/else、for循环、switch 函数:多返回…

Webpack与Vite原理深度解析

好的,我们来深入浅出地解析一下 Webpack 和 Vite 的原理。这两者都是现代前端领域非常重要的构建工具,但它们的核心思想和实现方式有根本性的不同。 核心思想对比特性 Webpack Vite核心理念 Bundle(打包)。将所有模…

详细介绍:华为路由基础1

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision

UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision 资源

IIS8.5 安装证书

问题:iis8.5 导入证书后消失(在IIS中不可见,在证书管理中可以看到,显示缺少私钥)。也可使使用工具查看证书的安装情况 解决方案:参考: openSSL 命令:openssl pkcs12 -export -out output.pfx \ -inkey server.…