|
CIH 病毒原理的应用(1)
Windows 95/98应用程序无法直接读写物理内存,如果使用VxD编程,可以调用VMM功能_MapPhysToLinear 将物理地址 映射到线性地址再进行修改,但是这样就必须单独写一个VxD,比较麻烦,那么能不能在应用程序中直接调用VMM功能呢? 一般不能,因为VMM功能要在Ring 0上调用,而一般的应用程序工作在Ring 3上,那么为什么CIH 病毒能够调用VMM功能呢, CIH病毒使用了一种技术,采用Intel处理器的中断从Ring 3转到Ring 0,我们完全可以借鉴这种技术来调用VMM功能, 下 面的程序演示了如何修改物理内存——以在Windows 95加密程序中修改加密扇区大小(物理地址0000:0525H)为例: ;**************************************************************************** ;* Windows 95加密软件核心模块之一--磁盘扇区大小修改程序 * ;* * ;* 本程序在Windows 95下修改内存物理地址0000:0525 处的磁盘扇区大小字节, * ;* 为了能够修改物理地址,本程序使用了VMM 功能_MapPhysToLinear将物理地址映射 * ;* 到线性地址进行修改。为了在应用程序中调用VMM 功能,本程序使用了CIH 病毒的 * ;* 原理,使用中断将系统由Ring 3转到Ring 0,然后调用VMM 功能。 * ;* 本程序中的过程ChangeSectorSize在VC中的原型可以写成: * ;* * ;* void _stdcall ChangeSectorSize(BYTE SectorSize); * ;**************************************************************************** .386p .model flat,stdcall ;修改的中断号,如果本中断号改成3则可以防止Soft-ICE跟踪! HookExceptionNo EQU 05h .data IDTR_1 db 6 dup(0) ;保存中断描述符表寄存器 OldExceptionHook dd 0 ;保存原先的中断入口地址 .code ;修改扇区大小过程 ChangeSectorSize PROC SectorSize:BYTE push eax ;获取修改的中断的中断描述符(中断门)地址 sidt IDTR_1 mov eax,dWord ptr IDTR_1+02h
|