




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,计算机病毒 Computer Virus,傅建明 F; ,武汉大学计算机学院,2,第六章 病毒技巧,6.1 病毒的隐藏技术 6.2 花指令 6.3 计算机病毒的简单加密 6.4 病毒的多态 6.5 病毒的变形技术 6.6 病毒代码的优化 6.7 异常处理 6.8 病毒的自我保护,3,6.1 病毒的隐藏技术,引导型病毒 文件型病毒 宏病毒 Windows环境下的病毒,4,图6.1 引导型病毒的隐藏,5,图 6.2 引导型病毒对付杀毒软件的方法,6,文件型病毒的隐藏技术,7,在WORDEXCEL中禁止菜单:文件模板 或者 工具宏就可以隐藏病毒 通过宏病毒代码删除菜单项 宏病毒用自己的FileTemplates和ToolsMacro宏替代系统缺省的宏,宏病毒的隐藏技术,8,Windows病毒的隐藏技术,修改文件时间、大小; 在文件空隙中插入病毒片断:CIH在节中寻找空隙; Win98下隐藏进程:在进程管理器中将无法看到病毒进程; Win2000下创建服务进程:在Win2000环境中,将病毒创建为服务进程以后,用户无法关闭进程; 创建远程进程。,9,6.2 花指令,所谓花指令就是在我们的程序之间加入一些似乎没有什么意义的代码,这些代码不会妨碍程序正常的运行,但是在静态反汇编时,却会让原本正常的代码解释成难以读懂、甚至有些怪异的汇编代码。,10,6.2 花指令,start: push eax push ebx push ecx push edx call delta db 12,34h delta: pop ebp sub ebp, offset delta pop edx pop ecx pop ebx pop eax end start,00401000 start: 00401000 50 push eax 00401001 53 push ebx 00401002 51 push ecx 00401003 52 push edx 00401004 E802000000 call fn_0040100B 00401009 0C34 or al,34h 0040100B fn_0040100B 0040100B 5D pop ebp 0040100C 81ED0B104000 sub ebp,40100Bh 00401012 5A pop edx 00401013 59 pop ecx 00401014 5B pop ebx 00401015 58 pop eax,11,6.2 花指令,反汇编程序在工作时,它会按照某些规则对代码进行匹配以将二进制代码解释成汇编语句。 不同的机器指令包含的字节数并不相同,有的是单字节指令,有的是多字节指令。对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,也就是操作码的位置,这样才能正确地反汇编这条指令,否则它就可能反汇编成另外一条指令了。,12,start: push eax push ebx push ecx push edx call delta db 12h delta: pop ebp sub ebp, offset delta pop edx pop ecx pop ebx pop eax end start,00401000 start: 00401000 50 push eax 00401001 53 push ebx 00401002 51 push ecx 00401003 52 push edx 00401004 E801000000 call fn_0040100A 00401009 125D81 adc bl,ebp-7Fh 0040100C ED in eax,dx 0040100D 0A10 or dl,eax 0040100F 40 inc eax 00401010 005A59 add edx+59h,bl 00401013 5B pop ebx 00401014 58 pop eax,13,start: push eax push ebx push ecx push edx call delta db 0E8h,12h delta: pop ebp sub ebp, offset delta pop edx pop ecx pop ebx pop eax end start,00401000 start: 00401000 50 push eax 00401001 53 push ebx 00401002 51 push ecx 00401003 52 push edx 00401004 E802000000 call fn_0040100B 00401009 E8125D81ED call fn_EDC16D20 0040100E 0B10 or edx,eax 00401010 40 inc eax 00401011 005A59 add edx+59h,bl 00401014 5B pop ebx 00401015 58 pop eax,14,6.3 计算机病毒的简单加密,病毒的简单加密是指对病毒的某些主体代码采用固定的密钥进行加密,这样静态反汇编出来的代码就是经过加密处理过的,因此在某些程度上可以起到保护病毒程序的目的。 简单加密的密钥可能发生变化,但解密代码相对固定 。,15,6.3 计算机病毒的简单加密,一个被简单加密的病毒一般有如下几个部分: 1 解密算法(解开被加密的代码,以便病毒执行) 2 病毒主体代码(被加密的病毒代码) 3 跳转(病毒解密完毕后,跳到解密代码部分执行解密语句) 对于这种简单加密的病毒,加密时一般采用XOR,OR,SUB,ADD等一些简单的变换。,16,MOV ECX , VIRUS_SIZE MOV EDI, offset EncrptStart DecrptLoop: XOR byte ptr EDI,key INC EDI LOOP DecrptLoop /* VIRUS_SIZE是加密代码的长度。 offset EncrptStart是加密代码的起始地址。 key是密钥。 */,17,6.3 计算机病毒的简单加密,这样加密后的病毒体只要key不同,加密病毒的特征值就消失了。 但问题是解密头还是固定的,还是有特征值,这和普通的病毒相比没什么改善。改善的方法就是使每次生成的解密头和密钥都不同。应该达到 如下目标: 每条解密指令都不是固定的,我们看到的上面的固定代码实际上只是一种可能,病毒每次复制自身的时候,这些代码都会随机改变。 密钥每次都随机生成。,18,6.3 计算机病毒的简单加密,这样在每次感染后,因为解密代码几乎没有规律可寻,而其他代码又经过加密,所以整个病毒代码都不是固定的,如果指望能够从这些代码中找到固定的病毒特征码则是徒劳的。这就是多态病毒思想。,19,6.4 病毒的多态,多态技术中的密钥和解密代码都变化多端,多态技术将对解密代码进行等价指令替换、寄存器替换、插入垃圾指令或者随机调换指令的前后位置(有些指令的前后位置调换之后不影响代码功能)等变化,以产生功能相同但是代码截然不同的解密代码。,20,多态引擎的组成: 原始解密代码(0) 指令位置变换模块(1) 寄存器变换模块(2) 指令扩展模块(3) 指令收缩模块(4) 等价指令替换模块(5):无用指令随机插入(6) 垃圾指令插入(7) 生成的新解密代码(8),6.4 病毒的多态,21,指令位置变换模块(1) : 1)的作用是变换不影响执行效果的指令的相对位置,如下指令的位置就是任意的, 可以有3!=6种变化: . mov ebx,23 . xor ecx,ecx . lodsd,6.4 病毒的多态,22,寄存器变换模块(2): 2)的作用是随机选取寄存器如: mov reg,123456 mov 45678,reg reg就可以在eax,ebx,ecx等通用寄存器之间进 行随机选择。,6.4 病毒的多态,23,6.4 病毒的多态,指令扩展模块(3)将一条指令替换为多条等价指令:,STOSD MOV EAX,EDX POP EAX,MOV EDI,EAX ADD EDI,4 PUSH EDX POP EAX MOV EAX,ESP ADD ESP,4,24,6.4 病毒的多态,指令收缩模块(4)多条指令替换为一条等价指令:,MOV EDI,EAX ADD EDI,4,STOSD,MOV EAX,EDX,PUSH EDX XCHG EAX,EDX POP EDX,25,6.4 病毒的多态,5)一条指令替换为一条等价指令: XOR EAX,EAX SUB EAX,EAX ADD EXX,1 INC EXX 6)可以是不影响解密代码的指令 7)垃圾指令,不能影响代码执行效果的指 令,可以有单字节、双字节等垃圾指令。 6和7的目的是为了干扰杀毒引擎扫描器。,26,一个好的解密代码生成引擎应该达到: 选取的指令覆盖整个IA-32指令集 解密指令选取具有充分的随机性 密钥的选取具有充分的随机性 加密解密算法可变,6.4 病毒的多态,27,变形技术则不仅使得病毒各样本中的静态代码变化多端,而且解密后的病毒明文中的功能代码也将进行多种代码变换。变形引擎极为复杂,其除了具有多态引擎的功能外,其还能够对病毒代码进行反汇编生成中间伪码,以及进行伪码收缩变换和最终汇编代码的生成。,6.5 病毒的变形技术,28,使用微软的字处理软件WORD,用户可以进行打开文件、保存文件、打印文件和关闭文件等操作。,6.5 病毒的变形技术,29,1)反汇编器,对病毒二进制代码进行反汇编,得到中间语言。 3)4)5)6)7)的作用和多态引擎是类似的,区别在于后者要对伪码进行变换。首先进行伪码收缩的意图是防止在不断的传染扩展过程中产生“肥胖”的病毒体。 8)对变形后的伪码进行汇编,使之生成可实际运行的病毒代码。 10)模拟器的作用对指令的执行效果进行模拟,以更好地服务于代码的变换。实现难度很大,可选。,6.5 病毒的变形技术,30,6.5 病毒的变形技术,变形病毒的缺陷: 1)编写难度大,调试起来困难。上述可知编写一个变形引擎需要很多知识和技巧。这使得很少人再去做这种极度痛苦的工作。 2)体积大。目标也大,容易引起人的怀疑。举一个例子600K的一个软件增加2K不会引起人的什么怀疑,如果600K的软件增加100K那就很可疑了。 3)一些设计上的漏洞,可能会被反病毒软件利用,会导致无法达到预期的效果。 因此对于成本综合测量通常的结论是一般的多态现阶段即可达到目标。,31,6.6 病毒代码的优化,病毒代码的优化,应该是对病毒代码所占空间和运行所占时间两方面的优化。 1.寄存器清0 不推荐使用以下方法: 1) mov eax, 00000000h ;5 bytes 更优化的方法如下: 2) sub eax, eax ;2 bytes 3) xor eax, eax ;2 bytes,32,6.6 病毒代码的优化,2.测试寄存器是否为0 3.测试寄存器是否为0FFFFFFFFh 4.置寄存器为0FFFFFFFFh 5.寄存器清0并移入低字数值 6.关于push, 寄存器操作总要比内存操作要快 7.乘法 8.字符串操作 见书p280,33,6.7 异常处理,程序设计上的失误等原因,有时候轻则弹出提示窗口,重则会导致程序、甚至系统崩溃。为了不被发现,异常处理也经常用在计算机病毒中。 Windows下的异常处理有两种方式:筛选器异常处理和SEH异常处理。,34,6.7 异常处理,筛选器异常处理的方式由程序指定一个异常处理回调函数,当发生异常的时候,Windows系统将调用这个回调函数,并根据回调函数的返回值决定下一步如何操作。对于一个进程来说,只有一个筛选器回调函数。 不足:由于筛选器回调函数是基于整个进程的,无法为一个线程或子程序单独设置一个异常处理回调函数 。 SEH(“Structured Exception Handling”),即结构化异常处理,是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器:可以为每个线程设置不同的异常处理程序,而且可以为每个线程设置多个异常处理程序,35,6.7 异常处理,从程序编写的角度来看,这种异常产生的原因很多,诸如: 堆栈溢出 非法指令 对Windows保护内存的读写权限不够等等 如果是应用程序的错误,那么Windows可能要关闭应用程序,如果是系统错误,很可能不得不RESET以重新启动计算机。,36,1.因为有很多种异常,系统首先判断异常是否应发送给目标程序的异常处理例程,如果决定应该发送,并且目标程序正处于被调试状态,则系统挂起程序并向调试器发送EXCEPTION_DEBUG_EVENT消息,剩下的事情就由调试器全权负责。如果系统级调试器存在,对于int 1、int 3这样的异常在faults on时一般是会选择处理的,因而如果你的异常处理程序由它们来进入,则不会得到执行(在病毒中,这正好可以用来探测调试器的存在) 2.如果进程没有被调试或者调试器不去处理这个异常,那么系统会检查异常所处的线程,并在这个线程环境中查看是否安装了SEH异常处理回调函数,如果有的话则调用它。,6.7 异常处理,37,3.每个线程相关的异常处理例程可以选择处理或者不处理这个异常,如果它不处理并且安装了多个线程相关的异常处理例程,可交由链起来的其他例程处理。 4.如果这些例程均选择不处理异常并且程序正处于被调试状态,操作系统会再次挂起程序通知调试器。 5.如果程序未处于被调试状态或者调试器没有能够处理,那么系统将检查是否安装了筛选器回调函数,如果有,则去调用它。系统默认的异常处理程序会根据筛选器回调函数返回的值作相应的动作,6.7 异常处理,38,6.7 异常处理,6.如果没有安装筛选器回调函数,或者它没有处理这个异常,系统会调用默认的系统处理程序,通常显示一个对话框,你可以选择关闭或者最后将其附加到调试器上的调试按钮。如果没有调试器能被附加于其上或者调试器也处理不了,系统就调用ExitProcess终结程序。 7.不过在终结之前,系统仍然对发生异常的线程异常处理句柄来一次展开,这是线程异常处理例程最后清理的机会。,39,6.7 异常处理,系统按照调试器、SEH链上的从新到旧的各个回调函数、筛选器回调函数的步骤一个一个地去调用他们,直到有一个回调函数愿意处理异常为止,如果都不愿意处理该异常,则由系统默认的异常处理程序来终止发生异常的进程。,40,6.7 异常处理,push offset _final_xHandler0 call SetUnhandledExceptionFilter ,41,6.7 异常处理,push offset perThread_Handler ;异常处理例程入口 push fs:0 ;保存老的TIB结构地址 mov fs:0,esp ;建立SEH的基本ERR结构! xor ecx,ecx mov eax,200 . pop fs:0 ;清除seh链表 add esp,4 invoke ExitProcess,0,42,6.8 进程/线程之间的互相保护,对于一个进程来说,该进程终结,则该进程空间中的所有线程也随之终结。但是由于远程线程是被注入到其它进程空间之中,因此只要被注入的进程没有终结,那么该远程线程就会一直处于存活状态。,43,6.8 进程/线程之间的互相保护,“中国黑客”病毒首次采用了3线程的设计思想。它的设计思想如下: 1病毒进程的主线程用于病毒感染和传播。 2分线程1位于远程进程之中,其作用是监视病毒进程的运行,当病毒进程被终止时,再次启动病毒程序。该分线程很难被清除掉。其在选择远程进程时,目标并不固定,其选择对象是TOP窗口所在的进程或者Explorer进程。 3分线程2用来监控注册表启动项键值,当启动项键值被修改时,立即将其重新写回。这样,病毒可以保证在重启的时候执行并获得控制权。,44,6.8 进程/线程之间的互相保护,1注册表监控线程的设计 和注册表操作相关的API函数有:RegOpenKey, RegQueryvalueEx,RegCreateKey,RegSetvalueEx,RegNotifyChangeKeyValue。 在注册表监控线程的设计中,最重要的一个函数是RegNotifyChangeKeyValue,该函数声明如下: LONG RegNotifyChangeKeyValue( HKEY hKey, / 要监视的一个项的句柄,或者指定一个标准项名 BOOL bWatchSubtree, / TRUE(非零)表示监视子项以及指定的项 DWORD dwNotifyFilter, / changes to be reported HANDLE hEvent, / 一个事件的句柄。如fAsynchronus为False /则这里的设置会被忽略 BOOL fAsynchronous /如果为零,那么除非侦测到一个变化,否则函数不会返回。/否则这个函数会立即返回,而且在发生变化时触发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生态旅游可持续发展规划与管理旅游目的地生态旅游发展规划报告
- 智能电网在2025年能源行业中的应用与产业生态构建报告
- 智能设备配对管理制度
- 大公司工厂绩效管理制度
- 印刷厂安全生产管理制度
- 婦產科仪器设备管理制度
- 护理制度流程化管理制度
- 客服办公室设备管理制度
- 春季鱼塘开口管理制度
- 产品销售群规定管理制度
- 2025-2030中国经颅磁刺激仪(TMS)行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国碳酸镁行业市场发展分析及发展趋势与投资前景研究报告
- 《飞向太空的航程》课件【中职专用】高一语文(高教版2023基础模块下册)
- 2025兰州资源环境职业技术大学辅导员考试试题及答案
- 2025年下半年山西焦煤西山煤电集团公司招聘270人易考易错模拟试题(共500题)试卷后附参考答案
- 小红书《家的一平米》招商方案
- 上海中考:地理高频考点
- 道路工程平移合同协议
- 尺骨骨折护理课件
- 处世奇书《解厄鉴》全文译解
- 导弹的介绍教学课件
评论
0/150
提交评论