mein erstes ;-)

Hallo an Euch alle

ich hab mich auch mal an einem crackme versucht. da es in vb.net geschrieben wurde, dürfte es für die meisten nicht sehr schwer sein dies zu knacken. vielleicht schafft es dann ja sogar der eine oder ander dafür einen keygen zu erstellen.
 
Original von bouncecrowd
Hallo an Euch alle

ich hab mich auch mal an einem crackme versucht. da es in vb.net geschrieben wurde, dürfte es für die meisten nicht sehr schwer sein dies zu knacken. vielleicht schafft es dann ja sogar der eine oder ander dafür einen keygen zu erstellen.

Code:
private void Button1_Click(object sender, EventArgs e)
{
    int num;
    long num2;
    string s = "";
    string str3 = "";
    bool flag = true;
    if (Strings.Len(this.TextBox1.Text) == 5)
    {
        int num3 = this.TextBox1.TextLength - 1;
        for (num = 1; num <= num3; num++)
        {
            num2 = Conversions.ToLong(Conversions.ToString(num2) + Conversions.ToString(Strings.Asc(this.TextBox1.Text[num])));
        }
    }
    if (Strings.Len(num2.ToString()) >= 10)
    {
        num2 = Conversions.ToLong(Strings.Mid(Conversions.ToString(num2), 2, 8));
    }
    string str = this.wert(num2);
    int num4 = str.Length - 1;
    for (num = 0; num <= num4; num += 5)
    {
        string zahl = Strings.Mid(str, num + 1, 5);
        string str5 = Conversions.ToString(this.Quersumme(zahl));
        s = s + str5;
    }
    str3 = this.TextBox4.Text + this.TextBox5.Text + this.TextBox6.Text + this.TextBox7.Text;
    byte[] bytes = Encoding.ASCII.GetBytes(s);
    byte[] buffer = Encoding.ASCII.GetBytes(str3);
    MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
    byte[] buffer3 = provider.ComputeHash(bytes);
    byte[] buffer4 = provider.ComputeHash(buffer);
    int num5 = buffer3.Length - 1;
    for (num = 0; num <= num5; num++)
    {
        if (buffer4[num] == buffer3[num])
        {
            flag = false;
        }
        else
        {
            flag = true;
            break;
        }
    }
    if (!flag)
    {
        this.TextBox3.Text = "PASS";
    }
    else
    {
        this.TextBox3.Text = "FAIL";
    }
}

Reflector lässt grüßen :-D
 
wow, das ging schnell....nur sehe ich gerade net, ob du den login namen und den key hast? und leider kann ich aus deinem quelltext (sieht aus wie c#, kann das sein) nicht erkennen ob du einen gültigen key erzeugen kannst....kannst du ihn vielleicht in vb posten...kann ich besser lesen ;-)
c# will ich erst in naher zukunft lernen...zumindest mir mal anschauen
 
Hey,

hier den Code nochmal auf VB:
Code:
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim num As Integer
    Dim num2 As Long
    Dim s As String = ""
    Dim str3 As String = ""
    Dim flag As Boolean = True
    If (Strings.Len(Me.TextBox1.Text) = 5) Then
        Dim num3 As Integer = (Me.TextBox1.TextLength - 1)
        num = 1
        Do While (num <= num3)
            num2 = Conversions.ToLong((Conversions.ToString(num2) & Conversions.ToString(Strings.Asc(Me.TextBox1.Text.Chars(num)))))
            num += 1
        Loop
    End If
    If (Strings.Len(num2.ToString) >= 10) Then
        num2 = Conversions.ToLong(Strings.Mid(Conversions.ToString(num2), 2, 8))
    End If
    Dim str As String = Me.wert(num2)
    Dim num4 As Integer = (str.Length - 1)
    num = 0
    Do While (num <= num4)
        Dim zahl As String = Strings.Mid(str, (num + 1), 5)
        Dim str5 As String = Conversions.ToString(Me.Quersumme(zahl))
        s = (s & str5)
        num = (num + 5)
    Loop
    str3 = (Me.TextBox4.Text & Me.TextBox5.Text & Me.TextBox6.Text & Me.TextBox7.Text)
    Dim bytes As Byte() = Encoding.ASCII.GetBytes(s)
    Dim buffer As Byte() = Encoding.ASCII.GetBytes(str3)
    Dim provider As New MD5CryptoServiceProvider
    Dim buffer3 As Byte() = provider.ComputeHash(bytes)
    Dim buffer4 As Byte() = provider.ComputeHash(buffer)
    Dim num5 As Integer = (buffer3.Length - 1)
    num = 0
    Do While (num <= num5)
        If (buffer4(num) = buffer3(num)) Then
            flag = False
        Else
            flag = True
            Exit Do
        End If
        num += 1
    Loop
    If Not flag Then
        Me.TextBox3.Text = "PASS"
    Else
        Me.TextBox3.Text = "FAIL"
    End If
End Sub

Das sollte so ziemlich dein Überprüfungscode sein^^
 
hey...

ja, das ist soweit richtig. ich denke mal du hast auch reflector verwendet.
was ich nicht ganz verstehe - wahrscheinlich, weil ich es noch nicht benutzt hab - warum zeigt reflector nur diesen code an...im hintergrund passieren noch ein paar berechnungen in anderen functions...warum sieht man die nicht?
 
Die sieht man auch, vermutlich hat er halt nur die entsprechenden anderen Berechnungen nicht gepostet.

Lade dir doch einfach mal den Reflector und sieh dir deine eigene .exe an, dann wirst du vermutlich auch verstehen, warum ein Crackme in jeglicher .NET Sprache ohne weitere Mechanismen eher sinnlos sind ;)
 
Hi AlterHacker ist ja wohl wichtig ;) :P
Scherz beiseite, ich hab mir jetzt mal den reflector runtergeladen und es mir angeschaut
man sieht ja wirklich alles....nur denke ich - schlagt mich nicht bzw. korrigiert mich wenn ich falsch liege - muß man es erst nachproggen um auf ein ergbnis zu kommen, oder sehe ich das jetzt falsch?
 
Copy-Paste von dem interessanten Teil reicht doch, ist immerhin viel leichter als dir das in Assembler selber herauszusuchen
 
ja, dann danke ich erstmal allen, die sich die mühe gemacht haben da mal drauf zu schauen. will ja nicht nerven, eine frage hätte ich aber noch...da niemand einen login mit dazu gehörigem key gepostet hat...ist es so, wenn der quelltext offen liegt ist die sache erledigt?
ist wie gesagt nur 'ne frage...interessiert mich schon, da ich ja keine abfrage in dem sinne suche login name xyz mit key 123abc gemacht hab, sondern es erst bei der eingabe berechnen lasse und dann den hash vergleiche. und somit kann man ja die daten nicht direkt auslesen.
 
Natürlich

Original von bouncecrowdinteressiert mich schon, da ich ja keine abfrage in dem sinne suche login name xyz mit key 123abc gemacht hab, sondern es erst bei der eingabe berechnen lasse und dann den hash vergleiche. und somit kann man ja die daten nicht direkt auslesen.

Abfrage = Abfrage !
Letztendlich wird - je nach dem - StrCmp - aufgerufen und da kann man sehr schön sehen, welche 2 Passwörter verglichen werden.

Am besten ist es, du lässt dir das Passwort berechnen -> du gehst verschieden - unter Anderem auch selbstausgedachte - Algorithmen durch und benützt einen Flag .. Jedoch ist ein Glied nur so stark wie sein schwächstes Mitglied -> die Abfrage, welche es in ALLEN "geschützten" Programmen am Schluss gibt -> die ist leicht zu patchen, weshalb auch nun das Patchen nicht mehr die Kunst der Sache ist, sondern den Algo brechen :D um eventuell einen Keygen zu schreiben.

MfG
 
haben da mal drauf zu schauen. will ja nicht nerven, eine frage hätte ich aber noch...da niemand einen login mit dazu gehörigem key gepostet hat...ist es so, wenn der quelltext offen liegt ist die sache erledigt?
Naja, vielleicht liegt das auch daran, dass man ersmal mit unbeschriftetem Dialog und vielen Editfeldern konfrontiert wird und nicht weiß, was man wohin eingeben muss ;). Da bekommt man nur solche Fehlermeldungen zu sehen:
************* Ausnahmetext **************
System.InvalidCastException: Ungültige Konvertierung von der Zeichenfolge in Typ Long. ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDecimal(String Value, NumberFormatInfo NumberFormat)
bei Microsoft.VisualBasic.CompilerServices.Conversions.ToLong(String Value)
--- Ende der internen Ausnahmestapelüberwachung ---
bei Microsoft.VisualBasic.CompilerServices.Conversions.ToLong(String Value)
bei WindowsApplication1.Form1.wert(Int64 test)
bei WindowsApplication1.Form1.Button1_Click(Object sender, EventArgs e)
bei System.Windows.Forms.Control.OnClick(EventArgs e)

Ich musste erst in den Quelltext schauen, um herauszufinden, welche Eingaben das Crackme vom mir haben will - und das ist nicht gerade interessefördernd ;).

Btw: hilfreicher Link zum Patchen:
http://fandigunawan.googlepages.com/CIL-Opcode-fin.pdf
(2c zu 2d an 0x199c).
 
Zurück
Oben