版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
病毒编程技术之恶意代码的亲热接触计算机病毒已经为我们的生活带来了日益严峻的危害,一次又一次的安全事故让很多人谈毒色变。然而,从技术上来说,这种无所不用其极的极限编程技术却又是极其精彩的,一个好的病毒代码更像是一个构思周密的艺术品。无论你是一个狂热的技术爱好者,还是一个软件产品的开发人员,都应当对病毒技术有所了解,以至于当它降临的时候能够沉着应对或是为客户生产出安全的产品。出于这些目的,我们将组织一系列恶意代码的亲热接触的文章,从最真实的角度让读者感受各种病毒、蠕虫等恶意代码技术,作为Elkern向读者介绍了病毒的一些根本编码技术,并对病毒的原理做了具体的介绍。生活在网络时代,无论是作为一名程序员抑或是作为一名一般的电脑使用者,对病毒这个词都已经不再生疏。网络不仅仅是传播信息的快速通道,从另外一个角度来看,也是病毒得以传播和滋生的温床,有internet10-15分钟就会被蠕虫或病毒感染。各种类型的病毒,在人们通过网络查阅信息、交换文件、收听视频时正在静静地传播。这些病毒或蠕虫不仅在传播过程中消耗大量的带宽资源,而且会干扰系统功能的正常使用或造成数据丧失、甚至是硬件损坏,每个电脑用户几乎都有过系统被病毒感染而无法正常使用的经受,大局部企业用户也都有过因病毒发作致使业务系统不能正常运行的经受。病毒距离我们,其实并不遥远。度来看,只有充分了解病毒技术,才能更好地争辩应对之策,知己知彼,方能百战不殆。病毒不是某个系统下的专属品,事实上现在各种流行的操作系统:从最初的Unix系统到其各种变体如Linux、Solaris、AIX、OS2等,从WindowsCE、Sybian等嵌入式系统,甚至是在某些专业化的大型机系统上,都无一例外地消灭了病毒,各种平台下病毒的根本原理类似的,但是针对不同系统的特性,实现可能区分很大,缘由在于作为一种无所不用其极的技术,势必利用各种系统相关的功能或弱点以取得各种特权和资源。正如生物的多样性一样,病毒种类繁多:包括源代码病毒、宏病毒、脚本病毒以及与各种WindowsPE病毒为例,说明病毒技术的原理以及实现技术,驱散掩盖在病毒技术上的迷雾。病毒、蠕虫、恶意代码自动传播。事情,比方特洛伊木马等间谍软件、扫瞄器恶意脚本、一些广告软件等,明显无法将其定义为传统的病毒或蠕虫,他们和蠕虫、病毒一样,同属于一个更大的范畴——恶意代码。本文重点阐述传统病毒经常使用的技术。病毒简史谈病毒技术,无法回避病毒产生的历史。早在1949年在冯·诺伊曼的一篇论文《简单自动装置的理论及组织的行为》中,即预见了可自我生殖程序消灭的可能。而现在众所公认的病毒的萌牙于AT&T〔贝尔试验室〕几个年轻的天才程序员编制的磁芯大战〔CoreWar〕玩耍程序,已经具备了病毒的一些特征。随后相关的试验和争辩在一些学者和天才的程序员中开头开放,正是这些制造了计算机系统的天才们,制造了计算机病毒。20世纪80年月,随着个人计算机的普及,病毒已经开头流行了,早期的计算机病毒是和当时的文件交换方式和操作系统特点联系在一起的,那个时候发行UnixDOS,网络尚未普及,因此这一时期的病毒大都是引导区病毒和文件型病毒,前者通过替换系统引导区代码在系统启动时猎取执行权,后者通过修改可执行文件嵌入代码以在可执行文件执行时猎取把握权,更多病毒的则是二者的结合。IBM-PC的流行和MSDOSDOS病毒在这一阶段渐渐占据了统治地位。80年月后期因特网开头进入人们的视野,这时也消灭了第一个因特网蠕虫——莫里斯蠕虫,借助于系统漏洞通过网络由于病毒受社会的关注程度以及反病毒软件的进步,进一步刺激了病毒制作者群体的制造欲望,多态和变DOS90年月后期随着Windows的消灭,DOS病毒和引导区病毒渐渐走向消亡,Windows病毒随之则开头大量涌现,随着微软Office软件的普及宏病毒消灭了,各种脚本病毒也日益增多。因特网的普及在给人们带来便利Emai202321世纪的头几年里,WindowsPE病毒技术已经日益纯熟、数量日益增多,但病毒排行榜的首位已经让位给利用各种系统漏洞进展传播的蠕虫了,安全争辩的深入、各种安全漏洞的大量披露给蠕虫作者供给了很好的素材,特洛依木马等恶意软件数量呈现几何级数的增长,病毒作者的关注点重从Windows桌面系统转向Unix系统、手机等嵌入移动设备上。安全争辩也愈益受到社会的关注,病毒和反病毒的战斗仍在连续,在可预见的将来,仍将连续。不过,WindowsPE文件病毒仍旧占有格外大的比重。WindowsPEWindows平台是当今最为流行的桌面系统,在效劳器市场上,也占有相当的份额。其可执行文件〔一般的用户程序、共享NT系统的驱动文件P〔PortableExecutebalWindows系统上一般都是通过调用系统供给的API进展的,以保证在各种Windows版本上都能运行,因此读者应对APIPE文件,因此要求读者对PE文件格式有肯定的了解,PEPE文件格式,仅作PE文件构造和头部局部主要域的格式如以下图1所示。1:PE文件构造及局部主要域的定义文件是由文件头、节表、包含各种代码和数据的节构成。文件头中定义了PE文件的引入函数表、引出函数表、节数目、文件版本、文件大小、所属子系统等相关的重要信息。节表则定义了实际数据节的大小、对齐、内存到文件如何进展映射等信息。后面的各个节则包含了实际的可执行代码或数据。〔见图1〕PE病毒技术剖析PEPEPE文件文件中,更头部相关的数据构造,使得修PEPEPEPE文件后,病毒代码就首先猎取了把握权,在执行完感染或破坏代码后,再将把握权转移给正常的程序代码,这样病毒代码就神不知鬼不觉地静静运行了。这只是最常见的执行流程,事实上,随着反病毒技术的进展,更多的病毒并不是在程序的入口猎取把握EPO技术,将在本文后半局部进展介绍。病毒代码一般分成几个主要功能模块:解码模块、重定位模块、文件搜寻模块、感染模块、破坏模块、加密变形模块等,不同的病毒包含模块不肯定一样,比方解码、加密变形等就PE病毒都具备的,由于自我复制我传播是病毒的最根本的特征。有些病毒还可能实现了其他的模块,比方Email发送、网络扫描、内存感染等。一段典型的PE病毒2所示:2:一段典型的病毒代码执行流程从原理上看病毒格外简洁,但实现起来还有不少困难,其实假设解决了这些技术难点,一个五脏俱全的病毒也就形成了,本文后面将从一个病毒编写者的角度就各个难点分别予以介绍。病毒可承受的技术几乎涉及到WindowsWin32用户模式病毒所常用的一些技术。编程语言PEPE病毒都是直接用汇编编写的,一方面是由于汇编编译后的代码短小精悍,可以充分进展人工优化,以满足隐蔽性的要求;另外一方面之所以用汇编是由于其机敏和可控,病毒要同系统底层有时甚至是硬件打交道,由于编译器的特点不尽一样,用高级语言实现某些功能甚至会更加麻烦,比方用汇编很便利地就可以直接进展自身重定位、自身代码修改以及读写IO端口等操作,而用高级语言实现则相对烦琐。用汇编还可以充分利用底层硬件支持的各种特性,限制格外少。但是用汇编编写病毒的主要缺点就是编写效率低,加上使用各种优化手段使得代码阅读起来相当困难,不过作为一种极限编程技术,对病毒作者而言,这些好似都已经不再重要。本FASM进展编译,由于汇编语言表述算法较为不便,因此算法和原理性表述仍旧承受C语言。在表达各种技术时,局部代码Elkern202329A第7期中,有兴趣的读者可参阅其完整代码。重定位病毒自身的重定位是病毒代码在得以顺当运行前应解决的最根本问题。病毒代码在运行时同样也要引用一些数据,比方API函数的名字、杀毒软件的黑名单、系统相关的特别数据等,由于病毒代码在宿主进程中运行时的内存地址是在编译汇编代码时无法预知的,而病毒在感染不同的宿主时其位于宿主中的准确位置同样也无法提前预知,因此病毒就要在运行时动态确定其引用数据的地址,否则,引用数据时几乎确定会发生错误。对于一般的PE文件比方动态链接库而言,在被加载到不同地址处时由加载器依据PE中一个被称为重定位表的特别构造动态修正引用数据指令的地址,而重定位表是由编译器在编译阶段生成的,因此动态链接库本身无需为此做任何额外处理。病毒代码则不同,必需自己动态确定需引用数据的地址。0x4000000x401000处的一条语句及其引用的数据定义如下所示,相0x400000:401000:moveax,dwordptr[402035]......402035:db“helloworld!“,00x400000,明显是能够正常执行的,但假设这段代码被加载在0x500000运行时则出错,对病毒而言,这是大多数时候都会遇到的状况,由于指令中引用的仍旧是0x402035这个地址。假设病毒代码不是在宿主进程中而是作为一个具有重定位表的独立PE文件运行,正常状况下由系统加载器依据重定位表表项将moveax,dwordptr[402035]0x402035修改为正确值moveax,dwordptr[5402035],程序也就能准确无误地运行了。不过很惋惜PE文件时就准时加以解决,否则将导致宿主进程无法正常运行。至少有两种方法可以解决重定位的问题:PEPEPE无任何则创立重定位表节并插入的重定位项;假设已经存在重定位表项,则在修改已存在的重定位表节,在其中插入包含了这些地址的表项。重定位的工作就完全由系统加载器PEPEDataDirectory6个成员IMAGE_DIRECTORY_ENTRY_BASERELOC指向。该方法需要的代码稍多,实现起来也相比照较简单,另外假设目标文件无重定位表项〔为了减小代码体积,这种状况也不少见〕,处理起来就比较麻烦,只有PE病毒中很少使用。利用IntelX86体系构造的特别指令,callfnstenv等指令动态猎取当前指令的运行时地址,计算该地址与编译时预定义地址的差值〔deltaoffset〕,再将该差值加到原编译时预定的地址上,得到intelx86deltaoffset放在某个存放器中,然后通过变址寻址引用数据就可以解决引用数据重定位的难题。还以上例说明,假设上述指令块0x500000处那么代码及其在内存中的地址将变为:501000:moveax,dwordptr[402035]......502035:db“helloworld!“,0明显,movmov指令运行时地址是0x501000,0x100000。很明显指令引用的实际数据地址应当为0x402035+0x100000=0x502035。从上例可以看出,只要能够在运行时确定某条指令动态deltaoffset加到相应的地址上正确重定位任何代码3所示:3:deltaiffsetdeltaoffset,通过变址寻址的方式书写引用数据的汇编代码,即可ebpdeltaoffset,使用如下变址寻址指令则可保证在运行时引用的数据地址是正确的:;ebpdeltaoffset值401000:moveax,dwordptr[ebp+0x402035]......402035:db“helloworld!“,0deltaoffset的值了,明显:calldeltadelta:popebpsubebp,offsetdelta在运行时就动态计算出了deltaoffsetcallpopebpebpdeltadelta的编译时地址“offsetdladeltaoffset的callfstenv、fsave、fxsave、fnstenv等浮点环境保存fnstenvFPU4所示:4:浮点环境块的构造该构造偏移12字节处就是最终执行的浮点指令的运行时地址,因此我们也可以用如下一段指令猎取deltaoffset:fpu_addr:fnopcallGetPhAddrsubebp,fpu_addrGetPhAddr:subesp,16fnstenv[esp-12]popebpaddesp,12retdeltaoffsetebpebp作为栈帧指针一般过程都不将该存放器用于其它deltaoffsetebp中,其有用其他存放器也完全可以。deltaoffsetElkern开头写成了类似如下的代码:call_start_ip_start_ip:popebp;...;使用call[ebp+addrOpenProcess-_start_ip];...addrOpenProcessdd0;而不是call_start_ip_start_ip:popebpsubebp,_start_ipcall[ebp+addrOpenProcess]addrOpenProcess-_start_ip是一个较小相对偏移值,一般不超过两个字节,因此生成的指令较短,而addrOpenProcess32Win324个字节的地址值,生成的指令也就较长。有时对病毒对大小要求很苛刻,更多时候也是为了显示其超俗的编程技巧,病毒作者大量承受这种优化,对这种优化原Intel2中的指令格式说明。API函数地址的猎取Win32API的编码量过大而且兼容性很差。Win9X/NT/2023/XP/2023Win32API,因此调Win32API实现各种功能对病毒而言就是自然而然的事情了。所以接下来要解决的问题就是如何动态猎取Win32APIPEWindows2023中CreateFileA0x7EE6326call[7EE63260h]APIWindows版API的地址并不完全一样,使用该方法的病毒可能只能在Windows2023的某个版本上运行。因此病毒作者自然而然地回到PEPEDLLPEPE引入表填
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高速公路夜间雨雾冰雪驾驶技巧模拟试题及答案
- 审计职业道德规范知识点巩固习题及答案
- 课程设计效果考核表
- 特种设备作业人员证叉车司机考试专项训练题库及答案
- 注册安全工程师安全生产法规专项练习题及答案
- 高速公路收费站收费系统故障处理手册
- 建设工程竣工验收与移交专项模拟试卷及答案
- 监理工程师考试质量控制考点冲刺预测试题及答案
- 2026年证券从业资格考试基础知识备考习题及答案
- 调整部门岗位职责分工安排通知函(7篇)范文
- 2025-2026学年统编版(2024)四年级上册语文期中综合能力测试卷及答案
- 福建省福州市2025-2026学年高三第一次质量检测数学试卷
- 消防员通信员培训课件
- 船舶公司电气管理制度
- T/CECS 10362-2024钢-混组合梁界面用环氧砂浆
- 言语治疗共鸣障碍课件
- 原发性血小板减少护理查房
- 英文产科手术
- 电梯生产单位质量安全员、安全总监-特种设备考试题库
- 他人代理取款委托书
- TCAV 004-2024 TCAS 900-2024 特殊健康状态儿童预防接种评估门诊与转诊系统建设规范
评论
0/150
提交评论