动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   网络应用 → 阅读文章
  

 CIH 病毒原理的应用-物理内存的读写

作者来源: 
阅读 数 419 人次 , 2006-4-18 11:43:00 

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

   [iduba_page] 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程序中写上函数原型说明,就可以调用了。
 本文Tags病毒  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:病毒的破坏级别
· 下一篇:病毒传播源--端对端网络 如何构成攻击威胁
· Win9x/Winnt/Win2k/Winxp病毒技术探讨(2)
· 布线市场的春雨
· 广州地铁局域网和城域网解决方案(12)
· 电缆电话成为可能
· 网络协议X档案全集(九)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077