Underc0de - Hacking y seguridad informática

Programación General => ASM => Mensaje iniciado por: ANTRAX en Junio 05, 2012, 04:43:46 pm

Título: [FASM] Simple Memory Code Injection
Publicado por: ANTRAX en Junio 05, 2012, 04:43:46 pm
Código: ASM
  1. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
  2. ;\\\///\\\///\\\///\\\///\\\Inyección de Código en Memoria //\\\///\\\///\\\///\\\
  3. ;\\\///\\\///\\\///\\\///\\\             [Zero]       //\\\///\\\///\\\///\\\
  4. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
  5.  
  6. Format PE GUI 4.0
  7. entry start
  8. include 'win32a.inc'
  9.  
  10. Proceso                 db 'explorer.exe',0
  11. nUser32                 db 'USER32.DLL',0
  12. nMessageBox             db 'MessageBoxA',0
  13. hProceso                dd ?
  14. DirFuncion              dd ?
  15. TamañoDatos             dd ?
  16. pInfo                   PROCESS_INFORMATION
  17. sInfo                   STARTUPINFO
  18.  
  19. start:
  20. ;Cargamos la USER32.DLL
  21. invoke LoadLibrary,nUser32
  22.  
  23. ;Obtenemos la dirección de MessageBoxA
  24. invoke GetProcAddress,eax,nMessageBox
  25. mov [mMessageBoxA],eax
  26.  
  27. ;Obtenemos la dirección de ExitProcess
  28. push    [ExitProcess]
  29. pop     [mExitProcess]
  30.  
  31. ;Creamos el Proceso
  32. invoke CreateProcessA,0,Proceso,0,0,0,CREATE_SUSPENDED,0,0,sInfo,pInfo
  33.  
  34. ;Guardamos el Handle
  35. push [pInfo.hProcess]
  36. pop [hProceso]
  37.  
  38. ;Obtenemos el tamaño e la función a inyectar
  39. mov ebx,FIN
  40. sub ebx,FuncionInyectada
  41. mov [TamañoDatos],ebx
  42.  
  43. ;Reservamos espacio en memoria para la función a inyectar
  44. invoke VirtualAllocEx,[hProceso],0,[TamañoDatos],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
  45. mov [DirFuncion],eax
  46.  
  47. ;Escribimos en memoria los datos
  48. invoke WriteProcessMemory,[hProceso],[DirFuncion],FuncionInyectada,[TamañoDatos],0
  49.  
  50. ;Creamos el hilo en el proceso
  51. invoke CreateRemoteThread,[hProceso],0,0,[DirFuncion],0,0,0
  52.  
  53. ;Salimos
  54. invoke ExitProcess,0
  55.  
  56. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
  57. ;\\\///\\\///\\\///\\\///\  Función Que se Inyecta  ///\\\///\\\///\\\///
  58. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
  59. proc FuncionInyectada
  60. ;Obtenemos la dirección de memoria donde nos estamos ejecutando
  61. pushad
  62. call delta
  63. delta:
  64. pop ebp
  65. sub ebp,delta
  66. push ebp ebp
  67. pop ebx ecx
  68.  
  69. ;Obtenemos la dirección donde se cargó el Mensaje y el TÃ*tulo
  70. add ebx,Mensaje
  71. add ecx,Titulo
  72.  
  73. ;Llamamos a MessageboxA
  74. push 0
  75. push ebx
  76. push ecx
  77. push 0
  78. call [ebp+mMessageBoxA]
  79.  
  80. ;Llamamos a ExitProcess
  81. push 0
  82. call [ebp+mExitProcess]
  83.  
  84. Titulo           db 'Code Inyectado!',0
  85. Mensaje          db 'xD',0
  86.  
  87. ;Las direcciones en memoria de las apis
  88. mMessageBoxA     dd ?
  89. mExitProcess     dd ?
  90. endp
  91. FIN:
  92. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
  93. ;\\\///\\\///\\\///\\\/// Fin Función Que se Inyecta //\\\///\\\///\\\///
  94. ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
  95.  
  96. data import
  97.     library KERNEL32,'KERNEL32.DLL'
  98.     import  KERNEL32,\
  99.             CreateProcessA,'CreateProcessA',\
  100.             CreateRemoteThread,'CreateRemoteThread',\
  101.             WriteProcessMemory,'WriteProcessMemory',\
  102.             VirtualAllocEx,'VirtualAllocEx',\
  103.             ExitProcess,'ExitProcess',\
  104.             LoadLibrary,'LoadLibraryA',\
  105.             GetProcAddress,'GetProcAddress'
  106. end data

Autor: Zero