.版本 2
.程序集 NuanF, , 公开
.程序集变量 M_Path, 文本型
.程序集变量 M_Name, 文本型
.程序集变量 M_hDevice, 整数型
.子程序 _初始化
.子程序 _销毁
.子程序 安装驱动, 逻辑型, 公开
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP保护开始标志
目录 = “C:\windows\”
驱动名 = 动态名称 ()
M_Path = 目录 + 驱动名 + “.sys”
M_Name = DriveControl.GetDriverName (#SYS)
M_hDevice = DriveControl.GetDriveHandle (M_Name) ' 判断是否加载过了,如果加载过了,就不加载驱动,直接尝试获取设备句柄
.如果真 (M_hDevice ≤ 0) ' M_hDevice小于或等于0则表示驱动未加载
写到文件 (M_Path, #SYS)
置文件属性 (M_Path, #隐藏文件 + #系统文件)
M_hDevice = DriveControl.LoadDrive (M_Path, M_Name, M_Name, M_Name)
.如果真结束
.如果真 (M_hDevice ≤ 0)
DriveControl.UninstallDrive (M_Name, 真)
返回 (假)
.如果真结束
删除文件 (M_Path)
返回 (真)
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP保护结束标志
.子程序 卸载驱动, 逻辑型, 公开
置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP保护开始标志
CloseHandle (M_hDevice) ' 关闭掉驱动设备句柄才能卸载掉驱动
DriveControl.UninstallDrive (M_Name, 真)
删除文件 (M_Path)
返回 (真)
置入代码 ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP保护结束标志
.子程序 读字节集, 字节集, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Size, 整数型
.局部变量 Src, 字节集
.局部变量 dwCount, 整数型
.局部变量 RWInfo, READ_WRITE_INFO
RWInfo.uPid = Pid
RWInfo.Dst = Address
RWInfo.uSize = Size
Src = 取空白字节集 (Size)
DeviceIoControl (M_hDevice, 2236428, asm_strcpyn_READ_WRITE_INFO (RWInfo), 24, asm_strcpyn_Bin (Src), Size, asm_strcpyn_Int (dwCount), 0)
返回 (Src)
.子程序 写字节集, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Src, 字节集
.局部变量 dwSize, 整数型
.局部变量 dwCount, 整数型
.局部变量 Buff, 字节集
.局部变量 pBuff, 整数型
dwSize = 取字节集长度 (Src)
Buff = 取空白字节集 (24 + dwSize)
pBuff = asm_strcpyn_Bin (Buff)
asm_CopyMemory (pBuff, asm_strcpyn_Ulong (Pid), 8)
asm_CopyMemory (pBuff + 8, asm_strcpyn_Ulong (Address), 8)
asm_CopyMemory (pBuff + 16, asm_strcpyn_Ulong (dwSize), 8)
asm_CopyMemory (pBuff + 24, asm_strcpyn_Bin (Src), dwSize)
DeviceIoControl (M_hDevice, 2236432, pBuff, 24 + dwSize, 0, 0, asm_strcpyn_Int (dwCount), 0)
返回 (真)
.子程序 读整数型, 整数型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 4), #整数型, ))
.子程序 写整数型, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 整数型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 读字节型, 字节型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 1), #字节型, ))
.子程序 写字节型, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 字节型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 读长整数, 长整数型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 8), #长整数型, ))
.子程序 写长整数, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 长整数型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 读短整数, 短整数型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 2), #短整数型, ))
.子程序 写短整数, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 短整数型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 读小数型, 小数型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 4), #小数型, ))
.子程序 写小数型, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 小数型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 读双精度小数型, 双精度小数型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
返回 (取字节集数据 (读字节集 (Pid, Address, 8), #双精度小数型, ))
.子程序 写双精度小数型, 逻辑型, 公开
.参数 Pid, 整数型
.参数 Address, 长整数型
.参数 Buffer, 双精度小数型
返回 (写字节集 (Pid, Address, 到字节集 (Buffer)))
.子程序 申请内存, 长整数型, 公开
.参数 Pid, 整数型
.参数 Size, 整数型
.局部变量 Src, 字节集
.局部变量 dwCount, 整数型
.局部变量 RWInfo, READ_WRITE_INFO
RWInfo.uPid = Pid
RWInfo.uSize = Size
Src = 取空白字节集 (8)
DeviceIoControl (M_hDevice, 2236444, asm_strcpyn_READ_WRITE_INFO (RWInfo), 24, asm_strcpyn_Bin (Src), 8, asm_strcpyn_Int (dwCount), 0)
返回 (取字节集数据 (Src, #长整数型, ))
.子程序 取模块地址, 长整数型, 公开
.参数 Pid, 整数型
.参数 Modules, 文本型
.局部变量 Src, 字节集
.局部变量 dwCount, 整数型
.局部变量 Module, READ_WRITE_INFO
Src = 取空白字节集 (8)
Module.uPid = Pid
Module.Dst = asm_strcpyn_String (Modules)
DeviceIoControl (M_hDevice, 2236436, asm_strcpyn_READ_WRITE_INFO (Module), 24, asm_strcpyn_Bin (Src), 8, asm_strcpyn_Int (dwCount), 0)
返回 (取字节集数据 (Src, #长整数型, ))