Buenas noches espero se encuentren bien si alguien me pudiera ayudar con esto aquí mi código fuente :
# include <conio.h>
# include <stdio.h>
# include <stdlib.h>
# include <iostream.h>
# include <dos.h>
# include <string.h>
void leerPasw(char frase[])
{
int i=0;
cout.flush();
char a;
int b=232;
a=b;
do
{
frase = (unsigned char)getch();
if(frase!=8) // no es retroceso
{
cout << ""<<a<<""; // muestra por pantalla
i++;
}
else if(i>0) // es retroceso y hay caracteres
{
cout << (char)8 << (char)32 << (char)8;
i--; //el caracter a borrar e el backspace
}
cout.flush();
}while(frase[i-1]!=13); // si presiona ENTER
frase[i-1] = NULL;
cout <<"\n";
}
int fo1=177,fo9=178;
int fo2=163,fo3=162,fo10=164;
int fo4=201,fo5=205,fo6=187,fo7=188,fo8=200;
int main ()
{
char Usuario[16];
char Pass[16];
textbackground(WHITE); clrscr();
gotoxy(8,1);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1);
gotoxy(8,2);textcolor(BLUE);cprintf("%c %c",fo1,fo1);
gotoxy(8,3);textcolor(BLUE);cprintf("%c Rep%cblica Bolivariana de Venezuela %c",fo1,fo2,fo1);
gotoxy(8,4);textcolor(BLUE);cprintf("%c Ministerio del Poder Popular para la Defensa %c",fo1,fo1);
gotoxy(8,5);textcolor(BLUE);cprintf("%c Universidad Nacional Experimental de la Fuerza Armada Nacional %c",fo1,fo1);
gotoxy(8,6);textcolor(BLUE);cprintf("%c Decanato de Investigaci%cn y Postgrado %c",fo1,fo3,fo1);
gotoxy(8,7);textcolor(BLUE);cprintf("%c N%ccleo Los Teques %c",fo1,fo2,fo1);
gotoxy(8,8);textcolor(BLUE);cprintf("%c %c",fo1,fo1);
gotoxy(8,9);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1,fo1);
gotoxy(38,11);textcolor(BLUE);cprintf("%c%c%c%c%c",fo4,fo5,fo5,fo5,fo6);
gotoxy(35,12);textcolor(BLUE);cprintf("%c%c%c%c E %c%c%c%c",fo4,fo5,fo5,fo7,fo8,fo5,fo5,fo6);
gotoxy(32,13);textcolor(BLUE);cprintf("%c%c%c%c N F %c%c%c%c",fo4,fo5,fo5,fo7,fo8,fo5,fo5,fo6);
gotoxy(29,14);textcolor(BLUE);cprintf("%c%c%c%c U A %c%c%c%c",fo4,fo5,fo5,fo7,fo8,fo5,fo5,fo6);
gotoxy(29,15);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo8,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo5,fo7);
gotoxy(26,17);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9);
gotoxy(26,18);textcolor(BLUE);cprintf("%c Operador: %c",fo9,fo9);
gotoxy(26,19);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9);
gotoxy(40,18);scanf("%c",&Usuario);
gotoxy(26,22);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9);
gotoxy(26,23);textcolor(BLUE);cprintf("%c Contrase%ca: %c",fo9,fo10,fo9);
gotoxy(26,24);textcolor(BLUE);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9,fo9);
gotoxy(41,23);leerPasw(Pass);
if(strcmp(Usuario,"Administrador") == 0 && strcmp(Pass,"stun")==0)
{
cout << "\n\nUsuario Acertado" << endl;
}
else
{
cout << "\n\nUsuario o Contrasena incorrecta, por favor verifique" << endl;
}
system("pause > null");
return 0;
}
mi duda es por que no me acepta la parte del strcmp gracias de antemano :)
si estas usando c++ porque no usas string en vez de arreglos de caracter creo es mas apropiado
la verdad no entiendo porque no te anda el strcmp a mi anduvo bien
si me haces caso en utilizar string
solo has un pequeño cambio al comparar cadenas, utilizando la funcion c_str()
porque como strcmp es de c no acepta el objeto string y se tiene que hacer un pequeño casteo
como en este ejemplo:
#include<iostream>
#include <cstring>
using namespace std;
int main(){
string Usuario="Administrador";
string Pass="stun";
if(strcmp(Usuario.c_str(),"Administrador") == 0 && strcmp(Pass.c_str(),"stun")==0)
{
cout << "\n\nUsuario Acertado" << endl;
}
else
{
cout << "\n\nUsuario o Contrasena incorrecta, por favor verifique" << endl;
}
cin.get();
cin.get();
return 0;}
Cita de: SilverStun en 3 Noviembre 2014, 03:43 AM
mi duda es por que no me acepta la parte del strcmp gracias de antemano :)
En principio funciona bien, como indica
crack81. Eso sí, tienes que ajustar las librerías que en C++ no llevan .h e incluir el using:
#include <iostream>
# include <conio.h>
# include <cstdio>
# include <cstdlib>
# include <cstring>
using namespace std;
En todo caso dirá, tal como lo tenias, entrada incorrecta porque a la variable usuario no le das entrada, a no ser, tal como hizo crack81 que la declares antes.
Y ya que usas conio.h te puedes ahorrar el uso de dos.h para system cambiando ésta por getch, aunque lo que proceda es no usar la librería conio y sus funciones por no ser parte del estándar de C/C++.
Y sii como indica crack81 usas string has de incluir #include <string> en lugar de #include <cstring> y la comparación puede ser directa, sin el uso de strcmp:
if(Usuario=="Administrador" && Pass=="stun")
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Muchas gracias ya pruebo a ver cualquier cosa les digo ya lo voy a intentar
:P
Si utilizas ese codigo tendras muy poca seguridad.Solo bastara con analizar los strings del binario y hacer fuerza bruta al pass.Podrian depurar la aplicacion frenar en el strcmp y devolverle true y listo.
Cita de: L0RdP3I en 3 Noviembre 2014, 13:21 PM
Si utilizas ese codigo tendras muy poca seguridad.Solo bastara con analizar los strings del binario y hacer fuerza bruta al pass.Podrian depurar la aplicacion frenar en el strcmp y devolverle true y listo.
¿Y qué propones para evitar eso? Al final la decisión sobre si un acceso es válido o no la toma un salto condicional en ensamblador... cambiar ese código por su opuesto ( o cambiarlo por un salto incondicional) revienta totalmente el chequeo de usuario y contraseña.
Hacer todo lo posible para que no se encuentre ese salto.No soy un experto en ingenieria inversa , ni mucho menos en seguridad orientada a la defensa.
Lo primero que se me viene a la mente es:
Utilizar criptografia.
Añadir un packer.
Tecnicas anti-debugging.
Remover strings del binario.
Tratar de usar funciones que no son muy conocidas.Creo que lo primero que van a buscar es strcmp.
En fin como decis vos , siempre se va a poder.El tema es complicar un poco.