Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Inyección de código en memoria

  • 7 Respuestas
  • 8025 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Agosto 13, 2011, 12:51:52 pm »
Este source es un pedazo de el código que hice para hookear a una API, inyecta código en un nuevo hilo en un proceso, en el ejemplo puse que se ejecutara un msgbox jeje lo comenté para que se entendiera mejor.

Código: ASM
  1. Format PE GUI 4.0
  2. entry start
  3. include 'win32ax.inc'
  4.  
  5. ;@Inyección en memoria FASM           |
  6. ;  @Coder: linkgl                     |
  7. ;_____________________________________|
  8. ;Variables necesarias para el programa que va a inyectar
  9. proceso db 'c:\crackme2.exe',0
  10. linkpi PROCESS_INFORMATION <>
  11. linksi STARTUPINFO <>
  12. temp dd ?,0
  13. tempu dd ?,0
  14. tam dd ?,0
  15. handle dd ?,0
  16.  
  17.  
  18. start:
  19.   ;Creamos el proceso
  20.   invoke CreateProcessA,0,addr proceso,0,0,0,CREATE_SUSPENDED,0,0,linksi,linkpi
  21.   ;Cargamos user32.dll y sacamos la direccion virtual de MessageBoxA
  22.   invoke LoadLibrary,"user32.dll"
  23.   mov [tempu],eax
  24.   invoke GetProcAddress,[tempu],"MessageBoxA"
  25.   mov [msgbox],eax
  26.   ;Sacamos el tamaño de la funcion a inyectar restando
  27.   ;la dir en memoria de la etiqueta final menos la dir virutal
  28.   ;donde comienza la funcion
  29.   ;(la etiqueta final obviamente debe estar al final de la funcion)
  30.   mov ebx,final
  31.   sub ebx,inyectame
  32.   mov [tam],ebx
  33.   ;Reservamos el espacio en memoria del proceso
  34.   invoke VirtualAllocEx,[linkpi.hProcess],0,[tam],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
  35.   mov [handle],eax
  36.   ;Escribimos nuestra funcion en el proceso
  37.   invoke WriteProcessMemory,[linkpi.hProcess],[handle],addr inyectame,[tam],0
  38.   ;Creamos un nuevo hilo donde correra nuestro programa inyectado
  39.   invoke CreateRemoteThread,[linkpi.hProcess],0,0,[handle],0,0,0
  40.  ; invoke Sleep,3000
  41.  ;continuamos el hilo del programa normal
  42.   invoke ResumeThread,[linkpi.hThread]
  43.  ret
  44.  
  45.  proc inyectame
  46.   ;EDX = OffsetDelta
  47.   call offset
  48.   offset:
  49.   pop edx
  50.   sub edx,offset
  51.   ;Movemos el offset delta a edi y esi
  52.   mov edi,edx
  53.   mov esi,edx
  54.   ;Obtenemos la direccion de tit y msg
  55.   ;con ayuda del offsetdelta
  56.   add edi,tit
  57.   add esi,msg
  58.   ;llamamos a la funcion msgbox
  59.   push 0
  60.   push edi
  61.   push esi
  62.   push 0
  63.   call [edx+msgbox]
  64.   ret
  65.  
  66.   msgbox dd ?  ;Dirección MessageBox
  67.   tit db "Inyectado",0
  68.   msg db "Ya me inyecte",0
  69.   endp
  70.   final:
  71. data import
  72.   library kernel32,'kernel32.dll'
  73.   import kernel32,CreateProcessA,'CreateProcessA',\
  74.   GetProcAddress,'GetProcAddress',\
  75.   VirtualAllocEx,'VirtualAllocEx',\
  76.   WriteProcessMemory,'WriteProcessMemory',\
  77.   CreateRemoteThread,'CreateRemoteThread',\
  78.   LoadLibrary,'LoadLibraryA',\
  79.   ResumeThread,'ResumeThread'
  80. end data
« Última modificación: Agosto 13, 2011, 12:55:00 pm por ANTRAX »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5478
  • Actividad:
    8.33%
  • Reputación 35
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Agosto 13, 2011, 12:54:28 pm »
Que buen aporte man!
Te modifique un poco el post para que el code se vea mejor!
Segui asi!


Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Agosto 13, 2011, 01:06:59 pm »
Dale, edita lo que veas necesario ;), pondré las etiquetas code con el lenguaje que use desde ahora xDD

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5478
  • Actividad:
    8.33%
  • Reputación 35
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #3 en: Agosto 13, 2011, 01:09:29 pm »
Se ve muy bonito el code, Te debe haber llevado mucho trabajo. En especial si esta en ASM...


Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Agosto 13, 2011, 01:12:18 pm »
Jeje naah, de hecho es la parte fácil lo que sí me rompió un poco las pelotas fue el API Hooking que es lo que viene después de la inyección pues jamás había hecho uno jeje luego comparto el código igual no es muy difícil de entender

Desconectado sathe

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Skype: walter-morel@hotmail.com
« Respuesta #5 en: Enero 16, 2017, 03:31:10 pm »
Que interesante se ve, algún día quiero llegar a saber bastante sobre programación, como ustedes :)

Desconectado abrandon

  • *
  • Underc0der
  • Mensajes: 3
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Enero 23, 2018, 01:43:05 am »
Excelente aporte! espero que despues de completar el estudio en ASM pueda entenderlo.

Conectado Kirari

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    18.33%
  • Reputación 4
  • No dejes que el mundo te corrompa
    • Ver Perfil
    • Baúl para el público
« Respuesta #7 en: Mayo 01, 2019, 01:51:42 pm »
Muy excelente aporte, lo probaré. Y aunque me he metido hace poco en este lenguaje, quiero ver como funciona, será muy interesante. Graciaas!
Jamás te contarán la verdadera versión, siempre te dirán la suya... Por eso... Si quieres saber la verdad, debes buscarla tú mismo...

 

¿Te gustó el post? COMPARTILO!