Páginas: [1] 2 3 4
|
 |
|
Autor
|
Tema: Practica: Modificando un PE a mano e inyectando codigo (Leído 1716 veces)
|
|
Hendrix
|
Bueno, me a dado por hacer esto esta tarde y e conseguido a mano cambiar el entry point del ejecutable mediante cambios en los opcodes del ejecutable en disco, e echo que me saltase a una region de la sección .txt que estaba vacia....y consegui inyectar dentro de esto unos cuantos opcodes, pero el espacio es limitado....y segun tengo entendido, el codigo solo puede ir dentro de la sección .txt, asi que, hay algun metodo (en C/C++ o en otro lengauje, da igual) para reservar mas espacio en la sección .txt?? ya que no me quiero cargar el ejecutable, solo inyectar codigo en el ejecutable en disco. PD: lo de cambiar el entry e inyectar codigo en la sección .txt sin substituir ningun opcode necesario lo e echo en VB..esto ya de por si tiene merito  aunque una vez pueda portarlo lo portare o a C++ o a C#. Please, help me.  Un Saludo. 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
sch3m4
Colaborador
Desconectado
Mensajes: 1.534
Nihil est in intelectu quod prius not fuerit insen
|
No estoy muy puesto en el tema de la estructura de ejecutables, pero si escribes al final del ejecutable, el fichero funciona corréctamente, es decir, que si le añades tu código al final del ejecutable, en el entry point, le metes un salto a la dirección en la que empieza tu código, se ejecutará. Pero al final has de hacer otro salto a la dirección del archivo en la que comienza el código del propio ejecutable para que también se ejecute. Se pueden hacer muchas cosas con esto 
|
|
|
|
|
En línea
|
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.267
|
y tb puedes escribir en otras secciones no necesariamente en text, puedes hasta añadirle tu propia sección a la cabecera y meter codigo.
|
|
|
|
|
En línea
|
|
|
|
|
Hendrix
|
No estoy muy puesto en el tema de la estructura de ejecutables, pero si escribes al final del ejecutable, el fichero funciona corréctamente, es decir, que si le añades tu código al final del ejecutable, en el entry point, le metes un salto a la dirección en la que empieza tu código, se ejecutará. Pero al final has de hacer otro salto a la dirección del archivo en la que comienza el código del propio ejecutable para que también se ejecute. Se pueden hacer muchas cosas con esto  Esto no se puede, lo intente y se sale de memoria, es decir, es archivo que se carga en memoria se carga hasta un cierto punto, si le digo que salte a una region donde en teoria no tiene que haber codigo se sale de la memoria. y tb puedes escribir en otras secciones no necesariamente en text, puedes hasta añadirle tu propia sección a la cabecera y meter codigo.
Si, eso lo vi, intentare hacerlo....  Gracias a los 2 por responder 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
|
Hendrix
|
Por cierto Mek, sabes la api usada para crear la nueva sección??? es que hace unos dias lo busque y lo encontre, y ahora no lo encuentro (  ), borre el historial asi que no puedo buscar en el. Un Saludo. 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.267
|
no es una api, tienes que añadirla a la cabecera PE respetando sus caracteristicas. por cierto si escribes en una sección que no sea codigo verifica los flags o te dara error al ejecutar el codigo. te dejo un link http://www.woodmann.com/fravia/covert1.htm.
|
|
|
|
« Última modificación: 16 Julio 2007, 08:21 por ̿̿̿̿̿̿̿̿̿ »
|
En línea
|
|
|
|
|
Hendrix
|
Muchas gracias Mek, esto me va a servir. 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
|
Hendrix
|
Mek, lo e intentado y no me chuta....  E intentado lo que dice hay y no me sale....se puede leer el numero de secciones que hay, y supongo que para añadir una, tendria que modificar ese numero, no???(si es que existe el numero, ya que yo no lo e encontrado). E intentado añadir un sección manualmente a traves de un editor hexa "a pelo" (modificando la dirección virtual y demás) y tampoco me la agrega.....estoy mirandolo con el PEiD, Olly y Dumpbin (mas con ese ultimo).... Alguna idea??? 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.267
|
la idea es que tienes que leer sobre encabezados PE, pq si no logras encontrar el numero de secciones que esta en PE+6 esque algo falla. la estructura es igual para todos los ficheros PE cuando sepas donde se encuentra en uno es lo mismo para todos. abre tu editor hex y mira 6 bytes mas alla de PE que numero tienes y veras que es el numero de secciones que contiene el ejecutable. ojo al modificar que este campo es de tamaño word no vayas a sobreescribir los demas datos.
saludos.
PD: PE es el identificador de la cabecera y como tal se cuenta añade los 6 desde la letra P.
|
|
|
|
|
En línea
|
|
|
|
|
Hendrix
|
Ok...gracias...lo de leer el numero de secciones con un programa si se hacerlo, es a mano que no me sale... Bien, con lo que me as dicho si lo se encontrar...  Ahora supongo que tendre que hacer lo que hacia antes de anadirlas "a pelo" y demás... Pero si no logro reparar la IAT me va a servir de poco. Un Saludo y gracais Mek 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.267
|
pero para que quieres reparar la IAT?
|
|
|
|
|
En línea
|
|
|
|
|
Hendrix
|
Para poder usar apis en el codigo inyectado....las apis que tengo que reparar son el MessageboxA y el ExitProccess que estaban en el ejecutable echo en Fasm....El programa ahora me salta fuera de la memoria, y al cargar el hello.exe dentro del Olly ya me aparecer el call hacia el MessageBoxA. A parte, e intentado parchearlo intentando poner el call original del hello.exe dentro del c2.exe (la "victima") y le e peusto la direccion (7E3D058A) y me a substituido la direccion por el call messageboxA, pero al dar F7 me vuelve a salir de memoria, y otra cosa....a la API no se le pasa ningun parametro correcto....tendre que reparar todo el ejecutable y adaptarlo a esas posiciones de memoria.... 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
®®
Colaborador
Desconectado
Mensajes: 5.267
|
eso es lo que te digo en el otro post de calcular el desplazamiento. los parametros de messagebox las cadenas estan en una direccion fija dentro de tu ejecutable, por lo que si cambia su ubicacion ves a saber lo que le pasa como parametro. de la misma forma que te dije que llamarias a una funcion call [ebp+offset funcion] para las variables mas de lo mismo push [ebp+offset variable] ebp logicamente es el valor del desplazamiento.
|
|
|
|
|
En línea
|
|
|
|
|
Hendrix
|
Ok...ya lo voy pillando....muchas gracias Mek 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
|
Hendrix
|
Mek, ya lo e echo...reparando las direcciones y todo eso a mano....pero lo tenia dentro de espacio sobrante de la sección .text...el problema es cuando intento crear mi sección con el tamaño que quiera, lo logro hacer todo, redimensiono las secciones para que las lea bien y todo y a mi parecer esta todo correcto, el icono es el mismo (por lo tanto la sección de resources esta bien) y todo correcto (a mi parecer), pero al darle doble click me dice que es una aplicaciones Win32 invalida....al pasarle el dumpbin no me marca ningun error al hacer lo siguiente: dumpbin /all archivomodificado.exe > info.txt A veces, antes me marcaba errores y me ponia todos los valores de eax, ebp y demás registros, pero esa vez me lo marco correcto y no me funcionó....Alguna sugerencia?? tengo que modificar algo mas??? Pensé que solo podria haber una sección en el ejecutable con los flags que indiquen que es codigo....pero no fue asi...luego modifique lo que dice: Size of code por la suma de mis 2 secciones de codigo y tampoco funcionó...y ya no se que mas hacer....  Un Saludo. 
|
|
|
|
|
En línea
|
Muchas veces las cosas no se le dan al que las merece más, sino al que sabe pedirlas con insistencia. - Arthur Schopenhauer
|
|
|
|
Páginas: [1] 2 3 4
|
|
|
|