?? cih.txt
字號:
CIH 病毒原理的應用——物理內存的讀寫
大家都很討厭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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -