荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Mic (霸王丸), 信区: Virus
标  题: CIH病毒原理的应用——物理内存的读写
发信站: 荔园晨风BBS站 (Mon Apr  9 14:44:04 2001), 转信

大家都很讨厌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程序

中写上函数原型说明,就可以调用了。


--
               ﹀                ▲                   ▲    \  /
           ﹀                   ▲▲▲   ▲▲  ?    ▲▲▲― ● ―
         ﹀                                       ▲ ▲▎▲ /  \            ▃
            ▁▅    ▁▃▇█▅▃▁               ▲▲┻▍▲             ▃▇█
    ▁▃▅▇███▅▁    ∞:      ∞:                 ▍       ▁▃▅████
                       ∞:    ∞:           ├┼┼┬ γ▍γγ┤       m i c ◤

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.108]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店