papaschlumpf7777: Passwort-Knacker verursacht `Out uf memorie & `Stack overflow

Beitrag lesen

Vor kurzem bin ich auf eine Website gestoßen, wo `Hackits zu lösen sind.
Das sind legale Aufgaben die Spaß machen und einen Lern-Effekt haben.
Bei Erfolg darf man sich dann ins Gästebuch eintragen.
Bis Level 12 hatte ich keine größeren Probleme.
Nachdem ich Level 13 entschlüsselt hatte und mir den Quelltext ansah, stellte ich fest, daß diese JavaScript-Aufgabe nur mit einem Passwort-Knack-Programm zu lösen ist. Die Gleichung läßt sich nicht umdrehen um die Unbekannte(Passwort) zu errechnen.

Erstens kenn ich mich mit offiziellen Passwort-Knack-Programmen nicht aus und zweitens möchte ich ja programmieren lernen. So ging ich dran mir ein eigenes Programm in JavaScript zu schreiben...

Die ersten Versuche waren mit verschachtelten Schleifen zwar klein, aber auch unübersichtlich.
Das Problem ist, daß keins funzte.
Stack overflow... und Out of memorie... wurden meine nicht gewollten und ständig präsenten Fehlermeldungen.

Da es sich bei dem gesuchten Passwort um ein Passwort mit 8 Stellen und vermutlich nur kleinen Buchstaben handelt, habe ich Mitlerweile auf die Eingabe der Stellen verzichtet und für jede Stelle eine eigene Variable und eine eigene Funktion erstellt, da ich dachte somit den Fehlermeldungen zu entweichen und dem eigentlichen Ziel etwas näher zu kommen ...

Hier der Quelltext, den ich leicht Verständlich und mit Kommentaren versehen habe:

<html>
<head>
 <title>Passwort-Knacker</title>
</head>

<body onLoad="auf_Null_setzen()">

<script type="text/javascript">
<!-- Globale Variabeln ***Arrays werden hierbei nicht benötigt*** //-->

var Stellen        = 8;           // Anzahl der Stellen des Passwortes ***wird hierfür nicht benötigt***
var Bereich_Anfang = 97;          // Beginnt mit dem kleinen a
var Bereich_Ende   = 122;         // Endet   mit dem kleinen z
var pass           = new Array(); // hier hatte ich die globalen Variabeln,
var pass_Zahl      = new Array(); // für die benötigten Arrays,
var pass_Array     = new Array(); // deklariert.
var wo_steht_was   = new Array(); // in diesem Programm werden sie z.Z. nicht benötigt...

function auf_Null_setzen()
{
 for (i=0; i<= (Stellen-1);++i)
 {
  Position_00  = Bereich_Anfang;
  Position_01  = Bereich_Anfang;
  Position_02  = Bereich_Anfang;
  Position_03  = Bereich_Anfang;
  Position_04  = Bereich_Anfang;
  Position_05  = Bereich_Anfang;
  Position_06  = Bereich_Anfang;
  Position_07  = Bereich_Anfang;
  pass_Position_00 = String.fromCharCode(Position_00);
  pass_Position_01 = String.fromCharCode(Position_01);
  pass_Position_02 = String.fromCharCode(Position_02);
  pass_Position_03 = String.fromCharCode(Position_03);
  pass_Position_04 = String.fromCharCode(Position_04);
  pass_Position_05 = String.fromCharCode(Position_05);
  pass_Position_06 = String.fromCharCode(Position_06);
  pass_Position_07 = String.fromCharCode(Position_07);
 }
 Stelle_00();
}

function Stelle_00()        // Erhöhung der ersten Stelle des Passwortes
{
 for (i_Stelle_00=Bereich_Anfang; i_Stelle_00<= Bereich_Ende;++i_Stelle_00)
 {
  Position_00      = i_Stelle_00;
  pass_Position_00 = String.fromCharCode(Position_00);
  pass             = pass_Position_00 + pass_Position_01 + pass_Position_02 + pass_Position_03 + pass_Position_04 + pass_Position_05 + pass_Position_06 + pass_Position_07;

document.write(pass+"_"); // Dient nur zur Überprüfung während der Programierung.
                            // An dieser Stelle steht normal die Übergabe zu der
                            // Passwort-Abfrage-Funktion die ich zur besseren Übersicht entnommen habe.
 }
  document.write("<br>");   // Dient nur zur überschaulichen Überprüfung während der Programierung.
  Stelle_01();
}

function Stelle_01()        // Erhöhung der zweiten Stelle des Passwortes
{
 if (Position_01 <= Bereich_Ende -1)
 {
  ++Position_01;
  pass_Position_01 = String.fromCharCode(Position_01);
  Stelle_00();
 }
  document.write("<br>");   // Dient nur zur überschaulichen Überprüfung während der Programierung.
  Position_01  = Bereich_Anfang - 1;
  Stelle_02();
}

function Stelle_02()        // Erhöhung der dritten Stelle des Passwortes
{
 if (Position_02 <= Bereich_Ende -1)
 {
  ++Position_02;
  pass_Position_02 = String.fromCharCode(Position_02);
  Stelle_00();
 }
  document.write("<br>");   // Dient nur zur überschaulichen Überprüfung während der Programierung.
                            // Wenngleich das Programm nicht soweit kommt
  // An dieser Stelle soll zu der nächsten Funktion verwiesen werden ...
  // Leider bleibt das Programm schon hier, bei dem kleinen i,
  // wegen "Out of memory .." stehen.
  // Ähnliche Versuche erzeugten an gleicher Stelle (+-)
  // den Fehler: "Stack overflow ..."
  //
  // Gibt es Möglichkeiten den Speicher, an einer beliebigen Stelle,
  // zurück zu setzen oder genügend Speicher zu deklarieren???
  //
  // Gibt es in JavaScript überhaupt eine Möglichkeit ein Passwort-Knack-Programm zu schreiben ???
  // Die erforderliche Variable für die Überprüfungs-Funktion muß immer gleich bleiben.   // In diesem Fall heist sie pass.
}

</script>

</body>
</html>

Ein Dankeschön schon im Vorfeld für Eure Hilfe!