Página 1 de 1

pequeña duda en stub C - SOLUCIONADO

Publicado: 14 Dic 2011, 00:03
por nothingHERE
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

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 02:06
por 3mp3z@ndo
Prueba cambiandole esto:

Código: Seleccionar todo

FILE* stub = fopen( *argv , "rb" );
por esto:

Código: Seleccionar todo

FILE* stub = fopen( argv[1] , "rb" );
Un saludo

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 02:18
por apeiron
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 !

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 03:08
por osnaraus
En la funcion main puedes usar

Código: Seleccionar todo

int main(int argc, char **argv)
o

Código: Seleccionar todo

int main(int argc, char *argv[])
Ya q son equivalentes


Pero, para autoabrirse debes usar

Código: Seleccionar todo

FILE* stub = fopen( argv[1] , "rb" );
Saludos

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 03:28
por linkgl
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

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 16:02
por nothingHERE
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!

Re: pequeña duda en stub C

Publicado: 14 Dic 2011, 21:40
por linkgl
Dale, lo pongo como solucionado