SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Zirrosis en Domingo 8 de Julio de 2007, 00:14

Título: Packer En C/c++
Publicado por: Zirrosis en Domingo 8 de Julio de 2007, 00:14
La idea es:

Extraer en memoria un archivo "enpaquetado" y hacerlo correr en memoria, crear un handle o un thread hacia ese ejecutable en memoria y ejecutarlo desde hay.

La pregunat es:

Se tiene que reajustar la RVA para eso??? ya que en C# se puede ahcer eso pero si el ejecutable usa DLL's hay errores (supongo que es porque la IAT estara mal ya que esta en posiciones de memoria distintas, y creo que solamente reparando la RVA (o la VA, no se) se repararia la IAT,  :( )

Alguien sabe algo de esto???

PD: Al handle o al thread se lo tendria que pasar al Entry point del ejecutable en memoria, para evitar pillar datos que no nos sirven...

Please, guienme, ya que no se si estoy en lo correcto.  :(
Título: Re: Packer En C/c++
Publicado por: Eternal Idol en Domingo 8 de Julio de 2007, 00:22
Me parece que tenes una gran confusion y probablemente ni siquiera sepas que queres hacer en realidad. Busca la definicion de HANDLE, RVA, IAT.

Si queres saber mas arranca desde aca:
http://en.wikipedia.org/wiki/Upx (http://en.wikipedia.org/wiki/Upx)
Título: Re: Packer En C/c++
Publicado por: Zirrosis en Domingo 8 de Julio de 2007, 13:09
Lo que es un Handle, la RVA y la IAT si se que es....el problema es que, como te gije, en C# te deja cargar codigo mientras no dependan de DLL's ajenas, si eso ocurre, da error, y yo creo que da ese error al intentar cargar DLL's que no esten cargadas o fallo de memoria....esa es mi pregunta, puede ser por eso???

PD: Pregunto esto en C/C++ ya que este tema creo que tiene mejor acogida aqui que en C#... ;)
Título: Re: Packer En C/c++
Publicado por: Eternal Idol en Domingo 8 de Julio de 2007, 14:14
Cita de: "Zirrosis"
Lo que es un Handle, la RVA y la IAT si se que es....

Lo dudo por lo que dijiste antes pero bueno, sigamos.
 
Cita de: "Zirrosis"
el problema es que, como te gije, en C# te deja cargar codigo mientras no dependan de DLL's ajenas, si eso ocurre, da error, y yo creo que da ese error al intentar cargar DLL's que no esten cargadas o fallo de memoria....esa es mi pregunta, puede ser por eso???

Como no se que hace C# (ni quiero saber) voy a asumir que no usas el loader de Windows (LoadLibrary/CreateProcess lo usan). Entonces lo mismo para cualquier lenguaje tendras que resolver todas las funciones importadas, resolver las "realocaciones" de cargar el codigo en una direccion diferente a la base predeterminada y alguna que otra cosita mas.

Lo mas facil de hacer es depurar el codigo que te da el error ...
Título: Re: Packer En C/c++
Publicado por: Zirrosis en Domingo 8 de Julio de 2007, 15:45
Cita de: "Eternal Idol"
Entonces lo mismo para cualquier lenguaje tendras que resolver todas las funciones importadas, resolver las "realocaciones" de cargar el codigo en una direccion diferente a la base predeterminada y alguna que otra cosita mas.
Gracias,justo lo que queria confirmar.  :)
Título: Re: Packer En C/c++
Publicado por: Eternal Idol en Domingo 8 de Julio de 2007, 16:26
http://en.wikipedia.org/wiki/Portable_Executable (http://en.wikipedia.org/wiki/Portable_Executable)
http://www.microsoft.com/whdc/system/platf...are/PECOFF.mspx (http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx)