elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Crear un PE Editor simple..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Crear un PE Editor simple..  (Leído 11,885 veces)
demoniox12

Desconectado Desconectado

Mensajes: 204


El conocimiento es poder


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #10 en: 7 Octubre 2008, 04:04 am »

Hola!! una duda.. que hay que modificar del PE Header para que los datos que se le agregan al final de un exe sean parte de la info del exe, o sea como si fuera parte de la ultima sección... intente modificar unicamente el rawsize de la ultima sección y el imagesize pero me dejo el exe inservible..

Saludos!

PD: yo lo que quiero hacer es meter un exe cifrado dentro del stub, entonces yo lo que hago es:

abro el stub, obtengo rawsize, virtualsize y size of image, luego abro el archivo a cifrar y obtengo los mismos datos entonces sumo el rawsize del stub + el rawsize del archivo y lo pongo como rawsize del archivo final, con virtualsize lo aumento en 1000 hasta que virtualsize < rawsize, y luego con size of image sumo las 2 size of image y se lo pongo al archivo final y listo
pero me deja el archivo inservible..


« Última modificación: 7 Octubre 2008, 06:01 am por demoniox12 » En línea

By Demoniox
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #11 en: 7 Octubre 2008, 15:48 pm »

Hice hace algún tiempo un código en asm para ampliar la última sección, si lo quieres pídelo. El mecanismo es este:

  • Le sumas al raw size  de  la  última  sección el tamaño que quieres ampliarla.
  • Le sumas al virtual size el SectionAlignment.
  • Le sumas al  SizeOfImage  el tamaño que quieres ampliar la  última sección y guardas el archivo.

Salu2


En línea

demoniox12

Desconectado Desconectado

Mensajes: 204


El conocimiento es poder


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #12 en: 7 Octubre 2008, 17:13 pm »

Hice hace algún tiempo un código en asm para ampliar la última sección, si lo quieres pídelo. El mecanismo es este:

  • Le sumas al raw size  de  la  última  sección el tamaño que quieres ampliarla.
  • Le sumas al virtual size el SectionAlignment.
  • Le sumas al  SizeOfImage  el tamaño que quieres ampliar la  última sección y guardas el archivo.

Salu2

a ver, adaptando eso a mi necesid, al rawsize del archivo final le sumo el filelen() (2,56 bytes -> 1 del pe header no? o bien le sumo el imagesize del archivo a cifrar?) del archivo a cifrar, al virtual size del archivo final le sumo el section alignment del archivo a cifrar y en sizeofimage, tambien le sumo la misma cantidad que a rawsize.
asi?

Saludos! y muchas gracias!

PD: seria bueno ver el ejemplo que comentas.
« Última modificación: 7 Octubre 2008, 17:15 pm por demoniox12 » En línea

By Demoniox
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #13 en: 8 Octubre 2008, 17:07 pm »

A ver, para aclarar conceptos le llamaremos "stub" al stub del crypter y "archivo a cifrar" al archivo que quieres meter a continuación del stub cifrado y listo para que el stub lo desencripte y ejecute ok?

(1) Al raw size de la última sección del stub le sumas el tamaño del archivo a cifrar.
(2) Al virtual size de la última sección del stub le sumas el Section Aligement.
(3) Al size of image del stub le sumas el tamaño del archivo a cifrar.
(4) Pones el archivo a cifrar a continuación del stub y todo listo.

Así tiene que funcionarte perfectamente, luego solo te queda extraer el archivo a cifrar del stub, que puedes saber donde empieza calculando cuanto ocupa el stub a partir del PE, te dejo una función: (No uso las estructuras en esta función por que me la pidieron hace tiempo y no me apetecia postear todo el módulo, pero la puedes adaptar fácilmente si quieres ;))

Código
  1. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal cLen As Long)
  2.  
  3. Private Sub Form_Load()
  4.    MsgBox "El EOF está en el byte: " & GetEOF("C:\file.exe")
  5.    End
  6. End Sub
  7.  
  8. Function GetEOF(Path As String) As Long
  9.  
  10.    Dim ByteArray() As Byte
  11.    Dim PE As Long, NumberOfSections As Integer
  12.    Dim BeginLastSection As Long
  13.    Dim RawSize As Long, RawOffset As Long
  14.  
  15.    Open Path For Binary As #1
  16.        ReDim ByteArray(LOF(1) - 1)
  17.        Get #1, , ByteArray
  18.    Close #1
  19.  
  20.    Call CopyMemory(PE, ByteArray(&H3C), 4)
  21.    Call CopyMemory(NumberOfSections, ByteArray(PE + &H6), 2)
  22.    BeginLastSection = PE + &HF8 + ((NumberOfSections - 1) * &H28)
  23.    Call CopyMemory(RawSize, ByteArray(BeginLastSection + 16), 4)
  24.    Call CopyMemory(RawOffset, ByteArray(BeginLastSection + 20), 4)
  25.    GetEOF = RawSize + RawOffset
  26.  
  27. End Function

En cuanto al ejemplo en ASM que comentaba: (FASM)

Código
  1. ; ****************************************************************************
  2. ; ***  Código que amplía 0xFF bytes la última sección de un ejecutable.    ***
  3. ; ***                                                                      ***
  4. ; ***    -> Le sumamos al raw size  de  la  última  sección el tamaño que  ***
  5. ; ***       queremos ampliarla.                                            ***
  6. ; ***    -> Le sumamos al virtual size el SectionAlignment.                ***
  7. ; ***    -> Le sumamos al  SizeOfImage  el tamaño que queremos ampliar la  ***
  8. ; ***       última sección y guardamos el archivo.                         ***
  9. ; ****************************************************************************
  10.  
  11. include 'H:\archivos de programa\fasm\include\win32ax.inc'
  12.  
  13. .code
  14. start:
  15. ; Usamos la pila para gurdar nuestras variables
  16. sub esp, 20
  17. ; [esp+0]  -> El handle del archivo
  18. ; [esp+4]  -> Handle del archivo mapeado
  19. ; [esp+8]  -> Lo que sería el "ImageBase" del archivo proyectado
  20. ; [esp+12] -> SectionAligement
  21. ; [esp+16] -> NumberOfSections
  22. ; Sobran dos bytes por el alineamiento de la pila
  23.  
  24. ; Mapeamos el archivo en memoria con 40 bytes de más
  25. invoke CreateFile, ruta, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_WRITE+FILE_SHARE_READ, 0, OPEN_EXISTING, 0,0
  26. mov dword[esp], eax
  27. invoke GetFileSize, eax, 0
  28. add eax, 0x2600 ; <--- Tamaño a ampliar
  29. mov esi, dword[esp]
  30. invoke CreateFileMapping, esi, 0, PAGE_READWRITE, 0, eax, 0
  31. mov [esp+4], eax
  32. invoke MapViewOfFile, eax, FILE_MAP_ALL_ACCESS, 0, 0, 0
  33. mov [esp+8], eax
  34.  
  35. ; Obtenemos los datos necesarios del PE
  36. mov ebx, dword[eax+0x3C] ; EBX = Signature
  37. mov edi, dword[eax+0x3C] ; Guardamos también en edi la posición del signature para usarla luego
  38. add ebx, eax
  39. add edi, eax
  40.  
  41. add dword[ebx+0x50], 0xFF ; Le sumamos al SizeOfImage el tamaño a ampliar
  42. mov eax, dword[ebx+0x38]
  43. mov [esp+12], eax
  44. mov ax, word[ebx+0x6]
  45. mov [esp+16], ax
  46.  
  47. ; Obtenemos los datos necesarios de la última sección
  48. mov ax, word[esp+16]
  49. dec eax
  50. mov edx, 0x28
  51. mul edx
  52. add edi, eax
  53. add edi, 248 ; 248 = Tamaño OptionalHeader
  54.  
  55. add dword[edi+16], 0xFF ; Le sumamos al RawSize el tamaño a ampliar
  56. mov eax, dword[esp+12]
  57. add dword[edi+8], eax ; Le sumamos al VirtualSize el SectionAlignment
  58.  
  59.  
  60. ; Liberamos memoria, cuadramos la pila y salimos
  61. mov esi, esp
  62. invoke CloseHandle, dword[esi]
  63. invoke CloseHandle, dword[esi+4]
  64. invoke UnmapViewOfFile, dword[esi+8]
  65. add esp, 20
  66. invoke ExitProcess, 0
  67.  
  68.  
  69.  
  70. ruta db 'H:\h.exe', 0 ; La ruta del archivo a tratar
  71.  
  72. .end start
  73.  

Salu2
En línea

demoniox12

Desconectado Desconectado

Mensajes: 204


El conocimiento es poder


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #14 en: 8 Octubre 2008, 17:54 pm »


(1) Al raw size de la última sección del stub le sumas el tamaño del archivo a cifrar.
(2) Al virtual size de la última sección del stub le sumas el Section Aligement.
(3) Al size of image del stub le sumas el tamaño del archivo a cifrar.
(4) Pones el archivo a cifrar a continuación del stub y todo listo.


Muchas gracias, una ultima cosa que no me quedo en claro, yo obtengo el rawsize de la ultima sección del stub, lo paso a hex, y de hexadecimal a decimal y ahi le sumo el filelen() del archivo a cifrar?

Saludos!
« Última modificación: 8 Octubre 2008, 18:15 pm por demoniox12 » En línea

By Demoniox
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #15 en: 8 Octubre 2008, 18:03 pm »

Lo que tienes que hacer es sumar o en hexadecimal los dos o en decimal los dos (VB te devuelve los números en decimal, así que súmalos así) recuerda que decimal y hexadecimal no son más que formas de representar números binarios (ceros y unos) :P
« Última modificación: 8 Octubre 2008, 18:11 pm por E0N » En línea

demoniox12

Desconectado Desconectado

Mensajes: 204


El conocimiento es poder


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #16 en: 8 Octubre 2008, 18:09 pm »

Código
  1.    RellenarPE (App.Path & "\Stub.exe") 'Relleno PE Stub
  2.    rawoffsetS = Hex(ish(UBound(ish)).PointerToRawData)  'raw offset +
  3.    rawsizeS = Hex(ish(UBound(ish)).SizeOfRawData)  'raw size = punto que empieza el otro codigo (finaliza el exe)
  4.    virtualsizeS = Hex(ish(UBound(ish)).VirtualSize)
  5.    sizeofimageS = Hex(inh.OptionalHeader.SizeOfImage)
  6.    sectionalignmentS = Hex(inh.OptionalHeader.SectionAlignment)
  7.  
  8.    RellenarPE (Text1.Text) 'Relleno Archivo
  9.    sizeofimageA = Hex(inh.OptionalHeader.SizeOfImage)
  10.  
  11.    tamArchivo = FileLen(Text1.Text)
  12.    rawsizeM = tamArchivo + HexToDec(rawsizeS)
  13.    sizeofimageM = tamArchivo + HexToDec(sizeofimageS)
  14.    virtualsizeM = HexToDec(virtualsizeS) + HexToDec(sectionalignmentS)
  15.  
  16.  
  17.    ish(UBound(ish)).SizeOfRawData = CLng("&H" & DecToHex(rawsizeM))
  18.    ish(UBound(ish)).VirtualSize = CLng("&H" & DecToHex(virtualsizeM))
  19.    inh.OptionalHeader.SizeOfImage = CLng("&H" & DecToHex(sizeofimageM))
  20.  

compruebo con el StudPE y se modifican todo bien y el peso queda todo bien pero me sigue dando error win32 aplicacion no valida
En línea

By Demoniox
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #17 en: 8 Octubre 2008, 18:19 pm »

Lo primero, por que obtienes los valores en hexadecimal y luego los pasas a decimal con HexToDec para sumarlos??  :xD :xD

Lo segundo, pones el archivo a cifrar a continuación del stub o en su caso rellenas los bytes necesarios?? Por que si no te va a dar error xD

Y bueno no se que más decirte, por el trozo de código que pones parece que está bien, haz pruebas con el código en ensamblador que te he pasado (espero que no se me haya olvidado ningún paso) por que tiene que funcionar ;)
En línea

demoniox12

Desconectado Desconectado

Mensajes: 204


El conocimiento es poder


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #18 en: 8 Octubre 2008, 18:27 pm »

Lo primero, por que obtienes los valores en hexadecimal y luego los pasas a decimal con HexToDec para sumarlos??  :xD :xD

Lo segundo, pones el archivo a cifrar a continuación del stub o en su caso rellenas los bytes necesarios?? Por que si no te va a dar error xD

Y bueno no se que más decirte, por el trozo de código que pones parece que está bien, haz pruebas con el código en ensamblador que te he pasado (espero que no se me haya olvidado ningún paso) por que tiene que funcionar ;)

jeje bueno pekeño error xD pero igual, si, relleno los bytes necesarios, hago los calculos luego de que ya tengo el archivo final (todo cifrado y el stub) y le cambio el PE Header, he probado restandole 1 byte y con el StudPE me aparece extra dat, sin restarle no aparece o sea que si lo toma todo como la ultima sección. as que no se :S

Saludos!
En línea

By Demoniox
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Crear un PE Editor simple..
« Respuesta #19 en: 8 Octubre 2008, 18:53 pm »

Pues yo si que no se como no pongas más código jajaja Prueba a hacerlo con el código en ensamblador que te e puesto a ver si también te falla o no, pero no debería. Si mañana saco un rato y no lo has solucionado te hago un ejemplo simple :P
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Algun editor de videos simple (Novato)
Multimedia
Dacan 4 4,894 Último mensaje 14 Marzo 2011, 22:52 pm
por Dacan
Crear un simple hack ayuda!!
Windows
bxanditox 4 4,361 Último mensaje 25 Enero 2012, 23:10 pm
por bxanditox
como crear un bot simple???
Programación General
bolbal 0 2,254 Último mensaje 26 Enero 2013, 00:20 am
por bolbal
Crear un bot de navegacion simple
Programación General
buenoacaestamos 5 2,956 Último mensaje 4 Marzo 2015, 00:45 am
por T. Collins
Crear un mensaje simple en pantalla en javascript? « 1 2 »
Desarrollo Web
RevolucionVegana 10 5,875 Último mensaje 5 Enero 2016, 21:49 pm
por RevolucionVegana
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines