Ultimate CrackMe .net 2.0

Hallo zusammen,

Ich arbeite gerade an einem Programm, was ich schützen wollte.
Um nun zu testen, ob der Schutzmeschanismus was taugt habe ich eine kleines
CrackMe mit selbigem Schutz programmiert.

Ich persönlich finde den Schutz doch hsehr anspruchsvoll, da viele Routinen miteinander kombiniert wurden.
Aber seht selbst...

Verlangt wird ein Passwort, welches in der passwort.dll zuvor von mir gespeichert wurde.
Bei korrekter eingabe erscheint eine Meldung "Richtig!!!".

Erlaubt sind sämtliche Methoden des Crackings außer dem Patchen.

Sprache: VB .Net
Coder: Isch
Packer/Binder: keiner (kostet nur Zeit und bringt nichts^^)

HF

Kleiner Tipp:
Sucht nicht nach dem Passwort im Plaintext in der Exe, denn wie gesagt - Es ist in der passwort.dll
 
Code:
Public Sub Entschlüsseln_AES()
    Dim str7 As String = Me.FromBase64(Me.skey)
    Dim str5 As String = Me.FromBase64(Me.salt)
    Dim str6 As String = Me.FromBase64(Me.salt2)
    Dim sPassword As String = (str5 & str7 & str6)
    Dim sText As String = Me.DecryptData(sPassword, "passwort.dll")
    Dim str2 As String = Me.FromBase64(sText)
    Dim str3 As String = Me.FromBase64(str2)
    Dim s As String = Me.FromBase64(str3)
    Dim managed As New RijndaelManaged
    Dim count As Integer = &H10
    Dim str8 As String = Me.FromBase64(Me.skey2)
    Dim str11 As String = (str5 & str8 & str6)
    Dim provider As New MD5CryptoServiceProvider
    Dim buffer4 As Byte() = provider.ComputeHash(Encoding.UTF8.GetBytes(str11))
    provider.Clear
    Dim stream2 As New MemoryStream(Convert.FromBase64String(s))
    Dim buffer3 As Byte() = New Byte(&H10  - 1) {}
    stream2.Read(buffer3, 0, count)
    managed.IV = buffer3
    managed.Key = buffer4
    Dim stream As New CryptoStream(stream2, managed.CreateDecryptor, CryptoStreamMode.Read)
    Dim buffer As Byte() = New Byte(((CInt(stream2.Length) - count) + 1)  - 1) {}
    Dim num As Integer = stream.Read(buffer, 0, buffer.Length)
    s = Encoding.UTF8.GetString(buffer, 0, num)
    stream.Close
    managed.Clear
    Dim str As String = Me.FromBase64(s)
    If (Me.TextBox1.Text = str) Then
        MessageBox.Show("Richtig!!!")
    Else
        MessageBox.Show("Falsch!!!")
    End If
End Sub
Code:
Public Function DecryptData(ByVal sPassword As String, ByVal sFile As String) As String
    Dim str As String
    Dim managed As New RijndaelManaged
    Dim count As Integer = &H10
    Dim provider As New MD5CryptoServiceProvider
    Dim buffer4 As Byte() = provider.ComputeHash(Encoding.UTF8.GetBytes(sPassword))
    provider.Clear
    Dim stream2 As New MemoryStream(MyProject.Computer.FileSystem.ReadAllBytes(sFile))
    Dim buffer3 As Byte() = New Byte(&H10  - 1) {}
    stream2.Read(buffer3, 0, count)
    managed.IV = buffer3
    managed.Key = buffer4
    Dim stream As New CryptoStream(stream2, managed.CreateDecryptor, CryptoStreamMode.Read)
    Dim buffer As Byte() = New Byte(((CInt(stream2.Length) - count) + 1)  - 1) {}
    Dim num As Integer = stream.Read(buffer, 0, buffer.Length)
    Return Encoding.UTF8.GetString(buffer, 0, num)
    stream.Close
    managed.Clear
    Return str
End Function

soviel dazu ;)
 
Sollte mal AES werden ist im mom aber Rijindael.

Aber verscuh doch mal das PW rauszubekommen :-D

Da du ja den Sourcecode quasi besitzt ka woher^^ sollte das ja ein leichtes werden.
 
Der besitzt jeder, dem du dein kompiliertes Programm gibst. Reflector lässt grüssen.

Und, btw, Rijindael = AES :rolleyes:
 
Nagut, dann packe ich mein nächstes Crackme lieber doch :D
Wenn Rijindael = AES dann versteh ich das Kommentar oben nicht... Naja
 
Nagut, dann packe ich mein nächstes Crackme lieber doch
Irgendwelche Packer/Crypter da drüber zu lassen bringt auch nicht viel. Net Projekte sind nicht ganz so einfach zu schützen. Und ganz sicher ist sowie so nichts.(Jedenfalls, was dann auch noch praktikabel verwendet werden kann...)

Wenn Rijindael = AES dann versteh ich das Kommentar oben nicht... Naja
Den Kommentar. Wenn du da nicht mehr preisgibst was du nicht verstehst, wird man es dir auch nicht besser erklären können.
 
Das sollte kein Kommentar sein, ich wusste nur nicht was ich an den Spoiler schreiben sollte :D

vor meinem Edit stand da "lol" ;)
 
Achso...

Isser doch auch ^^
Überzeuge mich vom Gegenteil

Schau mal genauer hin dann , siehst du dass Entschlüsseln_AES nicht die einzige Routine ist, die das Passwort ermittelt.

Sind mindestens noch 3 Weitere

Gruß
 
Hab ich schon gemacht.
Ich kann dir auch den kompletten Sourcecode schicken, dann siehste ganz genau was passiert. Villeicht könntest du mir auch sagen was ich eventuell ändern könnte.
Natürlich ist der Schutz nicht das Maß aller Dinge, aber für meinen ersten reicht das.
Bevor ich den Code hier uppe, würde ich gerne erfahren, ob diese Methodik sicher ist oder nicht.
 
du brauchst den code nicht uppen. man kann ihn sich ja mit dem reflector ansehen. scheinbar hast dus noch nicht gemacht. ich hab nur n ausschnitt gepostet.

was du ändern könntest: nimm für sowas kein .NET

für solche sachen ist .NET nunmal nicht wirklich sicher.
 
Ich würde doch gerne in .Net bleiben.
Was könnte ich denn ändern, um den Code auch in .Net sicherer zu machen.

Im mom läuft es so ab:

Das passwort wird

1. mit Base64 gecryptet
2. mit Rijindael (momentan MD5 + base64) bald mit SHA1 + base64.
Zu methode 2 wird ein 512 stelliger Key verwendet werlcher vorher 2 x mit base64 gecryptet wurde.
Und Zusätzlich dazu wird vor und nach dem passwort "salt" (jeweils 2 verschiedene) (auch 512 stellig und mit 2x base64 gecryptet hinzugefügt)
3. Danach wird das ganze nochmal mit Base64 gecryptet
4. Und wieder mit Rijindael 2 veschiedene "salts" und wieder ein Key nach obigem Schema nur andere Zeichenfolge.
5. wird das ganze zur verwirrung wieder 3 mal mit base64 gecryptet.


Unknackbar ist das sicher nicht aber es kostet Zeit und zerrt an den nerven.
Mein Fehler hier war wohl dass ich das ganze nicht gepackt habe und man somt genau sehen kann was wann passiert.

Meine Frage dazu wäre jetzt ist diese villeicht unsinnige und chaotische methodik nutzbar oder kann man es besser bzw anders machen?

Gruß
Mad0xx
 
willst du das nicht verstehen? in .net isses einfach nie sicher. da helfen auch packer und obfuscatoren nix.
es ist zwar mit zeitaufwand verbunden, aber wenn man will bekommt man es immer relativ leicht raus.
 
Original von Mad0xx
Hab ich schon gemacht.
Ich kann dir auch den kompletten Sourcecode schicken, dann siehste ganz genau was passiert. Villeicht könntest du mir auch sagen was ich eventuell ändern könnte.
Natürlich ist der Schutz nicht das Maß aller Dinge, aber für meinen ersten reicht das.
Bevor ich den Code hier uppe, würde ich gerne erfahren, ob diese Methodik sicher ist oder nicht.
Du hast den Source Code bereits geuppt, du weist es bloss noch nicht XD
 
So, Ich habe mein Crackme nochmals bearbeitet.
Versucht doch jetzt mal das Passwort herauszufinden.

Erlaubt ist diesmal Alles, womit ihr das Passwort rausfinden könnt.

Die passwort.dll wird nicht mehr benötigt

Sprache: VB.net
Packer/Binder: Ja
Ziel: Passwortmeschanismus Cracken bzw. PW herausfinden.
Schwierigkeitsgrad: Sehr Schwer

P.S. Diesmal hat keiner den Sourcecode^^

HF
 
---------------------------

---------------------------
Glückwunsch - Du hast bestanden!
---------------------------
OK
---------------------------


1byte patch:
05AB700F /74 0F JE SHORT 05AB7020


oder

Serial = !Karina kommt aus Koblenz xD
 
Zurück
Oben