一、Windows 95 DDK的安装 安装Windows 95 DDK一般需要先安装Win32 SDK,原因是Windows 95 DDK需要Win32 SDK的16位资源编译器,但是Win32 SDK很大(一整张光盘的容量),而且国内难以买到,ftp站上也较少见,即使有,下载也很困难。笔者经过一段时间的摸索,找到了安装Windows 95 DDK的几种简单方法,现将方法介绍如下: 方法之一:使用第三方资源编译器 1、修改注册表,仿真Win32 SDK已经安装的情况。 建立一个名为WIN32SDK.REG的注册表文件,内容为:
REGEDIT4
[HKEY_USERS/.Default/Software/Microsoft/Win32SDK]
[HKEY_USERS/.Default/Software/Microsoft/Win32SDK/Directories] "Install Dir"="C://MSTOOLS"
在资源管理器中双击此文件,将此文件中的内容添加到注册表。就可以安装Windows 95 DDK了。 2、运行Windows 95 DDK中的SETUP.EXE文件,安装Windows 95 DDK到C:/DDK。 3、安装MASM 6.11到C:/MASM611,安装完成后将未安装的Windows 95 DDK中的MASM611C目录下的文件覆盖到C:/MASM611/BIN。 4、安装Visual C++ 5.0(4.0也可以,但不宜使用6.0)到C:/Program Files/DevStudio/VC。 5、建立C:/MSTOOLS/BINW16目录,拷贝资源编译器。Windows 95 DDK需要一个能将Win32资源源文件编译成16位资源的资源编译器。如果有Win32 SDK,可以将BINW16目录下的文件直接拷贝到C:/MSTOOLS/BINW16,如果没有Win32 SDK,则可以使用第三方的资源编译 器,这里以使用Borland的资源编译器为例: 准备Turbo MASM 5.0一套,用UNPAK工具解压缩CMDLINE.PAK文件,找到下面三个文件:
BRC.EXE BRCC32.EXE RW32CORE.DLL
将这三个文件拷贝到C:/MSTOOLS/BINW16,并将BRC.EXE改名为RC.EXE即可。 6、修改CONFIG.SYS增大环境变量空间。 在CONFIG.SYS文件最后加入一行:
SHELL=C:/WINDOWS/COMMAND.COM /E:8192 /P
7、进入Windows 95 MS-DOS方式,初始化编译环境(最好建立一个批处理文件):
C:/MASM611/BINR/NEW-VARS.BAT C:/DDK/DDKINIT.BAT 32 BASE (编译的设备驱动程序不同,参数也不同) C:/Program Files/DevStudio/VC/bin/VCVARS32.BAT
就可以使用Windows 95 DDK了,连接时出现的警告可以不理会。方法之二:使用Windows 98 DDK完整版的Windows 98 DDK(约30M)包括Windows 95 DDK、全套SDK编译器和MASM 6.11C汇编器,安装方法非常简单:安装Windows 98 DDK和Visual C++ 5.0,然后直接运行“Check Build Environment”(编译带调试信息的设备驱动程序)或者“Free Build Environment”(编译正式发布版本的设备驱动程序)程序项即可。
二、一个拦截Windows 95/98文件操作的VxD
VxD——虚拟设备驱动程序,顾名思义,VxD是用来控制硬件设备的,那么这里为什么要讲一个拦截Windows 95/98文件操作的VxD呢?其实,VxD不仅仅可以用来控制硬件设备,因为VxD工作在80386保护模式Ring 0特权级(最高特权级)上,而一般的应用程序工作在Ring 3特权级(最低特权级)上,所以VxD可以完成许多API不能完成的功能,例如端口读写、物理内存读写、中断调用、API拦截等。正因为如此,VxD在Windows系统编程中有广泛用途,其实大家一般都是碰到Windows API不能解决或者难以解决的问题才考虑编写VxD解决问题。这里介绍的拦截Windows 95/98文件操作的VxD可以用来拦截Windows 95/98(Windows NT不支持VxD)的所有文件操作,那么这个VxD有什么用途呢?最大的用途可能是——病毒防火墙,用来对文件操作进行过滤,可以进行动态病毒检测和动态杀毒。这个VxD使用的原理和目前流行的CIH病毒传染的原理是基本相同的。(其实大家如果要问我为什么要写这么一个VxD,那是因为——我是Virus版的版主啦) 该VxD的文件名是FILEHOOK.VXD,源程序(FILEHOOK.ASM)如下:
;FILEHOOK.VXD--拦截Windows 95/98文件操作的VxD
.386p
.XLIST
INCLUDE VMM.Inc INCLUDE VWin32.Inc INCLUDE Shell.Inc
MASM=1
INCLUDE IFS.Inc INCLUDE IFSMgr.Inc
.LIST
;VxD声明
Declare_Virtual_Device FILEHOOK,1,0,VxD_Control,Undefined_Device_ID,,,
;保护模式数据段
VxD_DATA_SEG Prev_File_System_Api_Hook dd 0 In_File_System_Api_Hook db 0 Message1 db 'Open file !',0 Caption1 db 'FILEHOOK',0 VxD_DATA_ENDS
;保护模式代码段
VxD_CODE_SEG
;系统控制过程
BeginProc VxD_Control Control_Dispatch SYS_DYNAMIC_DEVICE_INIT,VxD_Device_Init Control_Dispatch SYS_DYNAMIC_DEVICE_EXIT,VxD_Device_Exit Control_Dispatch W32_DEVICEIOCONTROL,VxD_IOCTL clc ret EndProc VxD_Control
;IOCTL 控制(设备I/O控制)过程
BeginProc VxD_IOCTL ;获取DeviceIoControl控制代码 mov ecx,[esi.dwIoControlCode] cmp ecx,1 jz Install_File_System_Api_Hook cmp ecx,2 jz Uninstall_File_System_Api_Hook jmp VxD_IOCTL_Exit
;安装文件系统API 钩子
Install_File_System_Api_Hook: mov eax,OFFSET32 File_System_Api_Hook VxDCall IFSMgr_InstallFileSystemApiHook or eax,eax jz Error_Handler ;保存上一个文件系统API 钩子地址 mov Prev_File_System_Api_Hook,eax jmp VxD_IOCTL_Exit
;移去文件系统API 钩子
Uninstall_File_System_Api_Hook: mov eax,OFFSET32 File_System_Api_Hook VxDCall IFSMgr_RemoveFileSystemApiHook cmp eax,0FFFFFFFFH jz Error_Handler jmp VxD_IOCTL_Exit
;IOCTL 控制过程结束
VxD_IOCTL_Exit: xor eax,eax clc ret
;错误处理
Error_Handler: mov eax,0FFFFFFFFH stc ret EndProc VxD_IOCTL
;VxD_Device_Exit过程 BeginProc VxD_Device_Exit clc ret EndProc VxD_Device_Exit
;文件系统API 钩子过程(C语言调用方式)
BeginProc File_System_Api_Hook,CCALL ArgVar FSDFnAddr,DWORD ArgVar FunctionNum,DWORD ArgVar Drive,DWORD ArgVar ResourceFlags,DWORD ArgVar CodePage,DWORD ArgVar pir,DWORD EnterProc pushad ;防止重入 cmp byte ptr In_File_System_Api_Hook,00h jnz Prev_Hook ;比较是打开文件操作吗? cmp dword ptr FunctionNum,IFSFN_OPEN jnz Prev_Hook ;设置重入标志 inc byte ptr In_File_System_Api_Hook ;取当前VM句柄 VMMCall Get_Cur_VM_Handle ;显示消息框 mov eax,MB_ICONASTERISK+MB_OK mov ecx,OFFSET32 Message1 mov edi,OFFSET32 Caption1 mov esi,0 mov edx,0 VxDCall Shell_Message ;取消重入标志 dec byte ptr In_File_System_Api_Hook
;转到上一个文件系统API 钩子地址
Prev_Hook: popad LeaveProc mov eax,Prev_File_System_Api_Hook jmp [eax] Return EndProc File_System_Api_Hook
VxD_CODE_ENDS
;保护模式初始化代码段
VxD_ICODE_SEG
;VxD_Device_Init过程
BeginProc VxD_Device_Init clc ret EndProc VxD_Device_Init
VxD_ICODE_ENDS
end <  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
1/2 1 2 下一页 尾页 |