Extraer PE i pegarlo en otro fichero ¡ayuda!

Iniciado por ApOkAlizE, 22 Diciembre 2011, 14:23 PM

0 Miembros y 4 Visitantes están viendo este tema.

ApOkAlizE

Bueno pues estoy comenzando C++ desde hace unos meses y como antes usava VB pues no aprendi muy bien como funcionan las cosas. Pues ahora intento con C++ extraer el PE de un .exe que yo he creado y lo extrae bien, y mi idea es crear otro archivo con extension .exe también y ahí se le añade el codigo PE, pues aparentemente tienen ambos el mismo tamaño y tal, pero al ejecutar el nuevo archivo me sale el mensaje de "program too big to fit in memory", pero ambos archivos ocupan exactamente lo mismo (3.79MB), deberia poderse ejecutar también ¿no?
Gracias.
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

Sagrini

Seguramente el problema es que no copias bien el PE del primer programa, pero es una suposición. Deberías poner tu código, ejemplos, la idea que tienes del problema... etc. Así no puedo ayudarte mucho :D
Un saludo. Sagrini

ApOkAlizE

http://www.megaupload.com/?d=KXRCD5DO
Aquí os dejo una prueva que he hecho es un programa que estoy haciendo para el instituto de credito de sintesis de grado medio, hay el archivo original, el que tendria que funcionar y un .txt con el PE. A ver si sabeis deicrme que hago mal.
Gracias!
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

BlackZeroX

#3
Cita de: ApOkAlizE en 27 Diciembre 2011, 01:06 AM
http://www.megaupload.com/?d=KXRCD5DO
Aquí os dejo una prueva que he hecho es un programa que estoy haciendo para el instituto de credito de sintesis de grado medio, hay el archivo original, el que tendria que funcionar y un .txt con el PE. A ver si sabeis deicrme que hago mal.
Gracias!

Ya... ¿Hacemos ingenieria Inversa?, ¿Adivinamos lo que has hecho? si es asi ¿Cuanto tendremos de retribución?... una cosa es querer ayudarte y otra que nos dejes a ciegas y adivinar lo que has hecho/quieres hacer, por otro me parece que el problema esta mal planteado...

Nota. Aprende primero que es el Formato PE y a que se refiere, por que extraer el PE implica que el EXE esta dentro de un lugar X... y lo deseas extraer (como si estubiera en un zip...), creo que quieres leer cada campo de las estructuras implicadas en el Formato PE (esto se entenderia mejor ya que el archivo que subiste trae 2 archivo en formato PE de dudosa procedencia que nunca ejecute).

Dulces Lunas!¡.

EI: juntando mensajes.

Acabo de ver los archivos con un editor Hexadesimal y lo que pasa es que TODOS lo caracteres que NO SON IMPRIMIBLES los pasa a espacios... una vez mas pon tu codigo... a simple vista lo que hiciste fue abrir un exe con el block de notas y guardarlo en un txt y despues guardarlo en un EXE si es este proceso entonces es un proceso errado por lo que ya te mencione... debes abrir el archivo en modo BINARIO, y si lo visualizas visualizalo en Hexadecial...

Por ejemplo:

*Los Bytes 0x00 pasan a ser 0x20...

Dulces Lunas!¡.
The Dark Shadow is my passion.

ApOkAlizE

BlackZeroX lo que sucede es que yo havia provado de hacerlo desde C++ abriendolo en modo binario y creando otro archivo .exe y meterle el binario del primero pero tampoco me funcionava y este ejemplo si que lo abrí con el bloc de notas, ¿pero quieres decir que hay alguna diferencia? La verdad no he entendido muy bien a que te referias con tu respuesta.
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

x64core

para darle un nombre podria ser "como extraer bytes de un exe"
bueno a mi se me ocurre mapear el archivo y guardarlo en una string unicode
luego abrir un nuevo archivo e insertar los bytes asi de sencillo :P
para mapear:

CreateFile
CreateFileMapping
MapViewOfFile


Eternal Idol

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

oh si!
en un arrays de bytes no ;D
es que lo habia hecho en VB :P

BlackZeroX

#8
Cita de: ApOkAlizE en 27 Diciembre 2011, 17:14 PM
BlackZeroX lo que sucede es que yo havia provado de hacerlo desde C++ abriendolo en modo binario y creando otro archivo .exe y meterle el binario del primero pero tampoco me funcionava y este ejemplo si que lo abrí con el bloc de notas, ¿pero quieres decir que hay alguna diferencia? La verdad no he entendido muy bien a que te referias con tu respuesta.

Lo que pasa es que si abres una rchivo con BYTE NO IMPRIMIBLES con el block de notas y lo vuelves a guardar con este (el block de notas) TE SUSTITUye TODOS LOS BYtES NO IMPRIMIBLES  por bytes 0x20 (Espacios)... es decir te corrrompe el archivo original... lo que haces yo tambien lo he hecho en forma concluyente en C debes abrir los archivos asi:



    hFileSrc = fopen(FILE_SRC, "rb");
    hFileDst = fopen(FILE_DST, "wb");



P.D.: Da igual si se hace en vb o C es el mismo proceso siempre. UNICODE son para textos con caracteres especiales... caracteres chinos, japonen... pero au asi solo son un conjunto de byte Unicode = 2 bytes...

Dulces Lunas!¡.
The Dark Shadow is my passion.

Sagrini

Trabaja con esto:

#include <fcntl.h>

int main ()
{
int origen=open ("./origen", O_RDONLY), destino=open ("./destino", O_RDWR|O_CREAT|O_TRUNC, 0777); char buffer [15];
read (origen, buffer, 15); write (destino, &buffer, sizeof (buffer));
close (origen); close (destino); return 0;
}