Página 1 de 1

[duda] ASM inline

Publicado: 15 Oct 2012, 16:33
por s7evin
(ya sé que estoy muy pesado con el tema de las estructuras PE...)

Llevo días peleandome y buscando por Internet, pero no encuentro nada que me sirva..
La cosa está en que quiero meter un instrucción de salto dentro de un ejecutable (Ejecutamos salta al PE donde habrá el JMP al EP original [EP+0x200 alineados]).

1o- Cargo la cabecera PE.
2o- Amplio la sección de código 0x200 bytes.
3o- Actualizo la cabecera de la sección modificada (SizeOfRawData)
4o- Me posiciono en el EP para "inyectar" la instrucción JMP.

Y aquí me pierdo, puesto que no se como pasarle al ASM la variable que contiene la nueva posición del EP (EP + 0x200 alineados).
He visto algún ejemplo por Internet, tal que así:

Código: Seleccionar todo

__asm(
    "movl %eax, %0;" : "=r" (dwOEP)
    "jmp %eax"
    );
Pero ni compila (Dev-Cpp: "Expected primary-expression before asm")
Además si lo pongo suelto en mitad del código eso lo ejecutará, mientras que lo que quiero hacer es "inyectarlo" al ejecutable...

Brrrr... entr ASM (poca idea tengo) y los PE, es de locos

Bueno a ver si alguien puede guiarme un poco :P

Re: [duda] ASM inline

Publicado: 17 Dic 2012, 01:10
por linkgl
Estem, tal vez estoy perdido y oxidado pero porqué no usas writeprocessmemory para sobreescribir el EntryPoint si estás trabajando en runtime, y si el programa al que le estás haciendo esto no está corriendo porqué no lo sobreescribes directamente con fwrite ¿? jeje XD

Re: [duda] ASM inline

Publicado: 17 Dic 2012, 02:17
por orlando9427
Supongo que harás infección de PE.
Solo sustituye el EP a la dirección donde comienza tu código, al terminar tu código has un salto a EP Original con OPCodes.

Código: Seleccionar todo

48 c7 c0 35 08 40 00 | mov rax, 0x00400835
ff e0                | jmp rax
Siendo los últimos 4 bytes (DWORD) de la primera instrucción la dirección del entrypoint.
Te recomiendo que cargues el archivo en un buffer, modifiques los datos con la cabecera PE y luego hagas un volcado de nuevo a disco
Saludos!

Re: [duda] ASM inline

Publicado: 17 Dic 2012, 02:31
por linkgl
y si lo que buscas es hacer un loader, modifica con writeprocessmemory acá hice algunos ejemplos hace mucho de modificar direcciones en memoria en runtime para un crackme que no me permitía modificar el archivo, la única opción era modificarlo en memoria:
viewtopic.php?f=102&t=33562&p=311950&hi ... er#p311950
viewtopic.php?f=35&t=33638&p=312689&hil ... er#p312689

Pero creo que lo que buscas es nomas es hacer lo que dice orlando, llenar las estructuras PE, modificar el entry point a EP+0x200 y luego volcarlo al disco XD no es necesario al final hacer un salto de regreso si no inyectaste nada