PE mas PEqueños..

Iniciado por Vaagish, 7 Mayo 2014, 21:10 PM

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

Vaagish

CitarEl 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

Citar¿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!

Eternal Idol

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 ...
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

Citars 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??

CitarVos 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!

x64core

Cita de: Vaagish en  9 Mayo 2014, 21:07 PM
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 :)

Cita de: Eternal Idol en  9 Mayo 2014, 21:08 PM
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.



Eternal Idol

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.
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

Citarcon /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?

Citar.data?
   _Wsadata       WSADATA <>
   _Sockaddrin      sockaddr_in <>
   _Processinfo   PROCESS_INFORMATION <>
   _StartupinfoA   STARTUPINFOA <>

cpu2

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.

Código (asm) [Seleccionar]
.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.

Eternal Idol

Cita de: Vaagish en  9 Mayo 2014, 21:53 PMPero lo estropea, no?

En el entorno que mencione si, no me funciona.

Cita de: Vaagish en  9 Mayo 2014, 21:53 PMYo 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.
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

#18
Cita de: Eternal Idol en  9 Mayo 2014, 21:41 PM
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...

Eternal Idol

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).
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