Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include 'C:\fasm\INCLUDE\win64a.inc'
- section '.text' code readable executable
- start:
- sub RSP, 8
- mov RCX, procname ; lpApplicationName - полный путь к исполняемому модулю
- mov RDX, 0 ; lpCommandLine
- mov R8, 0 ; lpProcessAttributes
- mov R9, 0 ; lpThreadAttributes
- mov RAX, pinfo ; 10 var lpProcessInformation ptr to struct
- push RAX
- mov RAX, sinfo ; 9 var lpStartupInfo ptr to struct
- push RAX
- push 0 ; 8 var lpCurrentDirectory
- push 0 ; 7 var lpEnvironment
- mov RAX, 0x0000000000000004 ; 6 var dwCreationFlags = NORMAL_PRIORITY_CLASS
- push RAX
- push 0 ; 5 var bInheritHandles
- sub RSP, 8*4
- call [CreateProcessA]
- add RSP, 8*4
- add RSP, 8*6 ; восстанавливаем стек после пушей
- sub RSP, 8*4
- call [GetLastError]
- add RSP, 8*4
- ;
- ;mov RCX, 0
- ;mov RDX, sizeof.struct_CONTEXT
- ;mov R8, MEM_COMMIT+MEM_RESERVE
- ;mov R9, PAGE_READWRITE
- ;sub RSP, 4*8
- ;call [VirtualAlloc]
- ;add RSP, 4*8
- ;xor RAX, RAX
- ;mov EAX, 0x00100000+0x00000010+0x00000001+0x00000002+0x00000004+0x00000008+0x00000020
- ; mov [context_inf.ContextFlags], EAX
- mov RCX, [pinfo.hThread]
- mov RDX, context_inf
- sub RSP, 8*4
- call [GetThreadContext]
- add RSP, 8*4
- sub RSP, 8*4
- call [GetLastError]
- add RSP, 8*4
- ;mov RCX, 0
- ;mov RDX, msg
- ;mov R8, msg
- ;mov R9, 0
- ;sub RSP, 8*4
- ;call [MessageBoxA]
- ;add RSP, 8*4
- mov RCX, 0
- sub RSP, 8*4
- call [ExitProcess]
- add RSP, 8*4
- section '.data.' data readable writeable
- msg db 'OK!',0
- procname db 'C:\Windows\System32\svchost.exe', 0
- struct struct_CONTEXT
- P1Home dq ? ; 0
- P2Home dq ? ; 8
- P3Home dq ? ; 16
- P4Home dq ? ; 24
- P5Home dq ? ; 32
- P6Home dq ? ; 40
- ContextFlags dd ? ; 48
- MxCsr dd ? ; 52
- SegCs dw ? ; 56
- SegDs dw ? ; 58
- SegEs dw ? ; 60
- SegFs dw ? ; 62
- SegGs dw ? ; 64
- SegSs dw ? ; 66
- EFlags dd ? ; 68
- rDr0 dq ? ; 72
- rDr1 dq ? ; 80
- rDr2 dq ? ; 88
- rDr3 dq ? ; 96
- rDr6 dq ? ; 104
- rDr7 dq ? ; 112
- rRax dq ? ; 120
- rRcx dq ? ; 128
- rRdx dq ? ; 136
- rRbx dq ? ; 144
- rRsp dq ? ; 152
- rRbp dq ? ; 160
- rRsi dq ? ; 168
- rRdi dq ? ; 176
- rR8 dq ? ; 184
- rR9 dq ? ; 192
- rR10 dq ? ; 200
- rR11 dq ? ; 208
- rR12 dq ? ; 216
- rR13 dq ? ; 224
- rR14 dq ? ; 232
- rR15 dq ? ; 240
- rRip dq ? ; 248
- ;FltSave db 512 dup(0)
- FltSave db 96 dup (0)
- Header db 32 dup (0) ; 256 [16*2]
- Legacy db 128 dup (0) ; 288 [16*8]
- rXmm0 db 16 dup (0) ; 416
- rXmm1 db 16 dup (0) ; 432
- rXmm2 db 16 dup (0) ; 448
- rXmm3 db 16 dup (0) ; 464
- rXmm4 db 16 dup (0) ; 480
- rXmm5 db 16 dup (0) ; 496
- rXmm6 db 16 dup (0) ; 512
- rXmm7 db 16 dup (0) ; 528
- rXmm8 db 16 dup (0) ; 544
- rXmm9 db 16 dup (0) ; 560
- rXmm10 db 16 dup (0) ; 576
- rXmm11 db 16 dup (0) ; 592
- rXmm12 db 16 dup (0) ; 608
- rXmm13 db 16 dup (0) ; 624
- rXmm14 db 16 dup (0) ; 640
- rXmm15 db 16 dup (0) ; 656
- VectorRegister db 416 dup (0) ; 672 (26*16) ( M128A VectorRegister[26];)
- VectorControl dq ? ; 1088
- DebugControl dq ? ; 1096
- LastBranchToRip dq ? ; 1104
- LastBranchFromRip dq ? ; 1112
- LastExceptionToRip dq ? ; 1120
- LastExceptionFromRip dq ? ; 1128
- ends
- ; структура для запуска нового процесса
- struct strct_STARTUPINFOA
- cb dd ?
- _padding1 rb 4
- lpReserved dq ?
- lpDesktop dq ?
- lpTitle dq ?
- dwX dd ?
- dwY dd ?
- dwXSize dd ?
- dwYSize dd ?
- dwXCountChars dd ?
- dwYCountChars dd ?
- dwFillAttribute dd ?
- dwFlags dd ?
- wShowWindow dw ?
- cbReserved2 dw ?
- _padding2 rb 4
- lpReserved2 dq ?
- hStdInput dq ?
- hStdOutput dq ?
- hStdError dq ?
- ends ;104 byte / 8(max) = 0 OK
- ; структура 2 для запуска нового процесса
- struct strct_PROCESS_INFORMATION
- hProcess dq ?
- hThread dq ?
- dwProcessId dd ?
- dwThreadId dd ?
- ends
- sinfo strct_STARTUPINFOA
- pinfo strct_PROCESS_INFORMATION
- context_inf struct_CONTEXT
- section '.idata' import data readable writeable
- library kernel32, 'kernel32.dll',\
- User32, 'User32.dll'
- import kernel32,\
- ExitProcess,'ExitProcess',\
- CreateProcessA, 'CreateProcessA',\
- GetLastError, 'GetLastError',\
- GetThreadContext, 'GetThreadContext',\
- VirtualAlloc, 'VirtualAlloc'
- import User32,\
- MessageBoxA, 'MessageBoxA'
Add Comment
Please, Sign In to add comment