CIH 病毒原理的應用――實體記憶體的讀寫 (4千字)

看雪資料發表於2001-07-02

實現ring0倒不是很難。
如果你不想為此再寫一個vxd的話,用CIH的技術吧。
不好意思,俺不懂uixm

轉一篇白雲黃鶴上的帖子,供參考

【實際當中應這樣寫函式原型
extern "C" void _stdcall ChangeSectorSize(BYTE SectorSize); 】

---------------------------------------------------
發信人: TBsoft (TBsoft), 信區: Virus
標  題: CIH 病毒原理的應用――實體記憶體的讀寫
發信站: 武漢白雲黃鶴站 (Fri Mar 12 18:44:00 1999) , 站內信件

    大家都很討厭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程式中寫
上函式原型說明,就可以呼叫了。
    本斑竹這幾天在集中精力研究CIH病毒,希望能夠儘早分析出它的殺除方法。這
段文章算是一個“副產品”吧,有什麼意見只管提呀。
    好久沒有發文章了……

--
天生我才,就做一篇錦繡文章。
風起雲湧,就挽一回狂瀾巨浪。
成也堂堂!
敗也堂堂!

※ 修改:・TBsoft 於 Mar 12 18:45:48 修改本文・[FROM:    210.42.24.31]
※ 來源:・武漢白雲黃鶴站 s1000e.whnet.edu.cn・[FROM: 210.42.24.31]

相關文章