001
24.12.2004, 21:10 Uhr
virtual
Sexiest Bit alive (Operator)
|
Zitat von morbid: |
ich hab einen password breaker geschrieben der einen vier stelligen zahlen code knakt leider funktioniert dieser nicht wirklich kann mir einer sagen was dran falsch ist?
|
Keine Ahnung, ich habe das Programm vermutlich nicht verstanden:
Zitat von morbid: |
C++: |
//passwordbreaker #include <iostream> #include <string> #include <conio.h> #include <morbid_cls.h> //cls header #include <time.h> #include <math.h>
using namespace std;
/*Prinzip: Es werden 4 zufallszahlen generiert die je nach reihenfolge...mal 1000 mal 100 mal 10 oder mal 1 genommen werden. Diese werden dann zusammengezählt zu einer zahl die dann an der stelle der Passwort eingabe eingesetzt wird. Was eigentlich funktionieren müsste was es aber nicht tut.... */
|
|
Anders ausgedrückt: Du willst eine vierstellige Zahl durch Zufall bestimmen und deren Quersumme berechnen. Ich schlage für eine solche Funktion in etwa das hier vor:
C++: |
/* Ermittelt eine vierstellige Zufallszahl, also eine Zahl 1000...9999 */ unsigned vierstellige_zufallszahl() { return rand()%9000 + 1000; }
/* Ermittelt die Quersumme einer zahl */ unsigned quersumme(unsigned zahl) { unsigned qs = 0; while (zahl) { qs += zahl%10; zahl /= 10; } return qs; }
|
Mit diesen beiden Funktionen kann man nun ca. 90% der breaker Routine von Dir erschlagen...
Zitat von morbid: |
C++: |
int breaker(int, int);
int main() { int pass, kor, d; kor=8345; while(pass!=kor) { cout << "\n\tBitte Passwort eingeben: "; //passworteingabe for(pass; pass=!kor; breaker(pass, kor)) { } d=breaker(pass, kor); pass=d; cout << d; clrscr(); //kann man weglassen nur der schönheit halber } cout << "\n\tRichtig drueck was!"; getch(); return 0; }
|
|
I am lost: kor ist das korrekte Password und du willst, daß jemand ein Password eingibt in pass? - Die Eingabe fehlt. Die while Schleife ist schrott, weil pass nicht initialisiert ist, die for schleife ist falsch angewendet. Wofür brauchst Du dann Zufallszahlen?
Zitat von morbid: |
C++: |
int breaker(int a, int b) { srand(time(NULL)); int d,e,f,g,h; char c[10]={'1','2','3','4','5','6','7','8','9','0'}; for(a; a!=b; a++) { c[0]=rand()%9; //zufallszahlen maximalwert 9 c[1]=rand()%9; c[2]=rand()%9; c[3]=rand()%9; }
|
|
Siehe mein Beispiel vierstellige_zufallszahl. Darüber hinaus: 1. rand()%9 lieft Zufallszahlen zwischen 0 und 8, nicht 9 2. Sprechende Variablennamen verwenden! 3. srand an den Anfang von main ziehen, siehe FAQ.
Zitat von morbid: |
C++: |
//ifs ganz viele verdamt^^: //___________________________________________ //für [0] stelle
if(c[0] == '0') { e=0; } if(c[0] == '1') { e=1000; } if(c[0] == '2') { e=2000; } if(c[0] == '3') { e=3000; } if(c[0] == '4') { e=4000; } if(c[0] == '5') { e=5000; } if(c[0] == '6') { e=6000; } if(c[0] == '7') { e=7000; } if(c[0] == '8') { e=8000; } if(c[0] == '9') { e=9000; } //für [1] stelle if(c[1] == '0') { f=0; } if(c[1] == '1') { f=100; } if(c[1] == '2') { f=200; } if(c[1] == '3') { f=300; } if(c[1] == '4') { f=400; } if(c[1] == '5') { f=500; } if(c[1] == '6') { f=600; } if(c[1] == '7') { f=700; } if(c[1] == '8') { f=800; } if(c[1] == '9') { f=900; } //für [2] stelle if(c[2] == '0') { g=0; } if(c[2] == '1') { g=10; } if(c[2] == '2') { g=20; } if(c[2] == '3') { g=30; } if(c[2] == '4') { g=40; } if(c[2] == '5') { g=50; } if(c[2] == '6') { g=60; } if(c[2] == '7') { g=70; } if(c[2] == '8') { g=80; } if(c[2] == '9') { g=90; } //für [3] stelle if(c[3] == '0') { h=0; } if(c[3] == '1') { h=1; } if(c[3] == '2') { h=2; } if(c[3] == '3') { h=3; } if(c[3] == '4') { h=4; } if(c[3] == '5') { h=5; } if(c[3] == '6') { h=6; } if(c[3] == '7') { h=7; } if(c[3] == '8') { h=8; } if(c[3] == '9') { h=9; } d=e+f+g+h; //zusammenzählen der 4 zahlen return d; //damit man eine zahl erhält }
|
|
Siehe meine funktion quersumme, die das gleiche macht.
Ich habe leider das Programm nicht begriffen, weil breaker etwas macht, was ich zwar begreife, aber main nicht begriffen habe. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |