elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C / C++ bit by bit --- exe to text y text to exe
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: C / C++ bit by bit --- exe to text y text to exe  (Leído 9,144 veces)
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #10 en: 28 Febrero 2014, 17:57 pm »

Listo mire tengo este código simple:

Código
  1. #include<stdio.h>
  2.  
  3. int main(){
  4. FILE *file;
  5. unsigned char buffer;
  6.  
  7. //file = fopen("Prueba.txt","r+");
  8. file = fopen("HolaMundo.exe","r+");
  9. if(file!=NULL){
  10. //printf("Archivo Abierto con exito.");
  11. //fread(&buffer,1,1,file);
  12. //printf("%c",buffer);
  13.  
  14. int linea = 1;
  15. while (fread(&buffer, 1, 1, file) == 1) // expecting 1
  16. // element of size
  17. // BUFFER_SIZE
  18. {
  19. // process buffer
  20.  
  21. // print format
  22. if(linea>=1 && linea<=8)
  23. printf(" %c",buffer);
  24. if(linea==8)
  25. printf(" - ");
  26. if(linea>=9 && linea<=15)
  27. printf(" %c",buffer);
  28. if(linea==16){
  29. printf("\n");
  30. linea=0;
  31. }
  32. linea++;
  33. }
  34. if (feof(file))
  35. {
  36.  // hit end of file
  37. }
  38. else
  39. {
  40.  // some other error interrupted read
  41. }
  42.  
  43.  
  44.  
  45. fclose(file);
  46. }else{
  47. printf("Apertura del Fichero no fue exitosa.");
  48. }
  49.  
  50. return 0;
  51. }
  52.  

Bueno el código expuesto puede leer archivos de texto plano y los va a leer perfectamente. ya lo probé.

A la hora de leer un archivo *.exe tengo el pequeño que lo lee mal.


Como pueden ver es absurda la salida, si pueden leer en la salida se puede leer algo como:
This program can be run in dos mode
Este programa puede ser corrido en dos modo


Pero cuando lo abro con notepad++ y lo guardo como txt si realizo lo que necesito,  el problema es que no necesito abrirlo con notepad++ sino necesito hacer un programa que lo haga...


NOTA: que se parece absurdo transformar un exe a texto. pero es que realmente lo necesito.


En línea

<<<--Basura-->>>
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #11 en: 28 Febrero 2014, 19:24 pm »

La salida esta bien, así es como son representados los caracteres en ANSI-ASCII.
Los ejecutable no tiene nada que ver con la codificacion de caracteres. Podes abrir algun ejecutable con un editor hexadecimal
y se mostrara la representación en hexadecimal y la codificación que tenga establecida generalmente ANSI-ASCII. para hacerlo
así como ellos podes usar sprintf pasando byte por byte.


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #12 en: 28 Febrero 2014, 19:49 pm »

¡Buenas!

No intentes utilizar la función feof para saber si has llegado al final de un archivo binario. Te puede dar falsos positivos, y la mayor parte de las veces te los dará (no me preguntes porqué), y no podrás leer el contenido del archivo.

Primero tienes que saber el tamaño, en bytes, del fichero (utilizando por ejemplo ftell y fseek), y luego empiezas a leer datos desde el principio hasta alcanzar el numero de bytes que tenga el fichero.

Si no conoces las fuciónes anteriores en www.cplusplus.com encontraras mas información.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #13 en: 1 Marzo 2014, 01:20 am »

La salida esta bien, así es como son representados los caracteres en ANSI-ASCII.
Los ejecutable no tiene nada que ver con la codificacion de caracteres. Podes abrir algun ejecutable con un editor hexadecimal
y se mostrara la representación en hexadecimal y la codificación que tenga establecida generalmente ANSI-ASCII. para hacerlo
así como ellos podes usar sprintf pasando byte por byte.



La salida esta mal ya que no representa lo que necesito, estoy viendo el mismo contenido del "exe" en el notepad++

También se hex y binario, y ASCII code

Se lo que necesito pero no se como hacerlo.


¡Buenas!

No intentes utilizar la función feof para saber si has llegado al final de un archivo binario. Te puede dar falsos positivos, y la mayor parte de las veces te los dará (no me preguntes porqué), y no podrás leer el contenido del archivo.

Primero tienes que saber el tamaño, en bytes, del fichero (utilizando por ejemplo ftell y fseek), y luego empiezas a leer datos desde el principio hasta alcanzar el numero de bytes que tenga el fichero.

Si no conoces las fuciónes anteriores en www.cplusplus.com encontraras mas información.

¡Saludos!

Gracias por tu información voy hacer la prueba de lo que me dices!! Muchas gracias!!
En línea

<<<--Basura-->>>
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #14 en: 1 Marzo 2014, 02:55 am »

1.  Hola bueno lo que necesito es simple, Quiero tomar un fichero binario y transformarlo en texto... luego cuando tengo el texto quiero transformarlo a exe.
Como ya te comentaron un archivo es una secuencia de bytes, imprimir el valor de cada uno literalmente (65, 97, etc. en base 10 o cualquier otra base) o como un carácter de algún juego de caracteres (por ejemplo en ASCII A, a, etc.) es cuestión del usuario.


2.  Quisiera saber también como leer este fichero en Binario.
En el caso de C basta con abrir el archivo en modo binario "rb" y leer los caracteres con funciónes como fread, fgetc, etc. pero no estoy seguro si eso es lo que buscas.

Con todo un ejemplo sencillo (un "poor man's hex viewer") en C:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. #define NOM_ACHIVO  "main.exe"
  6. #define NUM_COLS  16
  7.  
  8. int main(void)
  9. {
  10.   FILE *in;
  11.   unsigned char ch[NUM_COLS];
  12.   size_t nc;
  13.   size_t i;
  14.  
  15.   if ((in = fopen(NOM_ACHIVO, "rb")) == NULL){
  16.      perror(NOM_ACHIVO);
  17.      return EXIT_FAILURE;
  18.   }
  19.  
  20.   while ((nc = fread(ch, 1, NUM_COLS, in)) != 0){
  21.      for (i = 0; i < NUM_COLS; i++)
  22.         if (i < nc)
  23.            printf(" %02x", ch[i]);
  24.         else
  25.            printf("   ");
  26.  
  27.      printf("  |  ");
  28.  
  29.      for (i = 0; i < nc; i++)
  30.         if (ispunct(ch[i]) || isalnum(ch[i]))
  31.            putchar(ch[i]);
  32.         else
  33.            putchar(' ');
  34.  
  35.      printf("  |\n");
  36.   }
  37.   fclose(in);
  38.  
  39.   return EXIT_SUCCESS;
  40. }
La idea es imprimir valores hexadecimales (lo usual) y también como texto (cuando sea posible).

Un saludo
« Última modificación: 1 Marzo 2014, 02:57 am por rir3760 » En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #15 en: 1 Marzo 2014, 03:05 am »

Gracias por publicar tu código: rir3760
Gracias la ayuda brindada me ayudo a resolver el problema: do-while

Ya tengo mi solución también, para quien la necesite:

Código
  1. #include<stdio.h>
  2.  
  3. int main(){
  4. FILE * pFile;
  5. FILE * newFile;
  6. long size;
  7.  
  8. pFile = fopen ("Hola.exe","rb");
  9. newFile = fopen("EXE.exe","w+b");
  10.  
  11. if (pFile==NULL && newFile==NULL) perror ("Error opening file");
  12. else
  13. {
  14. printf("Leyendo archivo\n");
  15. fseek ( pFile , 0 , SEEK_END );
  16. size=ftell (pFile);
  17. printf("Total de bytes: %d\n",size);
  18.  
  19. fseek ( pFile , 0 , SEEK_SET );
  20. unsigned char buffer;
  21. for(int i = 0; i < size ; i++ ){
  22. fread(&buffer,1,1,pFile);
  23. //printf("%c",buffer);
  24. fwrite(&buffer, 1, sizeof(buffer), newFile);
  25. }
  26.  
  27. }
  28.  
  29. fclose (pFile);
  30. return 0;
  31. }
  32.  
« Última modificación: 1 Marzo 2014, 03:28 am por <<<-Underwar->>> » En línea

<<<--Basura-->>>
Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #16 en: 1 Marzo 2014, 04:10 am »

hola <<<-Underwar->>> no te tira error de segmentación? también veo que debería haber un warning por la variable size, fue declarado long int pero lo visualizas como entero (línea 17)

saludos
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #17 en: 1 Marzo 2014, 04:20 am »

La respuesta es no. Que compilador estas usando ??

Nota: Falta cerrar el Fichero: newFile
Código
  1. fclose (newFile);
En línea

<<<--Basura-->>>
Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #18 en: 1 Marzo 2014, 04:30 am »

 solo miré el código, pero en g++ lo deberías visualizar como %li.; si justamente por la falta del cierre de newfile es que te preguntaba si no te tiraba error. saludos
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
<<<-Basura->>>


Desconectado Desconectado

Mensajes: 388



Ver Perfil
Re: C / C++ bit by bit --- exe to text y text to exe
« Respuesta #19 en: 1 Marzo 2014, 04:42 am »

Depende del sistema que se este usando pero:
int     : 4 bytes
long   : 4 bytes


En lo mas profundo son siempre lo mismo
En línea

<<<--Basura-->>>
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
un problema con el text
Programación Visual Basic
sorcerer 3 2,006 Último mensaje 10 Julio 2005, 02:56 am
por Kizar
Problemas con los text box
Programación Visual Basic
Tiny_007 6 2,207 Último mensaje 1 Enero 2006, 22:39 pm
por Tiny_007
Text + Image
Programación Visual Basic
Arc_Dream5 4 1,999 Último mensaje 8 Abril 2006, 00:34 am
por Ironhorse
DUDA CON TEXT
Programación Visual Basic
CARRY-ON 4 1,790 Último mensaje 15 Abril 2006, 05:05 am
por _Sergi_
Dificultad VBScript [MSXML2.XMLHTTP + RESPONSE.TEXT + TEXT AREA)]
Scripting
JohnConnor 0 2,277 Último mensaje 16 Enero 2013, 12:37 pm
por JohnConnor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines