estoy tratando de hacer un pequeño programa que realice fuerza bruta para hallar un codigo.
internamene el programa victima ("es un crackme") hace esto con el serial ingresado:
ff08dc00=((1E71????.4)1E71????)-(1E71????*3e80)
donde las "?" son reemplazadas por los cuatro caracteres que se ingresan como primer cadena.
creo muy complicado tratar de revertir la formula ya que al guardar la segunda multiplicacion se pierde parte del numero, entonces he tratado de hacer que mi programa empiece desde "0000", realice este calculo y si el resultado es igual a ff08dc00 me muestre con que numeros ha encontrado la coinsidencia.
por el momento ya que mis conocimientos en programacion son bastantelimitados estoy trabajando con decimales.
ff08dc00=4278770688
3e80=16000
pero cuando el programa termina de ingresar todos los numeros (inicia en 0000 y termina en 9999)
no ha en contrado la cadena que deseo.
obviamente esto muestra que la cadena tambien tiene letras.
por el momento estoy utilizando este codigo en c++ builder:
Código
void __fastcall TForm1::Button1Click(TObject *Sender) { int a,b,c,d,e; #define MAX_VALUE 9999 bool encontrado=false; while(!encontrado && valor1->Text.ToInt()<=MAX_VALUE) { a=valor1->Text.ToInt(); b=a;//510722048+a; //valor decimal de 1E71000 d=16000*b; //valor decimal de 3E80 e=d-((4*b)*b); resultado->Caption=e ; //valor1->Text=valor1->Text; c=4278967296; //constante hexa->Caption=hexa->Caption+valor1->Text.ToInt(); if (e==4278967296){ encontrado=true; hexa->Caption="esta es tu cadena ...! "; } else { valor1->Text=valor1->Text.ToInt()+1; } } hexa->Caption="cadena no encontrada" ; }
mi problema es que no se como hacer para que tambien ingrese letras, y cuando lo haga como hago para que el programa no tome estas letras como tal sino que les de un valor con el que se pueda hacer el calculo, (tipo de variable que se le debe asignar).
he estado leyedo algunos cursos de programacion, pero solamente logro entender un poco cual es mi problema, pero no como resolverlos.
agradeceria cualquier ayuda...
salu2...