Einfache Fragen zum "CrackME" [SOLVED]

Hallo alle zusammen.

Ich hätte da mal eine kleine Frage an euch :D
Ich habe hier mit Visual Basic 2005 ein kleines Programm erstellt wo man einen bestimmten Wert eingeben muss um eine Messagebox mit "Richtig" zu erhalten.
Man kann es nicht WIRKLICH als Crackme bezeichnen,da das "Passwort" im Quelltext steht und sonst gar keine Funktionen eingebaut sind um es einem zu erschweren.

Darum geht es mir auch gar nicht.

Ich wollte fragen wenn jemand das Passwort rausgefunden hat WIE er es gemacht hat.
D.h "Ich habe das Passwort im Quelltext gelesen" oder auch "Ich habe einfach das Programm so verändert,dass es bei egal welcher Eingabe sofort zu "Richtig" springt.

Mich interessiert einfach WIE sowas gemacht wird :)


Frage 2 :

Wenn ihr CrackME's programmiert, WIE macht ihr das? (Ich bräuchte ein paar Tips da ich gerade erst Visual Basic lerne und noch nie etwas in der Richtung gemacht habe).
Grundsachen reichen völlig, keiner braucht hier sein Know How öffentlich zu machen :]

Ihr speichert die Key's oder Passwörter ja bestimmt NICHT im Quelltext.

Was für Methoden benutzt ihr dafür?

Ich bedanke mich bei euch im Vorraus :)



Vllt programmiere ich in einiger Zukunft ja anspruchvollere CrackME's :)


MFG
 
Hallo,
bei solch einem CrackMe ist es wohl das leichteste mit dem Programm 'strings' einfach alle enthaltenen Strings aus der Datei auslesen, dabei taucht dann auch das Passwort auf.


Um dies zu erschweren, speichert man das Passwort nicht im Klartext ab. Sondern die User Eingabe wird genommen und schön durch den Fleischwolf gedreht. Das heißt, Buchstaben werden vertauscht, zu den Buchstaben (Char-Code) werden Zahlen addiert/subtrahiert die evt. sich aus einem Algorithmus/Pseudo-Zufallsgenerator ergeben. Evt. bildet man noch Hash-Werte von der Eingabe etc.

Dann, dass was am Ende raus kommt, wird mit dem abgespeichertem verglichen. So könnte er dann zwar das abgespeicherte Lesen, müsste aber deine ganzen Schritte des Fleischwolfes rückwärts durchlaufen und wenn du z.B. ein One-Way-Hashverfahren mitverwendest, würde er daran hängen bleiben.

Ein anderes Problem wäre jetzt: Man könnte aus dem if(Fleischwolf(UserEingabe) == AbgespeichertesFleischwolfErgebnis) einfach ein Ungleich daraus machen und schon würde die Bedingung erfüllt werden, wenn man einen falsches PW eintippt.

Des Wegen musst du so oft wie möglich auf den Wert des Fleischwolfes zurückgreifen. Das kann sein, indem du öfters das PW in deinem Prog überprüfst oder das Ergebnis mit in Berechnungen mit verwendest, die dann bei falschen PW falsch wären etc.
 
1)NET wird zwar zugegebenermaßen immer beliebter, dennoch beschäftigen sich wohl die meisten immer noch mit "direktem CPU-Code" sprich mit Programmen, die nicht im Zwischencode (wie Java,NET) vorliegen. Auch für NET soll es eigene Debugger geben (ich kenne mich mit NET Zeug nicht aus ;) ) und auch Disassembler. Solange man aber nicht für die Erzeugten NET Programme einen sogenannten Obfocusator (ein Programm, das Nachträglich den Code unleserlich mach, da soll es einige geben, auch wenn google irgenwie nichts zu "obfocusator" hergeben mag - kann auch an der falschen Schreibweise liegen) benutzt, kann man z.B mit Reflector
http://www.aisto.com/roeder/dotnet/

Code:
Private Sub btt_Check_Click(ByVal sender As Object, ByVal e As EventArgs)
      If (Operators.CompareString(Me.SERIALNR.Text, "w00t", False) = 0) Then
            MessageBox.Show("RICHTIG!")
            Me.Hide
            MyProject.Forms.Form1.Show
      Else
            MessageBox.Show("FLASCH!")
      End If
End Sub
lesen. Was dann wohl etwas einfach ausschaut ;). Auch wenn kompliziertere Verfahren eingebaut werden - diese Routinen können einfach herauskopiert und zum generieren der Schlüssel benutzt werden bzw es ist dann um einiges einfacher, den Algorithmus oder die richtige Stelle herauszufinden.

2)
Naja, man könnte ja z.B statt (if eingabe=="passwort" then richtig)
eine berechnung einbauen. Z.B
Code:
if (ASCII_Summe(eingabe_name)+1337)=eingabe_schluessel then richtig)
noch besser wäre es allerdings, sowohl mit dem Schlüssel wie mit dem Namen verschiedene Berechnungen anzustellen und niemals eine "fertige", aus dem Namen berechnete Serial/Key direkt mit der User-Key-Eingabe zu vergleichen.

Wenn Du selber ein paar Crakckmes löst, siehst Du gleich auch gleich die Schwachstellen, die man dann in eigenen natürlich vermeiden sollte.
 
Vielen Dank

So da bin ich wieder.

Vielen Dank für die Antworten :)

Dass man mit den richtigen Tools den Sourcecode von .NET Programmen wieder sichtbar machen kann wusste ich ja gar nicht!
Microsoft setzt ja gross auf diese Plattform und will ja auch viele Professionelle Programmierer dazu bewegen ihre Software auf dem .NET Framework zu programmieren.

Schade,dass die nicht an sowas gedacht haben.

Für einen wie mich der nur als Hobby programmiert und im Alltag nicht arbeitet (Bin Beamter :D ) ist VB eine gute Sprache um schnell ein kleines Tool zu programmieren :]


Zu Frage 2.

Danke auch hier für die Antworten,hat mir schon sehr weitergeholfen.
Vom Prinzip her verstehe ich eure Antworten,nur wie ich das in VB umsetze ist mir noch nicht so ganz klar was aber warscheinlich daran liegt,dass meine Kenntnisse noch sehr ausbaufähig sind was man ja auch an meinem Source erkennen kann ;)

Werde mal versuchen sowas umzusetzen.

Vielen Dank



P.S

Ich hatte letzte Nacht nicht gut einschlafen können und hatte eine Idee die ich aber ganz schnell verworfen habe da etwas so simples auch dann warscheinlich sehr simpel zu knacken sein wird *G*

Nehmen wir an der User muss einen Namen eingeben und dazu eine Serial.
Maximale Länge 8 Zeichen.

Der Serial Key würde folgendermassen ausgerechnet (BSP) A = 1, B = 2, C = 3 u.s.w
Für den Namen ABC würde man also den Key 123 benötigen.

Wie gesagt aber wieder verworfen :)
Da sind bestimmt Sachen die ich nicht berücksichtigt habe *G*
 
Zurück
Oben