hola, estoy intentando crear un stub en c, pero tengo un error en mi code.
EL problema es que solo me abre los 3 primeros caracteres del archivo,¿ que tengo mal?
Le he añadido unos fprint para controlar los valores de las variables.

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
//#include "split.h"

int main(int argc, char *argv[])
{
  //abrimos el stub en modo de lectura binaria.
   FILE* stub = fopen( *argv , "rb" );
    printf("abierto\n");//debug
    getchar();//debug
    
    if( !stub ){return 0;} //si ha ocurrido un error, cerramos el Stub.exe
    
    fseek( stub , 0 , SEEK_END);//inicio ejecutable
    int size = ftell( stub ); //sacamos el tamaño
    printf("ya tenemos tamanho %i\n",size);//debug
    getchar();//debug
    char* cadena = ( char * )malloc( size );
    //ahora limpiamos el cadena para evitar errores y basura en nuestro archivo.
    memset( cadena , 0 , size );
    //con eso ya tenemos nuestro cadena listo para leer el archivo.
    //ahora necesitamos situarnos en el lugar donde se encuentra el archivo, obviamente
    //seria en la direccion donde termina nuestro stub.exe.
    fseek( stub , 0 , SEEK_SET );
    //ahora comenzamos a copiar los datos de nuestro exe y los pasamos a nuestro cadena
    //para luego desencriptarlos.
    fread( cadena , size, 1 , stub );
    
   
    
    printf("antes split\n");
    printf(cadena);
    getchar();
}

gracias por la ayuda
The best forum!!: Indetect@bles
NothingHERE
La mejor forma para autoleerse sin usar apis es esta

Código: Seleccionar todo

int main( int argc , char** argv )
{ FILE* Stub= fopen( *argv , "rb" );}
Ademas, yo te recomiendo que en vez de utilizar split utilizes como "delimitadores" tamaños. Es decir, defines una constante con el tamaño del stub, y luego a la hora de leer el archivo tendras que hacer.

Código: Seleccionar todo

fread( buffer , size - tamaño_stub , sizeof( char ) , Stub );
Donde size es el tamaño del archivo total y tamaño_stub es el tamaño del stub compilado.

Suerte !
printf no te va a imprimir todo el binario solo te imprimira la MZ porque printf toma la cadena como terminada cuando encuentra un caracter nulo (0x00) jeje escribe mejor la variable cadena en un archivo y ahi verificas si se esta leyendo el archivo completo o no
//mHmm..
ok, probé a meterlo en un archivo de texto y va perfecto, es que el problema era que el split me tiraba error y pensé que era por abrir mal el stub en la variable.
Creo que voy a usar un split con tamaño_stub, tendrá menos tamaño y será mas rápido.
gracias por la ayuda!
The best forum!!: Indetect@bles
NothingHERE
Responder

Volver a “C/C++”