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

计算机系统——模拟病毒感染ELF可执行文件

事先声明本文所述制作简易病毒的操作只适用于计算机系统这门课中加深对于ELF可执行文件的理解是一个等价的“安全实验版本”禁止用于其他违反法律的用途我们的目的是感染干净程序让被感染的程序先输出“Welcome to HNU CSAPP!”然后再执行原有的后续功能并检测同一目录下未被感染的所有文件将它们全部感染。一、可执行文件的核心结构Linux下64位1、ELF 文件头存整个文件核心信息最重要字段 操作系统把程序加载到内存后CPU 第一条执行指令的虚拟地址。2、程序头表 Program Header Table告诉操作系统这个文件有哪些段、每一段在文件里偏移多少、加载到内存哪个地址、权限是什么可读 / 可写 / 可执行。 我们程序正常代码段 .text 就是一个LOAD类型、R-X只读可执行权限的段。3、节区头表 Section Header Table调试、链接用运行时操作系统不读取。4、文件数据段.text代码段原程序所有指令、.data数据段、文件尾部对齐填充空白区与普通.c文件的区别.c是纯文本源码直接字符串插入即可完成感染而ELF 是二进制机器码文件不能直接改字符串需要修改程序内存布局、注入恶意指令、修改程序入口地址实现运行优先执行病毒逻辑再跳转回原程序正常功能。因此想要感染可执行文件的难度更大。二、感染步骤步骤一制作病毒标记避免重复感染 先做防重复感染校验1、在 ELF 文件尾部空闲对齐区域写入一段固定魔数比如HNUCSAPP_VIRUS2、程序运行 / 扫描时先读取文件末尾检查有没有这个标记3、有标记 已经感染跳过无标记 健康文件执行感染。部分代码如下步骤二编写位置无关 PIC 病毒机器码病毒完整逻辑1、打印 Welcome to HNU CSAPP!2、遍历当前目录所有 ELF 可执行文件3、对未感染文件重复整套感染流程4、所有传染工作做完无条件跳回原程序入口让原程序正常运行这里有一个硬性要求必须编译成PIC位置无关代码因为①ELF 每个程序加载地址都不固定绝对地址跳转一定会崩溃②PIC 代码不依赖固定内存地址无论加载到内存哪个位置都能正常执行编写PIC位置无关代码的步骤访问字符串必须用 RIP相对寻址不能访问绝对地址—函数调用汇编代码中的call是相对跳转自动变成 PIC—跳回原程序入口用 RIP 找到存储的原始入口—保护现场不破坏宿主程序寄存器部分代码如下步骤三追加病毒代码到 ELF 文件尾部1、把编译好的病毒二进制机器码拼接在原 ELF 文件的最末尾2、利用 ELF 天然的页对齐冗余空间不破坏原有任何正常代码3、计算病毒代码在文件内的偏移、加载到内存后的虚拟地址部分代码如下步骤四修改程序头表新增可执行 LOAD 段核心关键操作系统只会加载程序头表里声明的 LOAD 段到内存执行1、在原有程序头表末尾新增一个 Program Header 项2、类型PT_LOAD操作系统必须加载到内存3、权限R-X 只读 可执行和原代码段权限完全一致合法合规4、填写病毒代码在文件里的偏移、文件大小、内存虚拟地址、内存大小5、更新整个 ELF 文件的总大小做完这一步程序运行时操作系统会自动把我们的病毒代码和原程序一起加载进进程内存。部分代码如下步骤五劫持程序入口 Entry Point感染灵魂操作1、先备份原来的程序入口地址存到病毒代码固定位置2、修改 ELF 文件头里的Entry Point字段把原本指向原程序第一行指令的地址 → 改成我们病毒代码的起始内存地址效果程序一启动CPU 不再先跑原程序优先执行我们的病毒代码部分代码如下步骤六病毒收尾长跳转RIP还原原程序执行病毒代码执行完所有逻辑打印标语 传染其他文件后最后加一条无条件跳转指令 jmp 原程序备份入口地址这样执行完病毒立刻跳回原来程序的正常起点原程序功能完全不受影响用户完全感知不到异常病毒隐蔽性极强。部分代码如下这样我们就执行完了病毒感染的六个步骤总结下来就是追加病毒二进制代码→修改 ELF 段结构与地址对齐→劫持程序入口点→优先执行病毒传播逻辑→跳转回原程序正常运行→写入标记防止重复感染。感染后程序完整运行链路自我复制、横向感染、不破坏原程序功能操作系统加载 ELF 到内存→ CPU 从新入口病毒地址取指令执行→ 执行病毒打印标语 → 遍历目录感染其他 ELF 文件→ 病毒执行完毕RIP相对跳转回到原始程序入口→ 原程序正常执行自己原本所有功能。三、ELF 感染三大核心准则1、地址对齐严格约束ELF 所有段必须按内存页大小对齐偏移地址不满足对齐要求操作系统拒绝加载程序无法运行。2、地址重定位问题动态链接ELF不能用绝对地址全程必须用PIC位置无关编码否则换环境程序直接错误崩溃。3、栈上下文不破坏病毒代码必须保存并恢复所有寄存器、栈基址不能打乱原程序栈布局不然原程序运行异常、崩溃。与感染.c文件进行对比感染对象修改方式格式约束.c文本源码 易字符串文本插入几乎无约束ELF可执行文件 难追加代码段、修改程序头、劫持入口地址严格 ELF 格式、页对齐、地址合法四、实际操作讲完了理论我们在Ubuntu里面实际操作一下体会这个流程。这里我们使用Ubuntu自带的一个编辑器来保存我们的代码如果使用vim的话可能需要另外安装稍微麻烦点。先编写干净文件1、直接输入nano clean.c2、打开后粘贴下面代码进去#include stdio.h int main() { printf(我是干净程序\n); return 0; }然后按CtrlO保存回车后再按CtrlX退出。之后想要再查看依旧是输入nano clean.c3、编译干净程序gcc clean.c -o clean输入以上代码将clean.c文件编译生成可执行文件ELF。输入ls会看到其中的clean.c就是一开始编辑的源文件而clean就是编译生成的ELF可执行文件。4、运行干净程序./clean运行后你会看到证明干净程序无误。接下来编写病毒代码5、输入nano virus.c进入编辑器后粘贴以下代码#include stdio.h #include stdlib.h #include string.h int main() { FILE *in fopen(clean.c, r); FILE *out fopen(infected.c, w); if (!in || !out) { printf(文件打开失败\n); return 1; } char line[256]; while (fgets(line, sizeof(line), in)) { // 找到 main 函数插入病毒代码 if (strstr(line, int main())) { fputs(line, out); fputs( printf(\Welcome to HNU CSAPP!\\n\);\n, out); continue; } fputs(line, out); } fclose(in); fclose(out); printf(感染完成生成 infected.c\n); return 0; }然后按CtrlO保存回车后再按CtrlX退出。6、编译病毒程序gcc virus.c -o virus7、执行感染./virus8、感染完成你会看到9、检查感染结果很重要cat infected.c你应该看到这是感染后的等效C代码。10、编译“被感染”程序gcc infected.c -o infected11、运行最终程序./infected你会看到输出被感染后的文件先执行了病毒代码然后再执行原有程序 符合预期说明我们设计的病毒正确。五、中途报错可能出现的问题1、gcc不存在输入sudo apt update sudo apt install build-essential -y更新软件列表安装开发环境实际上就是给你的Ubuntu安装编译器否则.c文件无法编译生成ELF可执行文件。2、权限不足有时候你运行./clean会报Permission denied是因为文件没有执行权限。解决办法是输入chmod x clean然后重新运行./clean。这条指令的意思是给clean文件加上executable可执行权限。3、strstr未声明或编译报错在写病毒程序virus.c时可能会看到warning: implicit declaration of function ‘strstr’或者直接报错。是因为我们代码里写了strstr(line, int main())但没有包含头文件。正确做法是在virus.c开头加上#include string.h完整的正确头部应该是这样的#include stdio.h #include stdlib.h #include string.h因为strstr()是字符串处理函数它定义在string.h里。编译器有时候只是 warning不是 error所以这个疏忽很容易忽略。再次声明本实验所编写的病毒代码为简易且安全实验版本不具备侵入其他文件的能力仅用于学习与参考。请勿利用有关知识危害网络安全本文中代码如有错误欢迎指正

相关文章:

计算机系统——模拟病毒感染ELF可执行文件

事先声明:本文所述制作简易病毒的操作,只适用于计算机系统这门课中加深对于ELF可执行文件的理解,是一个等价的“安全实验版本”,禁止用于其他违反法律的用途!我们的目的是感染干净程序,让被感染的程序先输出…...

动手学深度学习(PyTorch版)深度详解(5):深度学习计算核心 —— 卷积操作、填充步幅、汇聚层与 LeNet 完整精讲

前言在深度学习的学习体系中,多层感知机(MLP)是基础入门模型,依托全连接层实现对数据特征的拟合,能够处理简单的表格数据、一维结构化数据分类与回归任务。但当我们面对图像、视频、二维空间序列这类具备空间结构特征的…...

Node.js统一LLM接口开发指南:多模型切换与生产实践

1. 项目概述:为什么我们需要一个统一的LLM接口? 如果你和我一样,在过去一两年里深度折腾过各种大语言模型(LLM)的API,那你一定对下面这个场景不陌生:今天项目要用OpenAI的GPT-4,明天…...

别再硬编码了!用Simulink.Parameter对象管理模型参数的保姆级教程

别再硬编码了!用Simulink.Parameter对象管理模型参数的保姆级教程 第一次接触Simulink建模时,我像大多数新手一样,直接在模块参数框里填写数值。直到某次修改一个电机控制模型,需要在20多个地方调整同一个参数值,才意识…...

SERA代码代理训练框架:低成本高效AI辅助编程方案

1. 项目概述:SERA代码代理训练框架 在当今AI辅助编程领域,代码代理(Coding Agents)正逐渐成为提升开发效率的核心技术。这类系统能够模拟开发者行为,通过理解代码库上下文、分析问题描述并生成有效的代码修改方案。然而传统训练方法面临两大瓶…...

期货量化模拟转实盘检查清单:延迟、成交偏差与异常处理

前言 模拟阶段表现稳定,转实盘后突然失真,是期货量化最常见的落地断层。 问题通常不在策略公式,而在执行链路细节:延迟、成交偏差、异常处理。转实盘前如果没有检查清单,团队容易把环境问题误判成策略失效。 一、延迟检…...

告别VSCode卡顿与插件冲突:一份详细的缓存与插件数据清理指南(附一键清理脚本)

深度优化VSCode性能:精准清理缓存与插件数据的终极指南 每次打开VSCode都要等待漫长的加载时间?插件突然失效却找不到原因?编辑器响应越来越迟钝?这些问题往往源于长期积累的缓存数据和插件残留。本文将带你深入理解VSCode存储机制…...

ARM SVE指令集:SMAX/SMIN极值运算原理与优化实践

1. ARM SVE指令集概述在当今处理器架构设计中,向量处理能力已成为衡量计算性能的关键指标。ARM SVE(Scalable Vector Extension,可扩展向量扩展)作为ARMv8-A架构的重要扩展,突破了传统SIMD指令集的固定宽度限制&#x…...

通过环境变量为Hermes Agent配置Taotoken自定义模型提供方的详细方法

通过环境变量为Hermes Agent配置Taotoken自定义模型提供方的详细方法 1. 准备工作 在开始配置前,请确保已安装 Hermes Agent 框架并创建了 Taotoken API Key。登录 Taotoken 控制台,在「API 密钥」页面生成新密钥并妥善保存。同时,在「模型…...

2026年必看:精选靠谱电商公司,购物无忧新选择

随着电商行业的发展进入精细化、全域化运营阶段,品牌对第三方代运营公司的专业度和技术能力要求越来越高。在这样的背景下,我们为大家精选了几家在特定领域或区域市场具备显著特色的电商代运营企业,帮助大家更好地理解当前市场上的优质服务商…...

海棠山铁哥用《第一大道》对决《灵魂摆渡・浮生梦》,不躺平我们还有机会吗

“努力十年,不如资本铺路。” 当这句吐槽在凌晨 2:15 刷屏,当《灵魂摆渡浮生梦》靠资本加持冲上热搜, 而你的项目、你的方案、你的热爱又一次石沉大海—— 不躺平,我们还有机会吗?01 凌晨的叩问资本的世界我们的世界10…...

LED驱动电路热管理:CCR散热设计与PCB选型实践

1. LED驱动中的热管理挑战在LED驱动电路设计中,恒流调节器(CCR)的热管理是决定系统可靠性的关键因素。作为一名从事LED驱动设计多年的工程师,我见过太多因为热设计不当导致的系统失效案例。CCR器件在工作时会产生显著的热量,这些热量如果不能…...

为什么93%的数据团队还在用Tidyverse 1.x写报告?Tidyverse 2.0的`{reportr}`与`{lifecycle}`双引擎正悄然重构企业数据交付标准

更多请点击: https://intelliparadigm.com 第一章:Tidyverse 2.0自动化数据报告的企业级演进全景 Tidyverse 2.0 不再仅是函数语法的迭代,而是面向企业级数据工程与合规报告场景的架构级重构。其核心演进体现在三方面:统一的元数…...

2026年阿里云Hermes Agent/OpenClaw搭建攻略+百炼token Plan配置解析攻略教程

2026年阿里云Hermes Agent/OpenClaw搭建攻略百炼token Plan配置解析攻略教程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#…...

【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

SVE指令集与DECW指令:现代SIMD编程核心技术解析

1. SVE指令集概述:现代SIMD处理的核心利器在当今处理器架构设计中,向量化计算已成为提升性能的关键手段。Arm的SVE(Scalable Vector Extension)指令集作为新一代SIMD扩展,彻底改变了传统固定长度向量指令的局限性。我第…...

【Docker 27工业集群部署终极指南】:20年运维专家亲授高可用、零宕机落地五步法

更多请点击: https://intelliparadigm.com 第一章:Docker 27工业集群部署的演进逻辑与核心价值 Docker 27并非官方版本号,而是工业界对基于Docker Engine v24.0、配合Docker Compose V2.25与Swarm Mode增强套件所构建的高可靠集群范式的代称…...

终极指南:如何使用免费开源工具深度调试和优化AMD Ryzen处理器性能

终极指南:如何使用免费开源工具深度调试和优化AMD Ryzen处理器性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...

Blender 3MF插件终极指南:让3D打印文件转换变得简单快速

Blender 3MF插件终极指南:让3D打印文件转换变得简单快速 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印文件格式转换而烦恼吗?Blend…...

Windows下Python连接瀚高数据库(HGDB)踩坑记:SM3认证报错‘authentication method 13 not supported’的三种解法

Windows下Python连接瀚高数据库SM3认证报错的深度解决方案 最近在Windows环境下用Python的psycopg2连接瀚高数据库(HGDB)时,遇到了一个让人头疼的问题——SM3认证报错"authentication method 13 not supported"。这个问题看似简单,实则涉及到底…...

对比体验在 Taotoken 上切换不同模型生成代码片段的差异

在 Taotoken 上切换不同模型生成代码片段的体验观察 1. 测试环境与模型选择 本次测试选取了 Taotoken 模型广场中三个擅长代码生成的模型进行对比体验,分别是 claude-sonnet-4-6、gpt-4-turbo-preview 和 deepseek-coder-33b。测试使用相同的 Python 环境与网络条…...

从静态到动态:AI生成可交互虚拟场景的技术原理与实践

1. 项目概述:从“模拟”到“创造”的AI新范式最近在AI生成内容领域,一个名为“sim”的项目在开发者社区里引起了不小的讨论。这个由simstudioai团队开源的项目,其核心并非我们常见的文生图或图生图工具,而是一个旨在构建“模拟世界…...

避坑指南:TMS320F28377D的TMU加速库,在CCS里到底该怎么正确配置与验证?

TMS320F28377D TMU加速库实战:CCS工程配置与性能验证全解析 在C2000系列DSP开发中,TMU(Trigonometric Math Unit)作为28377D独有的硬件加速模块,能显著提升三角函数和除法运算效率。但许多工程师反映,即便在…...

KeymouseGo 实战指南:跨平台键鼠自动化工具深度解析

KeymouseGo 实战指南:跨平台键鼠自动化工具深度解析 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo KeymouseGo…...

苹果手机怎么把照片抠图?2026年最全实战指南

最近很多朋友问我,苹果手机怎么把照片抠图。我之前也为这个问题纠结过,因为iPhone虽然系统很强大,但原生抠图功能其实相当有限。后来经过半年多的实测对比,我总结了一套最实用的解决方案,今天就分享给你。iPhone自带功…...

基于LangChain构建对话式智能体:从ReAct原理到工程实践

1. 项目概述:构建一个基于LangChain的对话式智能体最近在GitHub上看到一个挺有意思的项目,叫“conversational-agent-langchain”。光看名字,很多朋友可能就明白了,这是一个利用LangChain框架来构建对话式智能体(Conve…...

深度学习中激活函数的选择与应用指南

1. 激活函数的选择为何如此重要在深度神经网络训练过程中,激活函数就像神经元的"开关",决定了信息是否以及如何传递到下一层。2015年,Google的研究团队发现,在ImageNet分类任务中,仅将ReLU替换为Swish函数就…...

如何让旧款iPhone和iPad重获新生:终极iOS设备恢复与降级指南

如何让旧款iPhone和iPad重获新生:终极iOS设备恢复与降级指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit…...

ARS408毫米波雷达上车记:从安装位置到水平尺校准,手把手教你搞定俯仰角和滚转角

ARS408毫米波雷达实战安装指南:从工具准备到精准校准的全流程解析 当你第一次拿到ARS408毫米波雷达时,那个黑色的小盒子看起来并不起眼,但它的安装精度却直接决定了整个ADAS系统的性能表现。作为从业多年的汽车电子工程师,我见过太…...

大模型推理中的自我干预训练(InT)技术解析

1. 大模型推理中的自我干预训练概述在大型语言模型(LLM)的实际部署中,我们常常遇到这样的困境:模型在训练集上表现优异,但在真实场景的推理过程中却会出现逻辑断裂、事实错误或有害输出。传统微调方法就像给模型"…...