Autor
|
Tema: Crear un PE Editor simple.. (Leído 11,885 veces)
|
demoniox12
Desconectado
Mensajes: 204
El conocimiento es poder
|
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
|
|
|
~~
|
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
Mensajes: 204
El conocimiento es poder
|
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
|
|
|
~~
|
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 ) Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal cLen As Long) Private Sub Form_Load() MsgBox "El EOF está en el byte: " & GetEOF("C:\file.exe") End End Sub Function GetEOF(Path As String) As Long Dim ByteArray() As Byte Dim PE As Long, NumberOfSections As Integer Dim BeginLastSection As Long Dim RawSize As Long, RawOffset As Long Open Path For Binary As #1 ReDim ByteArray(LOF(1) - 1) Get #1, , ByteArray Close #1 Call CopyMemory(PE, ByteArray(&H3C), 4) Call CopyMemory(NumberOfSections, ByteArray(PE + &H6), 2) BeginLastSection = PE + &HF8 + ((NumberOfSections - 1) * &H28) Call CopyMemory(RawSize, ByteArray(BeginLastSection + 16), 4) Call CopyMemory(RawOffset, ByteArray(BeginLastSection + 20), 4) GetEOF = RawSize + RawOffset End Function
En cuanto al ejemplo en ASM que comentaba: (FASM) ; **************************************************************************** ; *** Código que amplía 0xFF bytes la última sección de un ejecutable. *** ; *** *** ; *** -> Le sumamos al raw size de la última sección el tamaño que *** ; *** queremos ampliarla. *** ; *** -> Le sumamos al virtual size el SectionAlignment. *** ; *** -> Le sumamos al SizeOfImage el tamaño que queremos ampliar la *** ; *** última sección y guardamos el archivo. *** ; **************************************************************************** include 'H:\archivos de programa\fasm\include\win32ax.inc' .code start: ; Usamos la pila para gurdar nuestras variables sub esp, 20 ; [esp+0] -> El handle del archivo ; [esp+4] -> Handle del archivo mapeado ; [esp+8] -> Lo que sería el "ImageBase" del archivo proyectado ; [esp+12] -> SectionAligement ; [esp+16] -> NumberOfSections ; Sobran dos bytes por el alineamiento de la pila ; Mapeamos el archivo en memoria con 40 bytes de más invoke CreateFile, ruta, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_WRITE+FILE_SHARE_READ, 0, OPEN_EXISTING, 0,0 mov dword[esp], eax invoke GetFileSize, eax, 0 add eax, 0x2600 ; <--- Tamaño a ampliar mov esi, dword[esp] invoke CreateFileMapping, esi, 0, PAGE_READWRITE, 0, eax, 0 mov [esp+4], eax invoke MapViewOfFile, eax, FILE_MAP_ALL_ACCESS, 0, 0, 0 mov [esp+8], eax ; Obtenemos los datos necesarios del PE mov ebx, dword[eax+0x3C] ; EBX = Signature mov edi, dword[eax+0x3C] ; Guardamos también en edi la posición del signature para usarla luego add ebx, eax add edi, eax add dword[ebx+0x50], 0xFF ; Le sumamos al SizeOfImage el tamaño a ampliar mov eax, dword[ebx+0x38] mov [esp+12], eax mov ax, word[ebx+0x6] mov [esp+16], ax ; Obtenemos los datos necesarios de la última sección mov ax, word[esp+16] dec eax mov edx, 0x28 mul edx add edi, eax add edi, 248 ; 248 = Tamaño OptionalHeader add dword[edi+16], 0xFF ; Le sumamos al RawSize el tamaño a ampliar mov eax, dword[esp+12] add dword[edi+8], eax ; Le sumamos al VirtualSize el SectionAlignment ; Liberamos memoria, cuadramos la pila y salimos mov esi, esp invoke CloseHandle, dword[esi] invoke CloseHandle, dword[esi+4] invoke UnmapViewOfFile, dword[esi+8] add esp, 20 invoke ExitProcess, 0 ruta db 'H:\h.exe', 0 ; La ruta del archivo a tratar .end start
Salu2
|
|
|
En línea
|
|
|
|
demoniox12
Desconectado
Mensajes: 204
El conocimiento es poder
|
(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
|
|
|
~~
|
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)
|
|
« Última modificación: 8 Octubre 2008, 18:11 pm por E0N »
|
En línea
|
|
|
|
demoniox12
Desconectado
Mensajes: 204
El conocimiento es poder
|
RellenarPE (App.Path & "\Stub.exe") 'Relleno PE Stub rawoffsetS = Hex(ish(UBound(ish)).PointerToRawData) 'raw offset + rawsizeS = Hex(ish(UBound(ish)).SizeOfRawData) 'raw size = punto que empieza el otro codigo (finaliza el exe) virtualsizeS = Hex(ish(UBound(ish)).VirtualSize) sizeofimageS = Hex(inh.OptionalHeader.SizeOfImage) sectionalignmentS = Hex(inh.OptionalHeader.SectionAlignment) RellenarPE (Text1.Text) 'Relleno Archivo sizeofimageA = Hex(inh.OptionalHeader.SizeOfImage) tamArchivo = FileLen(Text1.Text) rawsizeM = tamArchivo + HexToDec(rawsizeS) sizeofimageM = tamArchivo + HexToDec(sizeofimageS) virtualsizeM = HexToDec(virtualsizeS) + HexToDec(sectionalignmentS) ish(UBound(ish)).SizeOfRawData = CLng("&H" & DecToHex(rawsizeM)) ish(UBound(ish)).VirtualSize = CLng("&H" & DecToHex(virtualsizeM)) inh.OptionalHeader.SizeOfImage = CLng("&H" & DecToHex(sizeofimageM))
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
|
|
|
~~
|
Lo primero, por que obtienes los valores en hexadecimal y luego los pasas a decimal con HexToDec para sumarlos?? 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
Mensajes: 204
El conocimiento es poder
|
Lo primero, por que obtienes los valores en hexadecimal y luego los pasas a decimal con HexToDec para sumarlos?? 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
|
|
|
~~
|
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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Algun editor de videos simple (Novato)
Multimedia
|
Dacan
|
4
|
4,894
|
14 Marzo 2011, 22:52 pm
por Dacan
|
|
|
Crear un simple hack ayuda!!
Windows
|
bxanditox
|
4
|
4,361
|
25 Enero 2012, 23:10 pm
por bxanditox
|
|
|
como crear un bot simple???
Programación General
|
bolbal
|
0
|
2,254
|
26 Enero 2013, 00:20 am
por bolbal
|
|
|
Crear un bot de navegacion simple
Programación General
|
buenoacaestamos
|
5
|
2,956
|
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
|
5 Enero 2016, 21:49 pm
por RevolucionVegana
|
|