| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> Hack >> 病毒知识 >> 正文 用户登录 新用户注册
亲密接触恶意代码之文件感染和内存驻留         ★★★ 【字体:
亲密接触恶意代码之文件感染和内存驻留
作者:未知 文章来源:华盟收集 点击数: 更新时间:2006-9-14



  d)覆盖某些非常用数据。如一般exe文件的重定位表,由于exe一般不需要重定位,因此可以覆盖重定位数据而不会造成问题,为保险起见可将文件头中指示重定位项的DataDirectory 数组中的相应项清空,这种方式一般也不会造成被感染文件长度的增加。因此很多病毒也广泛使用该种方法。

  e)压缩某些数据或代码以节约出存放病毒代码的空间,然后将病毒代码写入这些空间,在程序代码运行前病毒首先解压缩相应的数据或代码,然后再将控制权交给原程序。该种方式一般不会增加被感染文件的大小,但需考虑的因素较多,实现起来难度也比较大。用的还不多。
  
  不论何种方式,都涉及到对PE头部相关信息以及节表的相关操作,我们首先研究一下PE的修改,即如何在添加了病毒代码后使得PE文件仍然是合法的PE文件,仍然能够被系统加载器加载执行。PE文件的每个节的属性都是由节表中的一个表项描述的,节表紧跟在IMAGE_NT_HEADERS后面,因此从文件偏移0x3C 处的双字找到IMAGE_NT_HEADERS 的起始偏移,再加上IMAGE_NT_HEADERS的大小(248字节)就定位了节表的起始位置,每个表项是一个IMAGE_SECTION_HEADER结构:

typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
// 节的名字
  union {
  DWORD PhysicalAddress;
  DWORD VirtualSize;
// 字节计算的实际大小
   } Misc;
   DWORD VirtualAddress;
// 节的起始虚拟地址
   DWORD SizeOfRawData;
// 按照文件头FileAlignment
  
// 对齐后的大小
   DWORD PointerToRawData;
// 文件中指向该节起始的偏移
   DWORD PointerToRelocations;
   DWORD PointerToLinenumbers;
   WORD NumberOfRelocations;
   WORD NumberOfLinenumbers;
   DWORD Characteristics;
// 节的属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;


  节表项的数目由IMAGE_NT_HEADERS的NumberOfSections成员确定。由节表中的起始虚拟地址以及该节在文件中的位置就可以换算加载后内存虚拟地址和文件中地址之间的映射关系。添加一个节则需要修改该节表数组, 在其中增加一个表项, 然后相应修改
NumberOfSections 的数目。值得注意的是,某些PE文件现存节表后面可能紧跟着其它数据,如bound import 数据,这时就不能简单地增加一个节表项,需要先移动这些数据并修改相应的结构后才能增加节,否则PE文件将不能正常执行。由于很多病毒是自我修改的,因此节属性通常设置为E000XXXX,表示该节可读写执行,否则就需要在病毒的开始处调用VirtualProtect之类的API动态修改内存页的属性了。

  由上述节表的定义还可以看到每个节的实际数据都是按照文件头中FileAlignment 对齐的,这个大小一般是512,因此每个节可能有不超过512字节的未用空间(SizeOfRawData-VirtualSize),这恰好给病毒以可乘之机,著名的CIH病毒首先采用了这种技术,不过问题是每个节的空隙大小是不定的,因此就需要将病毒代码分成若干部分存放,运行时再通过一段代码组合起来,优点是如果病毒代码较小则无需增加PE的大小,隐蔽性较强。如果所有节的未用空间仍不足以容纳病毒代码,则可新增节或附加到最后一个节上。

  附加到最后一个节上是比较简单的,只要修改节表中最后一个节的VirtualSize 以及按FileAlignment 对齐后的SizeOfRawData成员即可。当然在上述所有修改节的情况中,如果改变了文件的大小,都要修正文件头中SizeOfImage这个值的大小,该值是所有节和头按照SectionAlignment 对齐后的大小。

  这里有两个问题值得注意,第一问题就是对WFP(Windows File Protection)文件的处理,WFP机制是从Windows 2000 开始新增的保护系统文件的机制,若系统发现重要的系统文件被改变,则弹出一个对话框警告用户该文件已被替换。当然有多种方法绕过WFP 保护,但对病毒而言,更简单的方法就是不感染在WFP 列表中的系统文件。

  可使用sfc.dll的导出函数SfcIsFileProtected判断一个文件是否在该列表中,该API 的第一个问匦胛?,第二个参数是要判断的文件名,若在列表中返回非0值,否则返回0。另外一个问题就是关于PE文件的校验。大部分PE文件都不使用文件头中的CheckSum域的校验和值,不过有些PE文件,如关键的系统服务程序文件以及驱动程序文件则该值必须正确,否则系统加载器将拒绝加载。PE 头部的CheckSum 可以使用Imagehlp.dll的导出函数 CheckSumMappedFile计算,也可以在将该域清0后按照如下简单的等价算法计算:

  如果PE文件大小是奇数字节,则以0补足,使之按偶数字节。将PE文件头的CheckSum 域清0,然后以两个字节为单位进行adc运算,最后和将该累加和同文件实际大小进行adc运算即得到校验和的值。下面的cal_checksum过程假设esi 已经指向PE文件头,文件头部CheckSum域已经被清0,CF 标志位已经被复位:

;调用示例:
;clc
;push pe_fileseize
;call cal_checksum cal_checksum:
adc bp,word [esi] ;初始esi指向文件头,ebx 中保
存的是文件大小
inc esi
inc esi
loop cal_checksum
mov ebx,[esp+4]
adc ebp,ebx ;ebp 中存放的就是PE 的校验和
ret 4


  除了PE头部的校验和之外,很多程序自身也有校验模块,如Winzip 和Winrar 的自解压文件,如果被感染,将造成无法正常解压缩。因此对于类似的PE文件,病毒应尽量不予感染。

  Elkern 中感染文件修改文件相关的代码在infect.asm中,该病毒首先尽可能地利用PE 的头部和节的间隙存储自身代码,若所有间隙仍不足以存放病毒代码,则附加到最后一个节上,限于篇幅相关代码从略,感兴趣的读者请自行参阅。

  事实上,除了在上边提到的病毒重定位、API地址的获取、文件搜索、修改感染PE等基本技术之外,关于病毒技术还有很重要的几个方面没有提及:病毒的内存驻留感染技术、内核模式病毒技术、抗分析以及隐藏技术(EPO、多态和变形技术等)。

  内存驻留感染是前述主动全盘搜索技术的变形,病毒代码驻留内存被动地等待用户事件或等待程序代码执行到指定的路径被唤醒以执行感染操作。内核态病毒,也称ring0病毒,是指那些运行在ring0特权级内核模式下的病毒,这类病毒相当特殊,需要调用内核驱动接口实现感染和传播等操作,由于NT内核的复杂性,这类病毒非常难于编写,另外由于不同版本的NT系统之间内核的差异,欲令病毒稳定运行编写者需要付出额外的努力,最后的结果可能还是会由于测试的不充分而很快因蓝屏事故而被发现,这将严重影响病毒的传播速度和传播范围。ring0 病毒比较少,其中最著名的ring0 病毒当非CIH莫属了,但由于其巨大的破坏性,格外引人注目。由于ring0病毒数量不多而且非常复
杂,本文篇幅所限,不做深入介绍。对抗杀毒软件、抗分析以及病毒自身的隐藏技术可以说是病毒技术近年来除利用社会工程学借助网络快速传播之外的又一个重要发展方向,其目的在于对抗或逃避杀毒软件的扫描,最大限度地延长其生存期,主要包括EPO(入口点模糊)技术、加密技术、多态和变形技术等。作者将在后续的文章中陆续向读者进行介绍。


  内存驻留感染技术

  如果读者曾经使用过MS-DOS的话,对驻留内存、截获中断以执行特定操作的程序(TSR)一定不会陌生。在MS-DOS时代,不仅正常的应用程序大量使用TSR技术,病毒同样也利用TSR 技术驻留内存,监视文件读写操作并伺机进行感染。在Windows NT下,各个进程的地址空间被隔离了,不同进程之间不能自由地相互访问内存,而且对于用户态代码有了访问限制:ring3程序代码只能读写其进程空间中应用专属的部分(在进程空间为4GB 的情况下,通常是低2GB),对系统内核部分占用的空间是没有读写权限的。这使得内存驻留感染变得困难,不过类似的想法和技术仍然是可能实现的,需要做的不过是一点变通:既然每个进程有其专属的进程空间,尽管不能做到永久驻留,但病毒代码至少在进程的生命期内仍然是可以驻留的;既然Windows下仍然有作用和DOS下中断相同的API,那么病毒自然可以截获API,从而监视文件读写,伺机进行感染。

上一页  [1] [2] [3] 下一页

责任编辑:华夏编辑6  联系方式  Email:华夏编辑6
电话:51228163
  • 上一篇黑客:

  • 下一篇黑客:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关黑客
    FLASH漏洞被黑客广泛利用 网上惊
    恶意代码技术分析检测
    九行代码让系统崩溃!
    各种网页木马挂马代码
    ASM编写的免杀病毒
    十三webshellvip解密代码
    9行代码干掉 XP 2000
    入侵渗透中用过的代码
    暴Dvbbs数据库代码
    让“卡巴斯基”见阎王
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号