`

VB中通过NtSystemDebugControl访问内核空间

    博客分类:
  • vb
阅读更多
Option Explicit
Private Declare Function AdjustTokenPrivileges _
Lib "advapi32.dll" (ByVal TokenHandle As Long, _
ByVal DisableAllPriv As Long, _
ByRef NewState As TOKEN_PRIVILEGES, _
ByVal BufferLength As Long, _
ByRef PreviousState As TOKEN_PRIVILEGES, _
ByRef pReturnLength As Long) As Long
Private Declare Function
GetCurrentProcess _
Lib "kernel32" () As Long
Private Declare Function
GetVersionEx _
Lib "kernel32" _
Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function
LookupPrivilegeValue _
Lib "advapi32.dll" _
Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, _
ByVal lpName As String, _
lpLuid
As LUID) As Long
Private Declare Function
NtSystemDebugControl _
Lib "NTDLL.DLL" (ByVal scCommand As SYSDBG_COMMAND, _
ByVal pInputBuffer As Long, _
ByVal InputBufferLength As Long, _
ByVal pOutputBuffer As Long, _
ByVal OutputBufferLength As Long, _
ByRef pReturnLength As Long) As Long
Private Declare Function
OpenProcessToken _
Lib "advapi32.dll" (ByVal ProcessHandle As Long, _
ByVal DesiredAccess As Long, _
TokenHandle
As Long) As Long
'=========Checking OS staff=============
Private Type OSVERSIONINFO
dwOSVersionInfoSize
As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Type MEMORY_CHUNKS
Address
As Long
pData As Long
Length As Long
End
Type
Private Type LUID
UsedPart
As Long
IgnoredForNowHigh32BitPart As Long
End
Type '
Private Type TOKEN_PRIVILEGES
PrivilegeCount
As Long
TheLuid As LUID
Attributes
As Long
End
Type
Private Enum SYSDBG_COMMAND
'//以下5个在Windows NT各个版本上都有
SysDbgGetTraceInformation = 1
SysDbgSetInternalBreakpoint = 2
SysDbgSetSpecialCall = 3
SysDbgClearSpecialCalls = 4
SysDbgQuerySpecialCalls = 5
'// 以下是NT 5.1 新增的
SysDbgDbgBreakPointWithStatus = 6
'//获取KdVersionBlock
SysDbgSysGetVersion = 7
'//从内核空间拷贝到用户空间或者从用户空间拷贝到用户空间
'//但是不能从用户空间拷贝到内核空间
SysDbgCopyMemoryChunks_0 = 8
'//SysDbgReadVirtualMemory = 8
'//从用户空间拷贝到内核空间或者从用户空间拷贝到用户空间
'//但是不能从内核空间拷贝到用户空间
SysDbgCopyMemoryChunks_1 = 9
'//SysDbgWriteVirtualMemory = 9
'//从物理地址拷贝到用户空间 不能写到内核空间
SysDbgCopyMemoryChunks_2 = 10
'//SysDbgReadVirtualMemory = 10
'//从用户空间拷贝到物理地址 不能读取内核空间
SysDbgCopyMemoryChunks_3 = 11
'//SysDbgWriteVirtualMemory = 11
'//读写处理器相关控制块
SysDbgSysReadControlSpace = 12
SysDbgSysWriteControlSpace = 13
'//读写端口
SysDbgSysReadIoSpace = 14
SysDbgSysWriteIoSpace = 15
'//分别调用_WRMSR@12
SysDbgSysReadMsr = 16
SysDbgSysWriteMsr = 17
'//读写总线数据
SysDbgSysReadBusData = 18
SysDbgSysWriteBusData = 19
SysDbgSysCheckLowMemory = 20
'// 以下是NT 5.2 新增的
'//分别调用_KdDisableDebugger@0
SysDbgEnableDebugger = 21
SysDbgDisableDebugger = 22
'//获取和设置一些调试相关的变量
SysDbgGetAutoEnableOnEvent = 23
SysDbgSetAutoEnableOnEvent = 24
SysDbgGetPitchDebugger = 25
SysDbgSetDbgPrintBufferSize = 26
SysDbgGetIgnoreUmExceptions = 27
SysDbgSetIgnoreUmExceptions = 28
End Enum
Private Const
SE_DEBUG As String = "SeDebugPrivilege"
Private Const SE_PRIVILEGE_ENABLED As Long = &H2
Private Const TOKEN_QUERY As Long = &H8
Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Dim VerInfo As OSVERSIONINFO
Public Function GetData(ByVal addr As Long) As Long
Dim
mc As MEMORY_CHUNKS
Dim retv&, retl&
With mc
.Address = addr
.Length = Len(addr)
.pData = VarPtr(retv)
End With
Dim
st As Long
st = NtSystemDebugControl(SysDbgCopyMemoryChunks_0, VarPtr(mc), Len(mc), 0&, 0&, VarPtr(retl))
GetData = retv
If (Not NT_SUCCESS(st)) Then GetData = 0
End Function
Public Function
InitMemoryControl() As Boolean
InitMemoryControl = True
InitMemoryControl = InitMemoryControl And IsSupportedOS
InitMemoryControl = InitMemoryControl
And EnablePrivilege(SE_DEBUG)
End Function
Public Function
IsSupportedOS() As Boolean
On Error GoTo
IsSupportedOS_Err_Hdl
IsSupportedOS =
False
VerInfo.dwOSVersionInfoSize = Len(VerInfo)
If (GetVersionEx(VerInfo)) <> 0 Then
If
VerInfo.dwPlatformId = 2 Then
If
VerInfo.dwMajorVersion = 5 Then
If
(VerInfo.dwMinorVersion > 0) Then
IsSupportedOS = True
End If
End If
End If
End If
IsSupportedOS_Err_Hdl:
End Function
Public Function
SetData(ByVal addr As Long, _
ByVal data As Long) As Boolean
Dim
mc As MEMORY_CHUNKS
Dim retv&, retl&
With mc
.Address = addr
.Length = Len(addr)
.pData = VarPtr(data)
End With
Dim
st As Long
st = NtSystemDebugControl(SysDbgCopyMemoryChunks_1, VarPtr(mc), Len(mc), 0&, 0&, VarPtr(retl))
SetData = NT_SUCCESS(st)
End Function
Private Function
EnablePrivilege(ByVal seName As String) As Boolean
On Error Resume Next
Dim
p_lngRtn As Long
Dim
p_lngToken As Long
Dim
p_lngBufferLen As Long
Dim
p_typLUID As LUID
Dim p_typTokenPriv As TOKEN_PRIVILEGES
Dim p_typPrevTokenPriv As TOKEN_PRIVILEGES
p_lngRtn = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
Or _
TOKEN_QUERY, p_lngToken)
If p_lngRtn = 0 Then
EnablePrivilege = False
Exit Function
End If
If
Err.LastDllError <> 0 Then
EnablePrivilege = False
Exit Function
End If
p_lngRtn = LookupPrivilegeValue(0&, seName, p_typLUID)
If p_lngRtn = 0 Then
EnablePrivilege = False
Exit Function
End If
p_typTokenPriv.PrivilegeCount = 1
p_typTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
p_typTokenPriv.TheLuid = p_typLUID
EnablePrivilege = (AdjustTokenPrivileges(p_lngToken,
False, p_typTokenPriv, Len( _
p_typPrevTokenPriv), p_typPrevTokenPriv, p_lngBufferLen) <>
0)
End Function
Private Function
NT_SUCCESS(ByVal nsStatus As Long) As Boolean
NT_SUCCESS = (nsStatus >= 0)
End Function

 

分享到:
评论

相关推荐

    Nt内核函数大全.doc

    Nt内核函数大全是Windows操作系统中的一组核心函数,用于提供内核级别的服务和控制。这些函数可以被内核开发者使用,以便更好地控制和管理操作系统的行为。 1. 设备管理: NtLoadDriver:加载设备驱动程序,使其...

    windowsNt内核函数大全.doc

    - **NtTranslateFilePath**:转换文件路径的格式,便于跨命名空间访问文件。 #### 五、注册表管理 - **NtCreateKey** 和 **NtOpenKey**:分别用于创建或打开注册表项。 - **NtDeleteKey**:删除注册表项。 - **...

    Nt内核函数大全[文].pdf

    NtCreateDirectoryObject函数:该函数用于创建一个目录中的对象管理器命名空间,参数包括目录的路径和相关参数等信息。返回值为NTSTATUS类型,表示操作的结果。 NtCreateSymbolicLinkObject函数:该函数用于创建一...

    进入ring0、ring3

    在计算机操作系统中,Ring0和Ring3是保护模式下的特权等级,它们定义了不同级别的操作系统内核和用户程序的访问权限。Ring0通常代表最高权限,操作系统内核在此级别运行,具有对硬件的直接访问权,而Ring3则是用户...

    ring3恢复SSDTHOOK(易语言ssdthook恢复工具)V1.0.0绿色免费版

    使用ZwSystemDebugControl,可以在ring3下读写内核空间虚拟内存,但是XP以上系统貌似就不支持写内核了,还有NtSystemDebugControl被SSDT HOOK之后也无法写进内核,有需要的朋友来下载ring3恢复S

    易语言NTAPI进程操纵的代码

    在易语言中,通过使用DLL命令来调用这些内核级别的API,可以实现对进程的高级操作,如打开、控制、结束进程,以及改变进程权限等。 这篇分享的代码主要展示了如何使用易语言进行NTAPI进程操纵。首先,我们需要了解...

    易语言ssdthook恢复源码

    易语言ssdthook恢复源码,易语言中级源码很不错可以恢复游戏的钩子

    易语言隐藏进程模块

    易语言隐藏进程模块源码 系统结构:隐藏进程,用保护型打开进程,提升进程权限,写物理内存,读物理内存,取进程EProcess,十六文本至长整数,取字节集指针_,NtSystemDebugControl,取自进程ID,关闭系

    易语言隐藏进程

    易语言隐藏进程源码,隐藏进程,进程隐藏,提升进程权限D,取进程EProcess,十六文本至长整数,读物理内存,写物理内存,取特殊目录,获取特别文件夹位置_,从列表id取路径_,NtSystemDebugControl,ZwQuerySystemInformation

    易语言无驱动进入ring0

    易语言无驱动进入ring0源码,无驱动进入ring0,读取cr0,操作数据,写物理内存,读物理内存,查看字节集,提升进程权限,查看字节集2,到十六进制文本,RtlAdjustPrivilege,NtSystemDebugControl,SetProcessAffinityMask,...

    易语言伪装PID

    伪装PID,取进程EProcess,十六文本至长整数_,进程权限提升Debug,内存_写物理内存,内存_读物理内存,取自进程ID,取指针_字节集,RtlMoveMemory3,RtlMoveMemory2,OpenProcess,CloseHandle,NtSystemDebugControl,...

Global site tag (gtag.js) - Google Analytics