下面小编为大家带来Win10系统获得最高管理员权限方法(共含6篇),希望大家喜欢!同时,但愿您也能像本文投稿人“xidianwzk”一样,积极向本站投稿分享好文章。
具体方法如下:
1、登录到win10专业版系统桌面,在开始菜单旁边的输入栏里面输入“管理工具”,然后点击打开管理工具。
2、在弹出的管理工具窗口中,点击打开“计算机管理”图标。
3、接着在计算机管理窗口中,依次展开:本地用户和组 - 用户,然后在用户右侧界面找到“Administrator”帐户。
4、双击打开Administrator帐户,然后在弹出的Administrator属性窗口中,点击取消勾选“帐户已禁用(B)”点击确定完成操作。
5、完成以上设置之后,返回到系统桌面,点击开始菜单,然后点击开始菜单左上角的输入用户名 - 注销,点击注销电脑。
6、注销完成之后屏幕会出现一张屏保图片,使用鼠标任意点击进入下一步操作。
7、最后在左下角点击选择登录帐户为“Administrator”,点击“登录”按钮登录系统完成操作。
关于以上Windows10系统获得最高管理员权限的操作方法就介绍完了,如果用户想要获得Win10最高管理员权限,还有不懂的怎样获得最高管理员权限的朋友,那么可以按照以上操作方法进行即可。
win10系统获得管理员权限方法
1、在右下方任务栏的“搜索web和windows”输入框中输入“gpedit.msc”,电脑会自行搜索,搜索完毕之后鼠标点击打开。
2、打开本地组策略管理器。
3、依次点击打开“计算机配置”选项,然后再找到“Windows设置”这个选项,再从“Windows设置”找到并打开“安全设置”选项,接着打开“本地策略”最后找到打开“安全选项”即可。
4、找到“账户:管理员状态”,可以看见状态为“已禁用”,我们需要的是将它开启。
5、鼠标右键单击“账户:管理员状态”,在弹出的'快捷菜单中选择“属性”。
6、在“账户:管理员状态”属性中,将以启用选中即可。
7、如果想修改管理员账户的名字,找到“账户,重命名系统管理员账户”,右键单击,选择属性。
8、系统默认系统管理员的名字为administrator,你可以根据自己的喜好修改,如果不想修改名字,这一步操作可以忽略。
对于一般操作的文件我们不需开户windows7的administrator权限了,只要简单的操作一下即可解决此问题,下面给各位朋友举个实例,
对于一般文件获得管理员权限
1、简单的文件我们像documents and settings这类文件点击打开时提醒没有权限访问该文件夹了。
2、我们只要右击要查看的文件夹,然后在弹出菜单点击“管理员取得所有权”即可, 3、如果是文件我们同样右击,然后选“以管理员身份运行” 就可以解决了。开启Administrator账户的方法1、如果想开户超级管理员,我们只要右击桌面上的“计算机”-》“管理”。
2、然后在管理员我们点击左边的“本地用户和组”-》“用户”再右击“administrator”点击属性。 3、然后把此帐号打开即可。本文总结了 4 种方法获得 SYSTEM 权限来运行 regedit.exe 文件,
源代码很容易修改成命令行方式运行指定的程序,
1. 以服务方式运行
2. 添加 ACL 的方法
3. HOOK ZwCreateProcessEx 函数
4. 远程线程的方法
这几种方法都不是我想出来的,我只不过是总结了一下,用 Win32ASM 重写了代码而以。
关于这个大家可以看文章末尾的参考资料。下面简单的分析每一种方法。
1. 以服务方式运行
因为以服务方式运行程序时,相当于运行程序的是系统进程,所以,
被指定运行的程序自然而然的继承了系统进程的权限,也就是 SYSTEM 权限。
;@echo off
;goto make
;====================================================================================
; 一块三毛钱
; zhongts.yeah.net
; zhongts@163.com
; .1.15
;
; 以 SYSTEM 权限运行程序 - GetSys1
;
; 采用以服务方式运行的方法
;
;====================================================================================
.386
.model flat, stdcall
option casemap :none
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\advapi32.lib
includelib c:\masm32\lib\masm32.lib
_ReLaunch proto
CTXT MACRO text
local lbl
.const
lbl db text,0
.code
exitm
ENDM
.code
start proc
LOCAL stStartupInfo : STARTUPINFO
LOCAL procinfo : PROCESS_INFORMATION
invoke CreateMutex, NULL, TRUE, CTXT(“GetSys1_Mutex”)
invoke GetLastError
.if eax==ERROR_ALREADY_EXISTS
invoke RtlZeroMemory, addr stStartupInfo, sizeof stStartupInfo
mov stStartupInfo.cb, sizeof stStartupInfo
invoke CreateProcess, 0, CTXT(“regedit.exe”), 0, 0, 0, 0, 0, 0,
addr stStartupInfo, addr procinfo
invoke CloseHandle, procinfo.hProcess
invoke CloseHandle, procinfo.hThread
.else
invoke _ReLaunch
.endif
invoke ExitProcess, NULL
start endp
_ReLaunch proc
LOCAL hSCManager
LOCAL hService
LOCAL szName[MAX_PATH] : byte
invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE
.if eax!=0
mov hSCManager, eax
invoke OpenService, hSCManager, CTXT(“GetSys1Temp”), DELETE
.if eax!=0
push eax
invoke DeleteService, eax
call CloseServiceHandle
.endif
invoke GetModuleFileName, NULL, addr szName, MAX_PATH
invoke CreateService, hSCManager, CTXT(“GetSys1Temp”), CTXT(“GetSys1 Temp Service”), \
SERVICE_START + SERVICE_QUERY_STATUS + DELETE, \
SERVICE_WIN32_OWN_PROCESS + SERVICE_INTERACTIVE_PROCESS, SERVICE_DEMAND_START, \
SERVICE_ERROR_IGNORE, addr szName, NULL, NULL, NULL, NULL, NULL
.if eax!=0
mov hService, eax
invoke StartService, hService, 0, NULL
invoke DeleteService, hService
invoke CloseServiceHandle, hService
.endif
invoke CloseServiceHandle, hSCManager
.endif
ret
_ReLaunch endp
end start
:make
set path=%path%;c:\masm32\bin
set appname=GetSys1
ml /nologo /c /coff %appname%.bat
link /nologo /subsystem:windows %appname%.obj
del %appname%.obj
echo.
pause
GetSys1(第一次运行的这个进程 GetSys1 我们称为 A) 开始运行时先创建一个互斥量,
接着以服务的方式重新启动自己
(又一次运行的进程 GetSys1 我们称为 B),重新运行后的 B 已经具有了 SYSTEM 权限。
B 再通过 CreateProcess 函数运行 regedit.exe 程序,
因为 B 具有 SYSTEM 权限,所以 regedit.exe 从中继承了 SYSTEM 权限。
运行完了 regedit.exe 后 B 结束运行,
然后 A 中的 StartService 函数返回,A 结束运行。就是因为 StartService 函数不会直接返回,
所以不能够直接通过服务的方式运行 regedit.exe。
2. 添加 ACL 的方法
主要思想是调用 CreateProcessAsUser 函数来运行程序,CreateProcessAsUser
函数的第一个参数是特定用户的令牌,
把这个参数设为具有 SYSTEM 权限的令牌即可。
;@echo off
;goto make
;====================================================================================
; 一块三毛钱
; zhongts.yeah.net
; zhongts@163.com
; 2005.1.15
;
; 以 SYSTEM 权限运行程序 - GetSys2
;
; 采用添加 ACL 的方法
;
;====================================================================================
.386
.model flat, stdcall
option casemap :none
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\accctrl.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\advapi32.lib
includelib c:\masm32\lib\masm32.lib
_EnablePrivilege proto :DWORD,:DWORD
_GetPidFromProcName proto :DWORD
_ModifySecurity proto :DWORD,:DWORD
CTXT MACRO text
local lbl
.const
lbl db text,0
.code
exitm
ENDM
ACL STRUCT
AclRevision BYTE ?
Sbz1 BYTE ?
AclSize WORD ?
AceCount WORD ?
Sbz2 WORD ?
ACL ENDS
PACL typedef PTR ACL
SecurityImpersonation equ 2
.code
start proc
LOCAL hProc
LOCAL hToken, hNewToken
LOCAL stStartupInfo : STARTUPINFO
LOCAL procinfo : PROCESS_INFORMATION
sub eax, eax
mov hProc, eax
mov hToken, eax
mov hNewToken, eax
invoke RtlZeroMemory, addr stStartupInfo, sizeof stStartupInfo
invoke RtlZeroMemory, addr procinfo, sizeof procinfo
invoke _EnablePrivilege, CTXT(“SeDebugPrivilege”), TRUE
invoke _GetPidFromProcName, CTXT(“lsass.exe”)
invoke OpenProcess, PROCESS_QUERY_INFORMATION, 0, eax
test eax, eax
jz _exit
mov hProc, eax
invoke OpenProcessToken, hProc, READ_CONTROL+WRITE_DAC, addr hToken
test eax, eax
jz _exit
invoke _ModifySecurity, hToken, TOKEN_ALL_ACCESS
test eax, eax
jz _exit
invoke CloseHandle, hToken
mov hToken, 0
invoke OpenProcessToken, hProc, TOKEN_ALL_ACCESS, addr hToken
test eax, eax
jz _exit
invoke DuplicateTokenEx, hToken, TOKEN_ALL_ACCESS, 0,
SecurityImpersonation, TokenPrimary, addr hNewToken
test eax, eax
jz _exit
invoke ImpersonateLoggedOnUser, hNewToken
test eax, eax
jz _exit
mov stStartupInfo.cb, sizeof stStartupInfo
invoke CreateProcessAsUser, hNewToken, 0, CTXT(“regedit.exe”), 0, 0, 0, 0, 0, 0,
addr stStartupInfo, addr procinfo
test eax, eax
jz _exit
invoke CloseHandle, procinfo.hProcess
invoke CloseHandle, procinfo.hThread
_exit:
.if hProc
invoke CloseHandle, hProc
.endif
.if hToken
invoke CloseHandle, hToken
.endif
.if hNewToken
invoke CloseHandle, hNewToken
.endif
invoke ExitProcess, NULL
start endp
_ModifySecurity proc uses ebx esi edi, hToken:DWORD, dwAccess:DWORD
LOCAL pSD, pAbsSD
LOCAL dwSDLength
LOCAL bDaclPresent, bDaclDefaulted
LOCAL pAcl : PACL
LOCAL pNewAcl : PACL
LOCAL szName[1024] : BYTE
LOCAL ea : EXPLICIT_ACCESS
LOCAL pSacl, pOwner, pPrimaryGroup
LOCAL dwAclSize, dwSaclSize, dwOwnerSize, dwPrimaryGroup
LOCAL bSuccess
sub eax, eax
mov pSD, eax
mov pAbsSD, eax
mov dwSDLength, eax
mov bDaclPresent, eax
mov bDaclDefaulted, eax
mov pAcl, eax
mov pNewAcl, eax
mov pSacl, eax
mov pOwner, eax
mov pPrimaryGroup, eax
mov dwAclSize, eax
mov dwSaclSize, eax
mov dwOwnerSize, eax
mov dwPrimaryGroup, eax
mov bSuccess, eax
invoke GetKernelObjectSecurity, hToken, DACL_SECURITY_INFORMATION, pSD, 0, addr dwSDLength
invoke LocalAlloc, LPTR, dwSDLength
test eax, eax
jz _exit
mov pSD, eax
invoke GetKernelObjectSecurity, hToken, DACL_SECURITY_INFORMATION, pSD,
dwSDLength, addr dwSDLength
invoke GetSecurityDescriptorDacl, pSD, addr bDaclPresent, addr pAcl, addr bDaclDefaulted
mov eax, sizeof szName
push eax
invoke GetUserName, addr szName, esp
pop eax
invoke BuildExplicitAccessWithName, addr ea, addr szName, dwAccess, GRANT_ACCESS, FALSE
invoke SetEntriesInAcl, 1, addr ea, pAcl, addr pNewAcl
cmp eax, ERROR_SUCCESS
jne _exit
invoke LocalFree, pAcl
mov pAcl, 0
invoke MakeAbsoluteSD, pSD, pAbsSD, addr dwSDLength, pAcl, addr dwAclSize, pSacl, addr dwSaclSize, \
pOwner, addr dwOwnerSize, pPrimaryGroup, addr dwPrimaryGroup
invoke LocalAlloc, LPTR, dwSDLength
test eax, eax
jz _exit
mov pAbsSD, eax
invoke LocalAlloc, LPTR, dwAclSize
test eax, eax
jz _exit
mov pAcl, eax
invoke LocalAlloc, LPTR, dwSaclSize
test eax, eax
jz _exit
mov pSacl, eax
invoke LocalAlloc, LPTR, dwOwnerSize
test eax, eax
jz _exit
mov pOwner, eax
invoke LocalAlloc, LPTR, dwPrimaryGroup
test eax, eax
jz _exit
mov pPrimaryGroup, eax
invoke MakeAbsoluteSD, pSD, pAbsSD, addr dwSDLength, pAcl, addr dwAclSize, pSacl, addr dwSaclSize, \
pOwner, addr dwOwnerSize, pPrimaryGroup, addr dwPrimaryGroup
invoke SetSecurityDescriptorDacl, pAbsSD, bDaclPresent, pNewAcl, bDaclDefaulted
invoke SetKernelObjectSecurity, hToken, DACL_SECURITY_INFORMATION, pAbsSD
mov bSuccess, 1
_exit:
.if pSD
invoke LocalFree, pSD
.endif
.if pAcl
invoke LocalFree, pAcl
.endif
.if pNewAcl
invoke LocalFree, pNewAcl
.endif
.if pAbsSD
invoke LocalFree, pAbsSD
.endif
.if pSacl
invoke LocalFree, pSacl
.endif
.if pOwner
invoke LocalFree, pOwner
.endif
.if pPrimaryGroup
invoke LocalFree, pPrimaryGroup
.endif
mov eax, bSuccess
ret
_ModifySecurity endp
_EnablePrivilege proc szPriv:DWORD, bFlags:DWORD
LOCAL hToken
LOCAL tkp : TOKEN_PRIVILEGES
invoke GetCurrentProcess
mov edx, eax
invoke OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid
mov tkp.PrivilegeCount, 1
xor eax, eax
.if bFlags
mov eax, SE_PRIVILEGE_ENABLED
.endif
mov tkp.Privileges.Attributes, eax
invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, 0, 0
push eax
invoke CloseHandle, hToken
pop eax
ret
_EnablePrivilege endp
_GetPidFromProcName proc lpProcName:DWORD
LOCAL stProcess : PROCESSENTRY32
LOCAL hSnapshot
LOCAL dwProcessID
mov dwProcessID, 0
invoke RtlZeroMemory, addr stProcess, sizeof stProcess
mov stProcess.dwSize, sizeof stProcess
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hSnapshot, eax
invoke Process32First, hSnapshot, addr stProcess
.while eax
invoke lstrcmpi, lpProcName, addr stProcess.szExeFile
.if eax==0
mov eax, stProcess.th32ProcessID
mov dwProcessID, eax
.break
.endif
invoke Process32Next, hSnapshot, addr stProcess
.endw
invoke CloseHandle, hSnapshot
mov eax, dwProcessID
ret
_GetPidFromProcName endp
end start
:make
set path=%path%;c:\masm32\bin
set appname=GetSys2
ml /nologo /c /coff %appname%.bat
link /nologo /subsystem:windows %appname%.obj
del %appname%.obj
echo.
pause
GetSys2 取得 lsass.exe 进程的令牌,缺省情况下操作这个令牌的权限很小,
所以需要先取得操作这个令牌的所有权限,
这个任务由函数 _ModifySecurity 来完成。
有了权限后,复制一个主令牌,然后在当前线程中扮演 SYSTEM 用户,接着就可以调用 CreateProcessAsUser
函数运行 regedit.exe 程序了。有关安全性编程不清楚的地方可以参考[3]。
3. HOOK ZwCreateProcessEx 函数
有关这个[1]里面讲得很清楚了,下面直接给出源代码。
;@echo off
;goto make
;====================================================================================
; 一块三毛钱
; zhongts.yeah.net
; zhongts@163.com
; 2005.1.15
;
; 以 SYSTEM 权限运行程序 - GetSys3
;
; 采用 HOOK ZwCreateProcessEx 函数的方法
;
;====================================================================================
.386
.model flat, stdcall
option casemap :none
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\advapi32.lib
includelib c:\masm32\lib\masm32.lib
_EnablePrivilege proto :DWORD,:DWORD
_GetPidFromProcName proto :DWORD
_HackedZwCreateProcessEx proto
CTXT MACRO text
local lbl
.const
lbl db text,0
.code
exitm
ENDM
ASMJMP struct
mov_eax BYTE ?
address DWORD ?
jmp_eax WORD ?
ASMJMP ends
.data?
g_hProc dd ?
g_dwFunc dd ?
.code
start proc
LOCAL osvi : OSVERSIONINFO
LOCAL lpAsmJmp
LOCAL mbi : MEMORY_BASIC_INFORMATION
LOCAL stStartupInfo : STARTUPINFO
LOCAL procinfo : PROCESS_INFORMATION
sub eax, eax
mov lpAsmJmp, eax
invoke RtlZeroMemory, addr osvi, sizeof osvi
invoke RtlZeroMemory, addr mbi, sizeof mbi
invoke RtlZeroMemory, addr stStartupInfo, sizeof stStartupInfo
invoke RtlZeroMemory, addr procinfo, sizeof procinfo
mov osvi.dwOSVersionInfoSize, sizeof osvi
invoke GetVersionEx, addr osvi
cmp osvi.dwMajorVersion, 5
jnz _exit
.if osvi.dwMinorVersion==1
mov g_dwFunc, 30h
.elseif osvi.dwMinorVersion==2
mov g_dwFunc, 32h
.endif
invoke _EnablePrivilege, CTXT(“SeDebugPrivilege”), TRUE
invoke _GetPidFromProcName, CTXT(“lsass.exe”)
test eax, eax
jz _exit
invoke OpenProcess, PROCESS_CREATE_PROCESS, TRUE, eax
test eax, eax
jz _exit
mov g_hProc, eax
invoke GetModuleHandle, CTXT(“ntdll.dll”)
mov edx, eax
invoke GetProcAddress, edx, CTXT(“ZwCreateProcessEx”)
mov lpAsmJmp, eax
invoke VirtualQuery, lpAsmJmp, addr mbi, sizeof mbi
push eax
invoke VirtualProtect, mbi.AllocationBase, mbi.RegionSize, PAGE_EXECUTE_READWRITE, esp
pop eax
mov edi, lpAsmJmp
assume edi : ptr ASMJMP
mov [edi].mov_eax, 0B8h
mov [edi].address, offset _HackedZwCreateProcessEx
mov [edi].jmp_eax, 0E0FFh
mov stStartupInfo.cb, sizeof stStartupInfo
invoke CreateProcess, 0, CTXT(“regedit.exe”),
0, 0, 0, 0, 0, 0, addr stStartupInfo, addr procinfo
test eax, eax
jz _exit
invoke CloseHandle, procinfo.hProcess
invoke CloseHandle, procinfo.hThread
_exit:
invoke ExitProcess, NULL
start endp
_HackedZwCreateProcessEx proc
mov eax, g_hProc
mov dword ptr [esp+16], eax
mov eax, g_dwFunc
lea edx, dword ptr [esp+4]
int 2Eh
retn 24h
_HackedZwCreateProcessEx endp
_EnablePrivilege proc szPriv:DWORD, bFlags:DWORD
LOCAL hToken
LOCAL tkp : TOKEN_PRIVILEGES
invoke GetCurrentProcess
mov edx, eax
invoke OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid
mov tkp.PrivilegeCount, 1
xor eax, eax
.if bFlags
mov eax, SE_PRIVILEGE_ENABLED
.endif
mov tkp.Privileges.Attributes, eax
invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, 0, 0
push eax
invoke CloseHandle, hToken
pop eax
ret
_EnablePrivilege endp
_GetPidFromProcName proc lpProcName:DWORD
LOCAL stProcess : PROCESSENTRY32
LOCAL hSnapshot
LOCAL dwProcessID
mov dwProcessID, 0
invoke RtlZeroMemory, addr stProcess, sizeof stProcess
mov stProcess.dwSize, sizeof stProcess
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hSnapshot, eax
invoke Process32First, hSnapshot, addr stProcess
.while eax
invoke lstrcmpi, lpProcName, addr stProcess.szExeFile
.if eax==0
mov eax, stProcess.th32ProcessID
mov dwProcessID, eax
.break
.endif
invoke Process32Next, hSnapshot, addr stProcess
.endw
invoke CloseHandle, hSnapshot
mov eax, dwProcessID
ret
_GetPidFromProcName endp
end start
:make
set path=%path%;c:\masm32\bin
set appname=GetSys3
ml /nologo /c /coff %appname%.bat
link /nologo /subsystem:windows %appname%.obj
del %appname%.obj
echo.
pause
4. 远程线程的方法
通过注入远程线程的方法来运行指定的 regedit.exe 程序,
也是相当于运行 regedit.exe 程序的是系统进程,
那么 regedit.exe 也就自然而然的继承了系统进程的 SYSTEM 权限。
;@echo off
;goto make
;====================================================================================
; 一块三毛钱
; zhongts.yeah.net
; zhongts@163.com
; 2005.1.15
;
; 以 SYSTEM 权限运行程序 - GetSys4
;
; 采用远程线程的方法
;
;====================================================================================
.386
.model flat, stdcall
option casemap :none
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\masm32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\advapi32.lib
includelib c:\masm32\lib\masm32.lib
_EnablePrivilege proto :DWORD,:DWORD
_GetPidFromProcName proto :DWORD
;下面两个宏来源于罗云彬的《Windows 环境下32位汇编程序设计》一书
reverseArgs macro arglist:VARARG
local txt,count
txt TEXTEQU
count = 0
for i,
count = count + 1
txt TEXTEQU @CatStr(i,,<%txt>)
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
endif
exitm txt
endm
_invoke macro _Proc,args:VARARG
local count
count = 0
% for i,< reverseArgs( args ) >
count = count + 1
push i
endm
call dword ptr _Proc
endm
CTXT MACRO text
local lbl
.const
lbl db text,0
.code
exitm
ENDM
.data?
g_hProcess dd ?
g_lpRemoteCode dd ?
.code
Remote_code_start equ this byte
g_lpGetModuleHandleA dd ?
g_lpGetProcAddress dd ?
g_szKernel32 db “Kernel32.dll”,0
g_szCreateProcessA db “CreateProcessA”,0
g_lpCreateProcessA dd ?
g_szRegedit db “Regedit.exe”,0
g_szDesktop db “WinSta0\Default”,0
g_stStartupInfo STARTUPINFO
g_procinfo PROCESS_INFORMATION
_RemoteThread proc
; int 3
pushad
call @F
@@:
pop ebx
sub ebx, offset @B
lea eax, [ebx+g_szKernel32]
_invoke [ebx+g_lpGetModuleHandleA], eax
mov esi, eax
lea eax, [ebx+g_szCreateProcessA]
_invoke [ebx+g_lpGetProcAddress], esi, eax
mov [ebx+g_lpCreateProcessA], eax
lea eax, [ebx+g_szDesktop]
lea ecx, [ebx+g_stStartupInfo]
mov dword ptr [ecx], sizeof g_stStartupInfo
mov dword ptr [ecx+8], eax
lea eax, [ebx+g_szRegedit]
lea edx, [ebx+g_procinfo]
_invoke [ebx+g_lpCreateProcessA], 0, eax, 0, 0, 0, 0, 0, 0, ecx, edx
popad
ret
_RemoteThread endp
Remote_code_end equ this byte
Remote_code_length equ offset Remote_code_end - offset Remote_code_start
start proc
invoke GetModuleHandle, CTXT(“kernel32.dll”)
mov ebx, eax
invoke GetProcAddress, ebx, CTXT(“GetModuleHandleA”)
mov g_lpGetModuleHandleA, eax
invoke GetProcAddress, ebx, CTXT(“GetProcAddress”)
mov g_lpGetProcAddress, eax
invoke _EnablePrivilege, CTXT(“SeDebugPrivilege”), TRUE
invoke _GetPidFromProcName, CTXT(“lsass.exe”)
invoke OpenProcess, PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE, FALSE, eax
.if eax
mov g_hProcess, eax
invoke VirtualAllocEx, g_hProcess, NULL, Remote_code_length, MEM_COMMIT, PAGE_EXECUTE_READWRITE
.if eax
mov g_lpRemoteCode, eax
invoke WriteProcessMemory, g_hProcess, g_lpRemoteCode,
offset Remote_code_start, Remote_code_length, NULL
mov eax, g_lpRemoteCode
add eax, offset _RemoteThread - offset Remote_code_start
invoke CreateRemoteThread, g_hProcess, NULL, 0, eax, 0, 0, NULL
invoke CloseHandle, eax
.endif
invoke CloseHandle, g_hProcess
.endif
invoke ExitProcess, NULL
start endp
_EnablePrivilege proc szPriv:DWORD, bFlags:DWORD
LOCAL hToken
LOCAL tkp : TOKEN_PRIVILEGES
invoke GetCurrentProcess
mov edx, eax
invoke OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid
mov tkp.PrivilegeCount, 1
xor eax, eax
.if bFlags
mov eax, SE_PRIVILEGE_ENABLED
.endif
mov tkp.Privileges.Attributes, eax
invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, 0, 0
push eax
invoke CloseHandle, hToken
pop eax
ret
_EnablePrivilege endp
_GetPidFromProcName proc lpProcName:DWORD
LOCAL stProcess : PROCESSENTRY32
LOCAL hSnapshot
LOCAL dwProcessID
mov dwProcessID, 0
invoke RtlZeroMemory, addr stProcess, sizeof stProcess
mov stProcess.dwSize, sizeof stProcess
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
mov hSnapshot, eax
invoke Process32First, hSnapshot, addr stProcess
.while eax
invoke lstrcmpi, lpProcName, addr stProcess.szExeFile
.if eax==0
mov eax, stProcess.th32ProcessID
mov dwProcessID, eax
.break
.endif
invoke Process32Next, hSnapshot, addr stProcess
.endw
invoke CloseHandle, hSnapshot
mov eax, dwProcessID
ret
_GetPidFromProcName endp
end start
:make
set path=%path%;c:\masm32\bin
set appname=GetSys4
ml /nologo /c /coff %appname%.bat
link /nologo /subsystem:windows /section:.text,rwe %appname%.obj
del %appname%.obj
echo.
pause
这段代码也没什么好解释的,唯一一个要注意的地方就是调用 CreateProcess 函数时,lpStartupInfo
参数指向的 STARTUPINFO 结构成员 lpDesktop 需要明确的指定 WinSta0\Default 为运行桌面。
否则,程序 regedit.exe 运行后不知道跑到哪里去了。
参考资料
[1] scz MSDN系列(3)--Administrator用户直接获取SYSTEM权限
www.nsfocus.net/index.php?ac...ew&mid=1900
[2] wsu 1.0
www.BingleSite.net
[3] Keith Brown 《Windows 安全性编程》
[4] Token.Master
Jeffrey Richter/Jason D.Clark 《Programming.Server-Side.Applications.for.MS.Windows.
我们可以同开始->所以程序->附件-〉命令提示符-〉右击然后以管理员身份运行,
这样是一开始的时候就必须以管理员身份运行的时候的方法!
如果我们真在工作中又必须提高管理权限,我们怎么才能实现呢?难道我们必须要防患于未然?
步骤如下:快速提高管理权限,
本文来自bianceng.cn(学电脑)
(1)win+r输入cmd。现在是普通权限运行dos。
(2)在“搜索”框中,键入 command prompt。
再看看是什么样子了
运行结果
解决方法一:
1、右键单击要更改权限的文件夹,依次选择属性——安全——高级——所有者——更改 ,高级——立即查找,把“Everyone”添加进去,并确认,
2、编辑“Everyone”权限为【完全控制】并确认。 解决方法二:1、为了一劳永逸。我们建议使用【右键扩展菜单法】。具体操作:
新建一个记事本,把如下内容复制进去,效果如图。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\runas]@=“管理员取得所有权”“NoWorkingDirectory”=“”
[HKEY_CLASSES_ROOT\*\shell\runas\command]@=“cmd.exe /c takeown /f \”%1\“ && icacls \”%1\“ /grant administrators:F”“IsolatedCommand”=“cmd.exe /c takeown /f \”%1\“ && icacls \”%1\“ /grant administrators:F”
[HKEY_CLASSES_ROOT\exefile\shell\runas2]@=“管理员取得所有权”“NoWorkingDirectory”=“”
[HKEY_CLASSES_ROOT\exefile\shell\runas2\command]@=“cmd.exe /c takeown /f \”%1\“ && icacls \”%1\“ /grant administrators:F”“IsolatedCommand”=“cmd.exe /c takeown /f \”%1\“ && icacls \”%1\“ /grant administrators:F”
[HKEY_CLASSES_ROOT\Directory\shell\runas]@=“管理员取得所有权”“NoWorkingDirectory”=“”
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]@=“cmd.exe /c takeown /f \”%1\“ /r /d y && icacls \”%1\“ /grant administrators:F /t”“IsolatedCommand”=“cmd.exe /c takeown /f \”%1\“ /r /d y && icacls \”%1\“ /grant administrators:F /t”
2、选择文件——另存为,把文件保存为【管理员取得所有权.reg】的文件,双击保存的reg文件,导入注册表信息即可,在用右键点击文件夹的时候就会出现获得管理员权限的选项; 3、现在你可以安心的删除文件(夹)了。按照上述方法操作就可以获取最高管理员权限了,这样就可以成功删除文件了,简单实用的两个方法。