Autor
|
Tema: Simulando una clave de acceso en C++ (Leído 29,864 veces)
|
Dr. H47
Desconectado
Mensajes: 12
No que sea mi oficio, así es mi estilo de vida.
|
- Aqui les dejo un pequeño código fuente codificado en ´lenguaje c++. Código que simula una clave de acceso mediante do…while y define. - Si no se ingresa la clave correcta el programa no da acceso y pide ingresar la clave cuantas veces sea necesario. - La clave ha sido declarada en una variable tipo entero (int), por lo que si se ingresa una letra o caracter que no sea numerico, la aplicación sale de su ciclo provocando un error infinito. // ---------------------------- // DENEGADO.CPP // Escrito en Turbo C++ 3.0 // Programa que restringe el acceso, si no se teclea la clave correcta. // utilizando "do..while" y "define". // ---------------------------- #include <iostream.h> #include <conio.h> #define clavetrue 777 int claveacceso; void main (void) { clrscr(); do { cout<<"Ingrese la clave de acceso: "; cin>>claveacceso; if (claveacceso != clavetrue); } while (claveacceso != clavetrue); cout<<"\n\nAcceso concedido."; getch(); } // Eder A. Lopez // dr.h47@live.com.mx // Powered by Dr. H47
Ver el código fuente en texto plano. Bajar source+ejecutable comprimido en .zip
|
|
|
En línea
|
|
|
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
Jajaja buen codigo, felicitaciones
|
|
|
En línea
|
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Sumado a que no es recomendable utilizar conio, "main" debe declararse "int main". La declaración de "iostream.h" es obsoleta, debe declararse "iostream". Cuidado con las variables globales innecesarias; son una mala practica.
Por otro lado, el código es bastante inseguro:
1) La forma en la que implementas el valor correcto es insegura. Es fácilmente accesible ya sea leyendo el proceso o debuggeando el ejecutable.
2) No limitas los intentos, por lo tanto en ultima instancia se podría hacer fuerza bruta.
Saludos
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Dr. H47
Desconectado
Mensajes: 12
No que sea mi oficio, así es mi estilo de vida.
|
Gracias por el aviso, servira para tomarlo en cuenta en mis otras practicas.
Saludos.
|
|
|
En línea
|
|
|
|
.mokk.
Desconectado
Mensajes: 177
|
Pues si he visto el codigo y veo algo que no entiendo aun, porque un if dentro del do while de comparacion que no hace nada ? hehe Sobre el codigo aqui te lo dejo un poco mejorado, acepta letras pero mostrara mensaje diciendo que solo numeros, por lo que es mejor asi tu programa no crashea, bueno aqui te dejo el codigo y tambien leido lo de LittleHorse intente hacerlo de la mejor forma posible #include <cstdlib> #include <iostream> using namespace std; #define clavetrue 777 int claveacceso, intento=0, total = 5; char buffer[100]; int main(int argc, char *argv[]) { do { if(intento>total) { cout << "Has sobrepasado el numero de intentos disponibles el programa cerrara"; cin.get(); return 0; } cout<<"Ingrese la clave de acceso: "; fgets(buffer , 99, stdin ); if(sscanf(buffer , "%d", &claveacceso ) != 1) cout << "Error solo numeros porfavor" << endl; if(claveacceso != clavetrue) cout<<"Intento numero: " << intento << " - Intentos restantes: " << (total-intento) << endl; intento++; } while (claveacceso != clavetrue); cout<<"\n\nAcceso concedido."; cin.get(); }
1) La forma en la que implementas el valor correcto es insegura. Es fácilmente accesible ya sea leyendo el proceso o debuggeando el ejecutable.
He visto este tema en el cual nose si sea buenoa forma de asegurar mejor nuestra contraseña, http://gaussianos.com/criptografia-cifrado-de-clave-publica-ii/Ahi tambien si podrias dar alguna sugerencia en eso seria de gran ayuda mas para proyectos en los que deceemos usar una contraseña y sea mas dificil el poder crackear el programa.
|
|
« Última modificación: 27 Enero 2011, 09:31 am por .mokk. »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Es un tema bastante amplio, se pueden hacer muchas cosas. Ofuscar el código agregando operaciones basura, packers, ofuscación mediante VM, cifrados de distintos tipos para el password etc. Realmente depende del propósito principal del programa (si realiza o no conexiones) pero la regla básica es no almacenar la contraseña en texto plano en ningún lugar del sistema. En el caso del código, al utilizar un define le pones la tarea muy facil al que debuggea ya que puede ver el valor de la constante a comparar muy fácilmente. Es decir vería algo similar a: cmp [xxxxxx],00000309
donde 309 en hexadecimal es 777 en decimal. Saludos
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
/* Eder A. Lopez dr.h47@live.com.mx Powered by Dr. H47 ++++++++++++ Code in C : Sagrini 2010 : elhacker.net */ #include <stdio.h> int main (int argc, char *argv []) { int clave , OK = atoi (argv [1]); do { printf( "Ingrese la clave de acceso: "); } while (clave != OK) printf ("Acceso concedido !!!\n\n"); return 0; }
Pues no, eso es para otra cosa . Criptografía, comunicaciones seguras, pero se podría usar algo como #define OK 111*7
Evidentemente más entrevesado, para liar a un atacante inexperto... Otra forma sería guardar la pass en un archivo con privilegios unicamente del que ejecuta el prog... Hay formas de sobra, solo es pensar. Es un tema bastante amplio, se pueden hacer muchas cosas. Ofuscar el código agregando operaciones basura, packers, ofuscación mediante VM, cifrados de distintos tipos para el password etc. Realmente depende del propósito principal del programa (si realiza o no conexiones) pero la regla básica es no almacenar la contraseña en texto plano en ningún lugar del sistema. En el caso del código, al utilizar un define le pones la tarea muy facil al que debuggea ya que puede ver el valor de la constante a comparar muy fácilmente. Es decir vería algo similar a: cmp [xxxxxx],00000309
donde 309 en hexadecimal es 777 en decimal. Saludos De acuerdo, mucho mejor jeje... Ahí esta lo de arriba... Sumado a que no es recomendable utilizar conio, "main" debe declararse "int main". La declaración de "iostream.h" es obsoleta, debe declararse "iostream". Cuidado con las variables globales innecesarias; son una mala practica. Por otro lado, el código es bastante inseguro: 1) La forma en la que implementas el valor correcto es insegura. Es fácilmente accesible ya sea leyendo el proceso o debuggeando el ejecutable. 2) No limitas los intentos, por lo tanto en ultima instancia se podría hacer fuerza bruta. Saludos
Lo de la fuerza bruta se podría hacer de todas formas, solo ejecutar varias veces el programa, aunque sería más lento evidentemente... Lo demás que se dice en el code... http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.htmlSuerte!
|
|
|
En línea
|
* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
clave de acceso *.mov quicktime
Multimedia
|
jdiredtor
|
0
|
1,782
|
9 Febrero 2006, 16:23 pm
por jdiredtor
|
|
|
Introducción a microcontroladores PIC [simulando nuestro programas en ASM y C]
« 1 2 »
Electrónica
|
Casidiablo
|
14
|
53,726
|
20 Agosto 2008, 13:48 pm
por Meta
|
|
|
Clave de acceso Photoshop CS2
Diseño Gráfico
|
Sra.Cullen
|
2
|
5,935
|
11 Noviembre 2008, 18:07 pm
por Axus
|
|
|
Ayuda Borrado CLAVE acceso BLUETOOTH
Hacking Mobile
|
mirelapasora
|
2
|
4,303
|
31 Mayo 2011, 16:10 pm
por mirelapasora
|
|
|
Control relés con una bombilla simulando motor lavadora
Electrónica
|
Meta
|
0
|
2,790
|
1 Enero 2016, 23:33 pm
por Meta
|
|