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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19
101  Programación / Programación C/C++ / Detener thread en C++ en: 24 Agosto 2015, 10:58 am
Hola, antes de meterme en Mutex etc, quería saber si se puede detener de esta manera un thread en C++, o apartir de una funcion externa que busque un valor la devuelva, y apartir de ese nuevo valor, haga false la condicion de bucle del thread y salga de este.

Probé con un volatile bool y con una variable global pasandola como argumento a la funcion del thread, pero creo que una vez pasada como argumento la funcion la trata como variable estática, luego si la cambio en otra parte del código no influye en el valor de la función del thread.

Código
  1. bool on = true;
  2. thread ok(trabaja, on, a);//hay que pasarle el bool a través de una funcion
  3. system("pause");
  4. on=false;
  5. ok.get();
  6. cout << "yano hay thread!!";

Código
  1. trabaja (bool on, string a)
  2. {
  3. while(on){
  4. /...
  5. }
  6. }
Visto que eso no funciona, pensé en crear una función que busque el valor externo y lo devuelva, pero a primeras no se me ocurre nada, seguiré pensando en ello.

Y sino con mutex como se podría hacer?

Saludos.
102  Programación / Programación C/C++ / Encriptador de C++ Rijndael ayuda en: 22 Agosto 2015, 20:08 pm
Hola, hace unos dias estuve buscando algo para cifrar cadenas de texto incluso un archivo completo, y encontré este encriptador de código abierto que incluí en mi proyecto.

Funciona, pero cifra bloques de 8, 16, y 24 carácteres, luego si lo que quieres cifrar no es múltiplo de eso falla.

¿que solución puedo aportar?.

Código
  1. string encriptar_primera(string entrada)
  2. {
  3. try
  4. {
  5. encriptador_1 oRijndael;
  6. string retorno;
  7. oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
  8. while (entrada.length() % 24 != 0)
  9. entrada += 'Z';
  10. for (int i = 0; i < entrada.length(); i = i + 24){
  11. char *salida = new char[entrada.length()]();
  12. salida = NULL;
  13. string bloque = entrada.substr(i, 24);
  14. oRijndael.EncryptBlock(bloque.c_str(), salida);
  15. retorno += salida;
  16. }
  17. cout << ": " << retorno << endl;
  18. return retorno;
  19. }
  20. catch (exception& roException)
  21. {
  22. return "";
  23. }
  24. }

Probé a añadirle 'Z' hasta que sea múltiplo pero creo que la llamada Encrypt hace Xor y por eso no funciona, ¿qué puedo hacer para trabajar con ello sin problemas si quiero cifrar cadenas no necesariamente multiplos de 24 sin perder datos.

Saludos.
103  Programación / Programación C/C++ / Problema abrir archivo en: 15 Agosto 2015, 19:16 pm
Hola, no entiendo porque si abro el archivo en modo escritura y lectura a la vez, no puedo hacer ambas cosas a la vez, sino que tengo que cerrarlo y volverlo a abrir.

Código
  1. fstream archivo;
  2. archivo.open(directorio, fstream::in | fstream::out);
  3. if (!archivo)
  4. return false;
  5. else{
  6. string contenido;
  7. while (archivo.good()){
  8. contenido += archivo.get();
  9. }
  10.  
  11. //archivo.close();
  12. //archivo.open(directorio, fstream::out || fstream::ate);
  13. //contenido = contenido.insert(inicio, datos);
  14. //archivo.write(contenido.c_str(), contenido.length());
  15. archivo.seekp(inicio);
  16. archivo.write(datos.c_str(), datos.length());
  17. archivo.close();

Este code no funciona, lo que quiero hacer es leer todo el archivo e insertar datos en el archivo, pero no hay manera, parece que despues de leerlo tengo que cerrarlo y abrirlo en escritura para escribir en el, ¿esto es siempre asi? ¿o hago algo mal?

Saludos.
104  Programación / Programación C/C++ / Error interno de compilacior en: 14 Agosto 2015, 20:48 pm
Código
  1. almacen a;
  2. a.crear_archivo();
  3. a.insertar_campo("pruebaOEIOIEOCIo", 2);
  4. cout << a.obtener_campo(2);

Citar
Error   3   error C1001: Error interno en el compilador.

Definicion de la problemática clase:

Código
  1. class almacen
  2. {
  3. private:
  4. string directorio = string(DIRECTORIO_INSTALACION) + string(NOMBRE_ALMACEN);
  5. string *delimitadores = new string[5]{
  6. "Cqwerwerwerwer23t23tt",
  7. "7348b3835grtjebr6uertt",
  8. "nyFtCn4jPKItqWCAdJn66",
  9. "QT36ub356iub356ub635"
  10. "y98NYN8YA89CYA898333"};
  11. public:
  12. bool crear_archivo();
  13. bool existe_archivo();
  14. bool corrupto_archivo();
  15. bool insertar_campo(string datos, int campo);
  16. string obtener_campo(int campo);
  17. bool eliminar_campo(int campo);
  18. bool encriptar_archivo();
  19. bool desencriptar_archivo();
  20. };

Saludos.
105  Programación / Programación C/C++ / ¿Se puede sacar nombre de proceso con el HWND de su ventana? en: 13 Agosto 2015, 01:20 am
Pues eso, ¿se puede? Iré actualizando este hilo con más datos.

Saludos.

Edito: ¡Vaya!

https://msdn.microsoft.com/en-us/library/windows/desktop/dd318087(v=vs.85).aspx
106  Programación / Programación C/C++ / Mejor clase para trabajar con archivos C++ en: 11 Agosto 2015, 22:04 pm
Hola, necesito trabajar con ficheros para escribir y leer datos, hacer ambas cosas a la vez en una misma función vaya.

Tenía pensado usar FILE como hacía para C, pero sería una incoherencia debido a que estoy usando C++, y estaría dejando atrás los métodos que ofrecen sus funciones.

Mi pregunta es, que debo hacer ¿crear un ifstream para leerlo, liberarlo y crear luego un ofstream para escribir en el?. No creo que sea haga así.

¿No hay una clase, que maneje archivos con métodos de lectura y escritura? Es lo que busco.

Edito: Acabo de leer acerca de fstream, y creo que es lo que busco, lo inicializaría de esta manera:

Código:
fstream fs("test.txt", fstream::in | fstream::out);

Parece tener métodos de lectura y escritura, aun no lo he probado, ¿me lo recomendáis? ¿o hay algo mejor?.

La función debe de leer todo el archivo y luego sobrescribir unas líneas.

¡Saludos!.
107  Comunicaciones / Redes / Duda redes, subredes, y hosts en: 10 Agosto 2015, 10:39 am
Hola, si tenemos estamos conectados a una red que esta subneteada, ejemplo:

Imaginemos 3 subredes dentro de la red, las subredes las obtendríamos con la ip de un host y la de la máscara de red. Corregidme si me equivoco.

Las subredes pongamos que son:

"172.26.10.1-255"
"172.26.0.1-255"
"172.26.16.1-255"

Si nuestra IP es 172.26.10.30, ¿podríamos mandar paquetes desde nuestra subred a hosts de las demás subredes?, en caso de que si, ¿siempre funcionaría o podrían ponernos restricciones un administrador para independizarlas?.

La idea parte de la implementación de un MITM, así podría obtener hosts de otras subredes, pero quiero saber si sería posible.

Y luego la implementación en C++, para obtener el rango ya la iré poniendo. Estoy usando bitset y u_char*.

Saludos.
108  Comunicaciones / Redes / ¿IP fordwarding para MITM? en: 1 Agosto 2015, 02:14 am
Hola, en todos los MITM, veo que es necesario usar el IP forwarding para decirle al router a que host mandale los datos y a que puerto, mm. (Tampoco tengo muy claro el concepto), estoy implementando un MITM, en C++ paar windows, y no sé si debería usarlo.

Lo que hago es envenenar con arp poisoning al router diciendo que soy el host y que tengo la ip del host pero con mi mac, y al host le digo que tengo la ip del router pero con mi mac, de esta manera todos los paquetes me llegan a mi. Host piensan que soy el router con la ip del router y mi mac, router piensa que todos los host tienen mi mac con distintas ips, ok.

Ahora, reenvio los paquetes de los hosts al router, pasandole mi mac al router y la IP del host, (el router me reenviara a mi su paquete ya que esa IP el la tiene asignada con mi MAC), es todo normal, solo que el router tiene a todos los hosts con mi mac, ¿ me deberían llegar así todos los paquetes correctamente? ¿o debería usar IP fordwarding? De ser así ¿a que puerto?

Saludos y gracias.
109  Programación / Programación C/C++ / Error copiando u_char* con apis en: 26 Julio 2015, 23:48 pm
Código
  1. u_char ip[4];
  2. u_char mac[6];
  3. /*for (int i = 0; i < 4; i++)
  4. ip[i]=pkt_data[i+28];
  5. for (int i = 0; i < 6; i++)
  6. mac[i] = pkt_data[i + 22];*/
  7.  
  8. _mbscpy_s(ip, _TRUNCATE, pkt_data +28);
  9. _mbscpy_s(mac, _TRUNCATE, pkt_data+22);

Salida con las apis (usando _mbscpy_s):

Citar
c0a81260cccccccccc
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81170188bc327db

Salida usando el for:

Citar
c0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6
c0a81260234d5f2697
c0a812188329b236d40
c0a81c990ef684965a6
c0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6

No funciona bien _mbscpy_s, ¿¿porque??

Saludos.

Edito: Creo que el fallo radica en que estoy usando UNICODE de juego de caracteres del proyecto, y la funcion como pone aqui:

https://msdn.microsoft.com/en-us/library/td1esda9.aspx

Es para multybyte, y para unicode  sería usar wcscpy_s, (pero ahi ya no sería un argumento de u_char*), ademas _mbscpy_s no da error, ¿que pasa?

Tambien añado que estoy cambiando el proyecto, pues donde antes ponia bucles sustituirlo por apis que hagan lo mismo, pero ya véis como me van de bien, lo mismo ocurre con _mbsicmp que compara u_char* con un u_char*, y dice si son iguales, tampoco me funciona, ¿porque?
110  Programación / Programación C/C++ / calcular ip checksum y paso de u_long a u_char falla en: 20 Julio 2015, 14:21 pm
Código
  1. u_char* checksum_ip(u_char* datos, int tamaño)
  2. {
  3. u_char *checksum = new u_char[2]();
  4. u_long suma = 0;
  5. for (int i = 0; i < 24; i++)
  6. {
  7. suma += datos[i];
  8. if (suma & 0xFFFF0000)
  9. {
  10. suma &= 0xFFFF;
  11. suma++;
  12. }
  13. }
  14. checksum = (u_char*)&suma;
  15. cout << checksum << endl;
  16. for (int i = 0; i < sizeof(checksum); i++)
  17. printf("%x", checksum[i]);
  18. system("pause");
  19. return checksum;
  20. }
  21.  

La salida no concuerda con el checksum original del paquete, algo está fallando, quiero pensar que el paso de u_long a u_char* es correcto, iré dando más detalles.

Saludos.

Edito: http://www.arcesio.net/checksum/checksuminternet.html, aqui explica bien como funciona lo del checksum, y el de ip. Según he entendido debo de sumar, de 16 bits en 16 bits todos los campos del header hasta llegar a el del checksum, que ocupartian los bytes 24 y 25 de la cabecera, así pues hice esto, pero no me funciono, no tengo ni idea de trabajar con bits ni entiendo como lo hacen  >:( >:(

Código
  1. u_char* checksum_ip(u_char* datos, int tamaño)
  2. {//24 y 25 son checksum hasta el 23 sumamos
  3.  
  4. u_char *checksum = new u_char[2]();
  5. for (int i = 0; i < 24; i++)
  6. checksum += datos[i];
  7. //sumo los campos byte a byte o ¿como sino?
  8. for (int i = 0; i < 24; i++)
  9. {
  10. if (checksum[i] == 1)//ya se que esta mal, pero aqui sería poner 0 en los 1 y 1 en los 0, trbajando con bits ¿como accedo a ellos? ni idea
  11. checksum[i] = 0;
  12. else
  13. checksum[i] = 1;
  14. }

Segun pone aqui: http://www.arcesio.net/checksum/checksumIP.html

Debería coger los bytes de 2 en 2, y formar con el par una ristra de bits con 16 en total. Esa ristra la sumo.

Vale vale, tenia una cosa mal, ahora comento.

Código
  1. //un sumando del 13 al 23 incluyendo ambos.
  2. //otro dumando 16 bits de ceros, y 2 ristras de 16 bits con las ips
  3. //se suman se cambian 0s por 1s y 1s por 0s, separamos la ristra de 6 en 2 bytes
  4. //formamos un u_char[2] y ya tenemos el checksum ip

La cosa ahora es como puedo sumarlos de 16 en 16?, podría sumar byte a byte, de 8 en 8, con u_char + .., pero de 16 en 16?.

Os dejo el code:

Código
  1. u_char* checksum_ip(u_char* datos, int tamaño)
  2. {//24 y 25 son checksum hasta el 23 sumamos
  3. //un sumando del 13 al 23 incluyendo ambos.
  4. //otro dumando 16 bits de ceros, y 2 ristras de 16 bits con las ips
  5. //se suman se cambian 0s por 1s y 1s por 0s, separamos la ristra de 6 en 2 bytes
  6. //formamos un u_char[2] y ya tenemos el checksum ip
  7. /*
  8. u_char *checksum = new u_char[2]();
  9. for (int i = 0; i < 24; i++)
  10. checksum += datos[i];
  11. for (int i = 0; i < 24; i++)
  12. {
  13. if (checksum[i] == 1)
  14. checksum[i] = 0;
  15. else
  16. checksum[i] = 1;
  17. }*/
  18. u_char *checksum = new u_char[2]();
  19. u_long suma = 0;
  20. for (int i = 13; i < 24; i++)
  21. {
  22. suma += datos[i];
  23. if (suma & 0xFFFF0000)
  24. {
  25. suma &= 0xFFFF;
  26. suma++;
  27. }
  28. }
  29. for (int i = 26; i < 33; i++)
  30. {
  31. suma += datos[i];
  32. if (suma & 0xFFFF0000)
  33. {
  34. suma &= 0xFFFF;
  35. suma++;
  36. }
  37. }
  38. u_short a = ~(suma & 0xFFFF);
  39. checksum = (u_char*)&a;
  40. cout << checksum << endl;
  41. for (int i = 0; i < sizeof(checksum); i++)
  42. printf("%x", checksum[i]);
  43. system("pause");
  44. return checksum;
  45. }

Seguiré investigando.

Horrible, http://www.dreamincode.net/forums/topic/158278-help-with-c-ip-header-checksum/

Saludos.

Ya lo tengo orgasm http://www.badprog.com/c-type-converting-two-uint8-t-words-into-one-of-uint16-t-and-one-of-uint16-t-into-two-of-uint8-t
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines