Autor
|
Tema: PE mas PEqueños.. (Leído 14,324 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
El código dentro de un .mp3 seria entonces la imagen PE o sólo el código? Sino pues apostaria a generar una shellcode. Además es la cadena "cmd.exe" constante? de ser así puede ir en rdata definiendola como constante así el compilador no la agregaria en .data. Vos decís de meter los opcodes dentro del mp3? Se podria, no? Igual quiero tener un ejecutable "a mano" por las dudas,, para poder hacer otras cosas con el.. y siempre lo podría pasar a opcode.. Mal yo: (ando distraído hoy) la sección que me deja juntar es la .rdata y no .data como dije hoy.. la cadena es constante si.. pensé en hacer algo así: .cadena: db "cmd.exe", 0 ¿Cómo Filealignament pudo joder el ejecutable? No me referia a dejarlo a cero... se puede modificar si es mayor de 0x200. Por ahi lei a otros que tenian el mismo problema,, a mi con align:16 me lo redujo 10 bytes, no es mucho pero suma.. y con align:4 lo redujo 12 bytes.. me gustaria mantener la portabilidad.. asi que si no funciona en win7 x64, no lo uso... Saludos!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Con /align:512:
eax=77452070 ebx=7745206c ecx=00000001 edx=7745206c esi=7efde000 edi=7efdd000 eip=77395321 esp=0018fcb8 ebp=0018fd00 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!_LdrpInitialize+0x73: 77395321 e8ab1c0000 call ntdll!LdrpInitializeProcess (77396fd1)
0:000> p eax=c0000018 ebx=7745206c ecx=761b4fc4 edx=00000000 esi=7efde000 edi=7efdd000 eip=77395326 esp=0018fcc0 ebp=0018fd00 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
0:000> !error c0000018 Error code: (NTSTATUS) 0xc0000018 (3221225496) - {Conflicting Address Range} The specified address range conflicts with the address space.
Viene de ntdll!LdrpWx86FormatVirtualImage, a su vez de ntdll!Wow64LdrpWx86FormatVirtualImage y por ntdll!LdrpWx86DetectSectionOverlap. Es un programa de 32 bits en un Windows 7 de x64 ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
s un programa de 32 bits en un Windows 7 de x64 ... Pero debería funcionar.., igual no entiendo.. con align 512 no queda mas grande?? Vos decís de meter los opcodes dentro del mp3? Se podria, no? Me cite a mi mismo para preguntar.. igual tendria que tener la cabecera MZ y todo lo correspondiente a un ejecutable en opcodes,, seria como la imagen al final... Salute!
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Vos decís de meter los opcodes dentro del mp3? Se podria, no? Igual quiero tener un ejecutable "a mano" por las dudas,, para poder hacer otras cosas con el.. y siempre lo podría pasar a opcode.. Mal yo: (ando distraído hoy) la sección que me deja juntar es la .rdata y no .data como dije hoy.. la cadena es constante si.. pensé en hacer algo así:
.cadena: db "cmd.exe", 0 Por ahi lei a otros que tenian el mismo problema,, a mi con align:16 me lo redujo 10 bytes, no es mucho pero suma.. y con align:4 lo redujo 12 bytes.. me gustaria mantener la portabilidad.. asi que si no funciona en win7 x64, no lo uso...
Saludos!
Pues habria que ver cual es tu idea si esperas que los opcodes sean ejecutados como instrucciones habria que pensarlo Con /align:512:
eax=77452070 ebx=7745206c ecx=00000001 edx=7745206c esi=7efde000 edi=7efdd000 eip=77395321 esp=0018fcb8 ebp=0018fd00 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!_LdrpInitialize+0x73: 77395321 e8ab1c0000 call ntdll!LdrpInitializeProcess (77396fd1)
0:000> p eax=c0000018 ebx=7745206c ecx=761b4fc4 edx=00000000 esi=7efde000 edi=7efdd000 eip=77395326 esp=0018fcc0 ebp=0018fd00 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
0:000> !error c0000018 Error code: (NTSTATUS) 0xc0000018 (3221225496) - {Conflicting Address Range} The specified address range conflicts with the address space.
Viene de ntdll!LdrpWx86FormatVirtualImage, a su vez de ntdll!Wow64LdrpWx86FormatVirtualImage y por ntdll!LdrpWx86DetectSectionOverlap. Es un programa de 32 bits en un Windows 7 de x64 ...
Pero /align establece SectionAlignment no FileAlignment. - El SectionAlignment no altera absolutamente en nada la imagen PE respecto al tamaño este tiene otra relación sobre la carga de la imagen. Me refiero a FileAlignment ya que algunos compiladores agregan un valor mayor a 0x200 de ser así es posible modificarlo sino problemas de alineamiento de datos como suele pasar en x64.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ah, me confundi con el otro alignment entonces (en realidad nunca use el que mencionas vos), pero si afecta al tamaño, con /align:4 mi misero ejecutable tiene 592 bytes.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
con /align:4 mi misero ejecutable tiene 592 bytes. Pero lo estropea, no? Yo ahora lo deje en 1.34Kb, y creo que no le puedo ganar mucho mas.. aun hay mucho db 00 .. pero tengo declaradas 4 estructuras.. calculo que es ese el espacio.. o es un bolazo eso? .data? _Wsadata WSADATA <> _Sockaddrin sockaddr_in <> _Processinfo PROCESS_INFORMATION <> _StartupinfoA STARTUPINFOA <>
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Puedes colocar la cadena "cmd.exe" incluso en .text, siempre y cuando no escribas en ella, y se ejecute, por que genera un bad opcode. .section .text .globl _start .cadena: db "cmd.exe", 0 _start: // code
Asi te puedes ahorrar alguna section, eso se usa para las shellcodes. Un saludo.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Pero lo estropea, no? En el entorno que mencione si, no me funciona. Yo ahora lo deje en 1.34Kb, y creo que no le puedo ganar mucho mas.. aun hay mucho db 00 .. pero tengo declaradas 4 estructuras.. calculo que es ese el espacio.. o es un bolazo eso? Depende, investiga con dumpbins (/headers, /all, /disasm, etc.) como va quedando tu ejecutable.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Ah, me confundi con el otro alignment entonces (en realidad nunca use el que mencionas vos), pero si afecta al tamaño, con /align:4 mi misero ejecutable tiene 592 bytes.
Esta bien, estaba viendo eso de SectionAlignment ya que teoricamente y logicamente no deberia afectar el tamaño de la imagen y noté que es afectada ya que FileAlignment no puede ser mayor a SectionAlignment por obvias razones y por eso FileAlignment es alterado también. Además estaba en VC++ y nisiquiera me deja compilar con Align:4 lo min es Align:16... link.exe... Por cierto, lo min valido en Winx64 fue de 1024 bytes alguien da menos ^^ Estoy viendo si lo hago manualmente puede que talvez reduzca algunos bytes...
|
|
« Última modificación: 9 Mayo 2014, 22:33 pm por x64Core »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Claro, aunque en realidad todos estos son parametros para el enlazador - el/los obj tienen todas las secciones y el enlazador puede mezclarlas por ej. - y en principio se usa el mismo (linker.exe).
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
|