复习计算机病毒分析与防范
引导型病毒的工作原理
在BIOS后,操作系统前,通过中断服务程序(向量表 INT 13H),占据物理位置(常驻内存高端),替换、截获系统中断从而伺机传染发作。
主引导扇区BS的结构
MBR主引导记录、DPT(Disk Partition Table)分区信息、结束标志(AA55H)。
DPT结构(16字节)
- 一字节:分区状态、活动分区判定
- 一字节:开始磁头
- .75字节(00 0001):右边六位为起始扇区号
- 1.25字节 上面左边两位加上这里八位:起始柱面号
- 一字节:分区类型,0B为FAT32,83为Linux,07为ntfs,05是扩展分区
- 三字节:分区结束的磁头,扇区,柱面号
- 四字节:线性寻址方式下的分区相对扇区地址
- 四字节:该分区占用的 总扇区数
PE文件结构
MZ文件头(4D5A),DOS插桩程序,NT映像头(Signature、FileHeader、OptionalHeader),节表,节(包含引入引出节)。
为什么要重定位技术
病毒要用到变量,但依附到程序上时位置变化就不能正常使用,这里需要用到重定位。
如何实现重定位
- call跳到下一条指令,使下一条指令感染后的实际地址进栈。
- 用pop或mov exx,[esp] 去除栈顶内容,这样就得到了感染后下一条指令的实际地址。
- 令V_start为感染前call的下一条指令地址。Var_lable为感染前变量地址。于是变量Var的实际地址为Base + (OffSet(Var_Lable) - OffSet(V_start))
蠕虫和普通病毒的对比
病毒:寄生存在、插入宿主复制、宿主运行时传染、针对本地、user触发、影响文件系统、user水平决定传播、摘除还原
蠕虫:独立存在、拷贝自身复制、系统漏洞传染、针对网络、自身触发、影响网络系统性能、user水平不影响、补丁还原
判断PE文件的方法
mz头4d5a,pe头(nt映像头signature)50450000。
感染PE文件的方法/如何实现添加新节
- 判断MZ、PE、感染标记
- 获得数据目录Directory个数(每个8字节)
- 获得节表起始位置(Directory偏移地址+目录字节数)、最后节表的末尾偏移(节表起始位置+节个数*28H)
- 新节写入节表
- 节名8
- 节的实际字节数4
- 本节开始偏移地址(上一节开始偏移地址+(上节大小/节对齐+1)*节对齐)
- 本节对齐后大小
- 本节在文件中的开始位置(上节文件开始位置+上节对齐后大小)
- 修改nt映像头节表数
- 替换AddressOfEntryPoint为病毒入口
- 更新pe映像尺寸SizeOfImage(原SizeOfImage+病毒节对齐后大小)
- 写入感染标记,病毒代码,设置当前位置为文件末尾
系统引导过程
- 开机
- BIOS加电自检,电源稳定后,CPU从内存地址ffff:0000处开始执行
- BS读入 0000:7c00
- 检查0000:7def 是否为0xaa55
- 跳转到0000:7c00处执行MBR
- 以下由MBR程序执行
- MBR将自己复制到0000:0600处
- 在主分区表中搜索是否有活动分区
- 将活动分区的第一个扇区读入0000:7c00
- 检查0000:7def 是否为0xaa55
- 跳转到0000:7c00处继续执行启动程序
病毒如何常驻内存
将自身复制到内存高端(10 0000H之后),修改内存容量标志单元(0000:0413处),减去病毒长度,使得常驻内存;然后将原int 13h磁盘中断服务程序的中断向量保存,并修改其指向病毒代码
引导型病毒特点
- 在操作系统之前进入内存
- 减少操作系统所掌管的内存大小
- 修改int 13h 的中断向量,指向内存高端
- 必定驻留硬盘的主引导扇区或引导扇区,并且只驻留一次
- 把感染的主引导扇区或引导扇区和未感染的进行比较,若不一样,有毒。
节表
储存了每个节(数目由NumberOfSection决定)的具体信息,每个节信息大小为28H/40。
引入引出节
引入表exe:是用来描述可执行文件需要调用的外部函数(API)。
引出表dll:DLL向PE提供的导出函数信息的列表,通常这些信息包含了导出的函数名和函数的地址。
动态获取api
LoadLibrary加载一个DLL,返回DLL地址。
GetProcAddress通过DLL地址和API函数名获得API函数的地址。
木马结构
木马软件一般由木马配置程序、控制端程序和被控端程序三部分组成。