CIH病毒原理的应用——物理内存的读写
来源:互联网 发布:知乎日报 文章读不了 编辑:程序博客网 时间:2024/05/19 08:42
大家都很讨厌CIH 病毒,可毛老人家教导我们:“要一分为二地看问题”,CIH
病毒很可怕,但是它使用的某些特殊技术还是可以借鉴的,这样可以做到变害
为利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
add eax,HookExceptionNo*08h+04h
cli
;保存原先的中断入口地址
push ecx
mov ecx,dword ptr [eax]
mov cx,word ptr [eax-04h]
mov dword ptr OldExceptionHook,ecx
pop ecx
;设置修改的中断入口地址为新的中断处理程序入口地址
push ebx
lea ebx,NewExceptionHook
mov word ptr [eax-04h],bx
shr ebx,10h
mov word ptr [eax+02h],bx
pop ebx
;执行中断,转到Ring 0(与CIH 病毒原理相似!)
push ebx
mov bl,byte ptr SectorSize ;扇区大小保存在bl寄存器中
int HookExceptionNo
pop ebx
;恢复原先的中断入口地址
push ecx
mov ecx,dword ptr OldExceptionHook
mov word ptr [eax-04h],cx
shr ecx,10h
mov word ptr [eax+02h],cx
pop ecx
;修改扇区大小过程结束
sti
pop eax
ret
ChangeSectorSize ENDP
;新的中断处理程序
NewExceptionHook PROC
push eax
push ebx
push ecx
push edx
push esi
;修改扇区大小
push dword ptr 00000000h ;必须为0
push dword ptr 00000001h ;字节数
push dword ptr 00000525h ;物理地址0000:0525
int 20h
dd 0001006ch ;以上两条指令相当于 VMMCall _MapPhysToLinear
pop esi
pop esi
pop esi
mov byte ptr [eax],bl ;修改扇区大小
;中断处理程序结束
pop esi
pop edx
pop ecx
pop ebx
pop eax
iretd
NewExceptionHook ENDP
end
本过程可以被C语言调用,编译方法:ml /c /coff w95enc.asm。请用MASM 6.11
以上版本编译,不需要DDK。将编译生成的OBJ文件插入VC的工程中,并在VC程序
中写上函数原型说明,就可以调用了。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3200
- CIH病毒原理的应用——物理内存的读写
- CIH病毒破坏硬件原理与删除木马的100多种方法
- "新 CIH" 病毒的部分反汇编分析
- 高手写的天书程序-CIH病毒源码
- CIH病毒
- Linux读写物理内存的实践环节
- 内存的物理结构和工作原理
- 国内三大杀毒软件商对新型CIH病毒的反应的实况记录
- 真正的高手进,”狼“进,精通病毒或愿意研究CIH 的进
- Windows95下物理内存单元的可靠读写
- CIH病毒原码
- cih病毒分析[转]
- CIH病毒庐山真面目
- CIH病毒源代码
- 病毒的原理
- Linux读写物理内存
- linux 物理内存读写
- 单手劈砖的物理原理
- 用delphi实现冰河的远程屏幕操作功能
- 有关IIS HACK的一些方法整理
- Win2000中用户自定义IP头的实现及OicqSend完整实例源程序
- 用pascal写的最简单的winsock程序
- 加密和 PKI 基础知识
- CIH病毒原理的应用——物理内存的读写
- 如何区别文本是BIG5还是GB?
- 从HTML到XML
- 手册中关于怎样使用TQuery 的误导
- 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图
- 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图 (2)
- Alpha 闪烁效果
- Microsoft Windows 2000 应用程序兼容性
- Microsoft Windows 2000 应用程序兼容性 ( 2 )