病毒编程技术之恶意代码的亲密接触
日期:2008年6月15日 作者: 查看:[大字体 中字体 小字体]-
IMAGE_DIRECTORY_ENTRY_BASERELOC 指向。该方法需要的代码稍多,实现起来也相对比较复杂,另外如果目标文件无重定位表项(为了减小代码体积,这种情况也不少见),处理起来就比较麻烦,只有用高级语言编写病毒才常用该种方法,在一般的PE 病毒中很少使用。
B)利用Intel X86体系结构的特殊指令,call 或fnstenv等指令动态获取当前指令的运行时地址,计算该地址与编译时预定义地址的差值(被称为delta offset),再将该差值加到原编译时预定的地址上,得到的就是运行时数据的正确地址。对于intel x86指令集而言,在书写代码时,通过将delta offset 放在某个寄存器中,然后通过变址寻址引用数据就可以解决引用数据重定位的难题。还以上例说明,假如上述指令块被操作系统映射在0x500000处那么代码及其在内存中的地址将变为:
501000:
mov eax,dword ptr [402035]
......
502035:
db "hello world!",0
显然,mov 指令引用的操作数地址是不正确的,如果我们知道了mov指令运行时地址是0x501000,那么计算该地址和编译时该指令预设地址的差值:0x501000-0x401000 = 0x100000。很显然指令引用的实际数据地址应该为0x402035+0x100000 = 0x502035。从上例可以看出,只要能够在运行时确定某条指令动态运行时的地址,而其编译时地址已知,我们就能够通过将delta offset 加到相应的地址上正确重定位任何代码或数据的运行时地址。原理如图3 所示:

图3:delta iffset
通常只要在病毒代码的开始计算出delta offset,通过变址寻址的方式书写引用数据的汇编代码,即可保证病毒代码在运行时被正确重定位。假设ebp 包含了delta offset,使用如下变址寻址指令则可保证在运行时引用的数据地址是正确的:
;ebp 包含了delta offset 值
401000:
mov eax,dword ptr [ebp+0x402035]
......
402035:
db "hello world!",0
在书写源程序时可以采用符号来代替硬编码的地址值,上述的例子中给出的不过是编译器对符号进行地址替换后的结果。现在的问题就转换成如何获取delta offset的值了,显然:
call delta
delta:
pop ebp
sub ebp,offset delta
在运行时就动态计算出了delta offset 值,因为call要将其后的第一条指令的地址压入堆栈,因此pop ebp 执行完毕后ebp 中就是delta的运行时地址,减去delta的编译时地址“offset delta”就得到了delta offset 的值。除了用明显的call 指令外,还可以使用不那么明显的fstenv、fsave、fxsave、fnstenv等浮点环境保存指令进行,这些指令也都可以获取某条指令的运行时地址。以fnstenv 为例,该指令将最后执行的一条FPU 指令相关的协处理器的信息保存在指定的内存中,结构如下图4 所示:

图4:浮点环境块的结构 - 上一页 [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)初级指南
- ·使用串行化传送对象
