【问题提问、论坛交流】自磁芯大战以来,病毒从DOS时代的病毒发展到WINDOS系统的病毒,从变形、加密到智能化现在的病毒是让人防不胜防,现在网络上病毒大肆泛滥,给人们带来的很大的危害,本人在此仅做抛砖引玉,介绍病毒的原理,希望大家共同研究交流。(本文参考了网络上的部分文章,并引用了部分内容。) 要学DOS下的病毒,首先你必须要学会或掌握汇编语言。DOS下病毒一般分为引导型病毒、文件型病毒、混合型病毒等。大部分病毒是感染COM和EXE文件,因此你必须了解COM文件和EXE文件结构。 一 .COM文件结构及原理 .COM 文件比较简单,.COM文件包含程序的一个绝对映象―――就是说,为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映象从文件拷贝到内存而加载.COM程序,它不作任何改变。为加载一个.COM程序,MS-DOS首先试图分配内存,因为.COM程序必须位于一个64K的段中,所以.COM文件的大小不能超过65,024(64K减去用于PSP的256字节和用于一个起始堆栈的至少256字节)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,QQ:9750406则分配尝试失败。否则,MS-DOS分配尽可能多的内存(直至所有保留内存),即使.COM程序本身不能大于64K。在试图运行另一个程序或分配另外的内存之前,大部分.COM程序释放任何不需要的内存。 分配内存后,MS-DOS在该内存的头256字节建立一个PSP,如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载.COM文件,它置SS,DS和ES为PSP的段地址,接着创建一个堆栈.为创建一个堆栈,MS-DOS置SP为0000h,若已分配了至少64K内存;否则,它置寄存器为比所分配的字节总数大2的值.最后,它把0000h推进栈(这是为了保证与在早期MS-DOS版本上设计的程序的兼容性)。MS-DOS通过把控制传递偏移100h处的指令而启动程序.程序设计者必须保证.COM文件的第一条指令是程序的入口点。注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h.汇编语言程序设计者可通过置程序的初值为100h而保证这 一点(例如通过在原程序的开始使用语句org 100h). 二 EXE文件结构 EXE 文件比较复杂,每个EXE文件都有一个文件头,结构如下: EXE文件头信息 ――――――――――――――――――― ├ 偏移量 ┤ 意义 ┤ ├00h-01h ┤MZ‘EXE文件标记 ┤ ├2h-03h ┤文件长度除512的余数 ┤ ├04h-05h ┤...............商 ┤ ├06h-07h ┤重定位项的个数 ┤ ├08h-09h ┤文件头除16的商 ┤ ├0ah-0bh ┤程序运行所需最小段数 ┤ ├0ch-0dh ┤..............大.... ┤ ├oeh-0fh ┤堆栈段的段值 (SS) ┤ ├10h-11h ┤........sp ┤ ├12h-13h ┤文件校验和 ┤ ├14h-15h ┤IP ┤ ├16h-17h ┤CS ┤ 本新闻共 6页,当前在第 1页 1 2 3 4 5 6 编辑:xker.com
上一篇:保护劳动果实 魔兽世界密码攻防演练(图) 下一篇:没有了
|