病毒编程技术之恶意代码的亲密接触
日期:2008年6月15日 作者: 查看:[大字体 中字体 小字体]-

图2:一段典型的病毒代码执行流程
从原理上看病毒非常简单,但实现起来还有不少困难,其实如果解决了这些技术难点,一个五脏俱全的病毒也就形成了,本文后面将从一个病毒编写者的角度就各个难点分别予以介绍。病毒可采用的技术几乎涉及到Windows程序设计的所有方面,但限于篇幅,本文亦不可能全部介绍,本文将重点介绍Win32 用户模式病毒所常用的一些技术。
编程语言
任何语言只要表达能力足够强,都可用于编写PE 病毒。但现存的绝大部分PE病毒都是直接用汇编编写的,一方面是因为汇编编译后的代码短小精悍,可以充分进行人工优化,以满足隐蔽性的要求;另外一方面之所以用汇编是因为其灵活和可控,病毒要同系统底层有时甚至是硬件打交道,由于编译器的特点不尽相同,用高级语言实现某些功能甚至会更加麻烦,比如用汇编很方便地就可以直接进行自身重定位、自身代码修改以及读写IO 端口等操作,而用高级语言实现则相对烦琐。用汇编还可以充分利用底层硬件支持的各种特性,限制非常少。但是用汇编编写病毒的主要缺点就是编写效率低,加上使用各种优化手段使得代码阅读起来相当困难,不过作为一种极限编程技术,对病毒作者而言,这些似乎都已经不再重要。本文假设读者熟悉汇编语言,各种举例使用Intel 格式的汇编代码,编译器可使用MASM或FASM进行编译,由于汇编语言表述算法较为不便,因此算法和原理性表述仍然采用C 语言。在讲述各种技术时,部分代码直接取自病毒Elkern的源代码,该病毒在2002年曾经大规模流行,其代码被收录于著名病毒杂志29A 第7 期中,有兴趣的读者可参阅其完整代码。 重定位
病毒自身的重定位是病毒代码在得以顺利运行前应解决的最基本问题。病毒代码在运行时同样也要引用一些数据,比如API 函数的名字、杀毒软件的黑名单、系统相关的特殊数据等,由于病毒代码在宿主进程中运行时的内存地址是在编译汇编代码时无法预知的,而病毒在感染不同的宿主时其位于宿主中的准确位置同样也无法提前预知,因此病毒就要在运行时动态确定其引用数据的地址,否则,引用数据时几乎肯定会发生错误。对于普通的PE文件比如动态链接库而言,在被加载到不同地址处时由加载器根据PE中一个被称为重定位表的特殊结构动态修正引用数据指令的地址,而重定位表是由编译器在编译阶段生成的,因此动态链接库本身无需为此做任何额外处理。病毒代码则不同,必须自己动态确定需引用数据的地址。比如一段病毒代码被加载在0x400000处,地址0x401000处的一条语句及其引用的数据定义如下所示,相关地址是编译器在编译时计算得到的,这里假设编译时预设的基地址也是0x400000:
401000:
mov eax,dWord ptr [402035]
......
402035:
db "hello world!",0
如果病毒代码在宿主中也加载到基地址0x400000,显然是能够正常执行的,但如果这段代码被加载在基地址0x500000 运行时则出错,对病毒而言,这是大多数时候都会遇到的情况,因为指令中引用的仍然是0x402035这个地址。如果病毒代码不是在宿主进程中而是作为一个具有重定位表的独立PE文件运行,正常情况下由系统加载器根据重定位表表项将 mov eax,dword ptr [402035]中的0x402035修改为正确值0x502305,这样这句代码就变成了mov eax, dword ptr [5402035],程序也就能准确无误地运行了。不过很可惜,对在其它进程内运行病毒代码而言,必须采取额外的手段、付出额外的代价感染宿主PE文件时就及时加以解决,否则将导致宿主进程无法正常运行。
至少有两种方法可以解决重定位的问题:
A)第一种方法就是利用上述PE 文件重定位表项的特殊作用构造相应的重定位表项。在感染目标PE文件时,将引用自身数据的需要被重定位的地址全部写入目标PE文件的重定位表中,如果目标PE 无任何重定位表项(如用MS linker 的/fixed)则创建重定位表节并插入新的重定位项;若已经存在重定位表项,则在修改已存在的重定位表节,在其中插入包含了这些地址的新表项。重定位的工作就完全由系统加载器在加载PE文件的时候自动进行了。重定位表项由PE 文件头的DataDirectory数据中的第6 个成员 - 上一页 [1] [2] [3] [4] [5] [6] 下一页
-
- 病毒编程技术之恶意代码的亲密接触 相关文章:
- ·梦幻西游盗号木马下载病毒并盗号
- ·木马病毒的启动方式介绍
- ·修改注册表权限加强对木马、病毒的防范
- ·recycle.exe病毒手动解决的方法
- ·木马病毒下载恶意程序
- ·警惕Trojan-PSW.Win32.WOW.ck木马病毒
- ·魔波病毒补丁下载
- ·Love Letter病毒源代码
- ·安全学习之制作编写超级批处理病毒方法
- ·反病毒知识:如何让你的移动硬盘在DOS下杀毒
- 病毒编程技术之恶意代码的亲密接触 相关软件
- ·USBKiller(U盘病毒专杀工具) 2.3 Build0610
- ·数据病毒木马暴力杀灭天王 PowerRmv V1.0
- ·AntiPopVirus(流行病毒木马专杀工具) V1.1
- ·U盘病毒专杀工具-USBCleaner 6.0 Build 20080708
- ·超级巡警之U盘病毒免疫器V1.4 正式版
- ·Autorun病毒防御者 v2.3.1.125
- ·金山毒霸“魔鬼波”病毒专杀工具 V3.2
- ·冲击波病毒专杀工具包 V 1.0
- ·McAfee VirusScan SuperDAT(Engine + DAT) 5081 病毒码
- ·大蜘蛛Dr.Web杀毒软件病毒库升级包 2008.05.13
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:编写QQ外挂插件的原理和方法
精品推荐
热点TOP10
- ·游戏外挂设计技术探讨
- ·编写QQ外挂插件的原理和方法
- ·GIF文件格式
- ·使用SAFEARRAY传送对象
- ·1.3.4 高级数据和信息系统与高级应用
- ·网络游戏外挂核心封包揭密
- ·Solaris 10 安装及SVC管理及X及Vmware及其它可能遇到的一些问题
- ·代码静态分析工具PC-LINT安装配置
- ·DirectDraw之C#入门攻略
- ·网游外挂编写完全攻略
- ·Spring让LOB数据操作变得简单易行
- ·开发WDM型的USB设备驱动程序
- ·利用表空间的备份快速恢复IBM DB2数据库
- ·Windows完成端口编程
- ·使用BHO定制你的IE浏览器
- ·Unix和Windows跨系统通讯编程
- ·CMMI 综述
- ·利用HOOK拦截封包原理
- ·简单对象访问协议(SOAP)初级指南
- ·使用串行化传送对象
