CrackMe / KeyGenMe

Ein recht herzliches Hallo an alle,

ich programmiere seit ca. 2 Wochen nebenbei ein bisschen und hab mich vor
kurzen an meinem ersten KeyGen Me versucht.

Folgendes ist dabei rausgekommen:
keygenme.jpg


Gecodet ist das ganze in C#. Damit es nicht zu einfach wird und ihr mit
.NET Reflector den Code auslest, ist es obfuscated.
Das Passwort ist "dynamisch".

Ziel(e) ist(sind):
-KeyGen schreiben
-Funktionierende Login-Daten zu bekommen
-Patchen

Die Wichtigkeit der Punkte ist absteigend angeordnet.

SelfKeyGen ist nicht erwünscht.


Wenn jemand es schafft zu lösen, bitte eine kurze Anleitung dafür bereitstellen.
Auserdem würde mich interessieren wie schwer ihr es einschätz.
1 = Easy
..
..
5 = Very hard


Viel spaß!
 
Zuletzt bearbeitet:
Hi Lizzaran,

dein Keygen fand ich ganz interessant, daher habe ich mich mal dran gemacht (Solver attached, nicht obfuskiertes C#, also mit Source, du wirst sicher einiges wiedererkennen).

Verschlüsselung, Hardware-Id mit WMI über die Objekt-Management-Datenbank, Patch-Protection über MD5-Vergleich der exe mit dem im Web abgelegten Wert (http://keygenme.110mb.com/check.txt) , Multithreading, Regular Expressions ..., dafür dass du seit "2 Wochen nebenbei ein bisschen" programmierst: alle Achtung!! Wie hast du das nur geschafft??:rolleyes:

Das Knacken deines mit codefort verschleierten Codes war nicht allzu schwierig, da der Codefort alle strings äußerst primitiv mit einem einzigen Byte als Key xor-verschlüsselt (Mal alle Key-Bytes bei irgendeinem String durchprobieren, dann hat man den Key sehr schnell: 0x3f). Aber möglicherweise ist Codefort nur in der Community-Edition so schwach.

Der Rest war dann Fleissarbeit mit Reflector (ungefähr so 10 Minuten nebenbei ein bisschen ....;)).
Ein ausführlicheres Tut kommt auch noch (weiss aber noch nicht wann, da momentan wenig Zeit).

Last not least: Bei mir crasht deine SW beim Shutdown reproduzierbar. Möglichwerweise doch eine Racecondition mit deinen Threads, troz der "Aborts" im "FormClosing".

Greetz und thx

-josh
 
Hi Lizzaran,

dein Keygen fand ich ganz interessant, daher habe ich mich mal dran gemacht (Solver attached, nicht obfuskiertes C#, also mit Source, du wirst sicher einiges wiedererkennen).

Verschlüsselung, Hardware-Id mit WMI über die Objekt-Management-Datenbank, Patch-Protection über MD5-Vergleich der exe mit dem im Web abgelegten Wert (http://keygenme.110mb.com/check.txt) , Multithreading, Regular Expressions ..., dafür dass du seit "2 Wochen nebenbei ein bisschen" programmierst: alle Achtung!! Wie hast du das nur geschafft??:rolleyes:

Das Knacken deines mit codefort verschleierten Codes war nicht allzu schwierig, da der Codefort alle strings äußerst primitiv mit einem einzigen Byte als Key xor-verschlüsselt (Mal alle Key-Bytes bei irgendeinem String durchprobieren, dann hat man den Key sehr schnell: 0x3f). Aber möglicherweise ist Codefort nur in der Community-Edition so schwach.

Der Rest war dann Fleissarbeit mit Reflector (ungefähr so 10 Minuten nebenbei ein bisschen ....;)).
Ein ausführlicheres Tut kommt auch noch (weiss aber noch nicht wann, da momentan wenig Zeit).

Last not least: Bei mir crasht deine SW beim Shutdown reproduzierbar. Möglichwerweise doch eine Racecondition mit deinen Threads, troz der "Aborts" im "FormClosing".

Greetz und thx

-josh

Hey Josh,

das hab ich mir schon gedacht, das du es als erstes lösen wirst ;)
Mit der Patch-Protection war / bin ich eig. garnicht zufrieden weil ich da was andres / größeres vor hatte.. konnte es aber leider nicht umsetzen =\

Mhm ja in 2 Wochen kann man einiges lernen. Hab zuerst nur kleine Programme geschrieben welche die einzelnen funktionen dieses KeyGen Me's beinhalteten und vor kurzem eben alles zusammengewürfelt.
Natürlich nebenbei auch immer auf msdn unterwegs gewesen.
Hab mittlerweile wieder was kleines hinzugefügt, und zwar ein Login-System, welches man zuerst knacken / patchen muss um zum eigentlichen KeyGen Me zu kommen. Basierend auf C#, php und SQL.

Das war meine befürchtung, das es an codefort scheitert(also mein KeyGen Me) und somit relativ easy der code ausgelesen wird im reflector.

Das mit dem Crash kann ich leider nicht nachvollziehen. Ich hab keinerlei Probleme damit. Welches OS benutzt du denn?
Hab es nämlich nur auf Win7 x64 testen können, da ich erst die virtuellen Maschinen aufsetzten muss.

Zum Schluss hätte ich noch ein paar Fragen an dich, und zwar:
Mit welchen Programmen schütze ich meines am besten?
Codefort war anscheinend nicht wirklich das gelbe vom Ei.
Welchen Obfuscator sollte ich stattessen verwenden?
Sollte ich einen Protector verwenden? Wenn ja, welche könntest du mir empfehlen?
Gibt es sonst noch Tricks die ich beachten sollte?


ich bedanke mich dann schonmal recht herzlichst bei dir :wink:

mfg. lizz
 
Deshalb sollte man eher in solchen Dingen bei C/C++ + inline ASM bleiben. Eine bessere Kombi für Crack-/Reverse-/..-Me's kenne ich jedenfalls nicht.
Natürlich macht die Programmiersprache o. die Kombination davon ein Programm nicht unknackbar, aber dennoch erschwert es jemanden an die Lösung zu kommen.
Du hast es selbst auch eingesehen, aber der Umstieg fällt irgendwie jedem immer schwer. Ein Einstieg in C# ist leicht wie ein Einstieg in VB, und ich sehe diese Programmiersprachen wirklich sehr oberflächlich. Das "wieso?" ich die Sprachen als oberflächlich definiere ist aber nicht das Thema :)

Im Endeffekt ist es sinnvoller C/C++ (aufwärts^^) zu lernen, wohl vielleicht einbisschen komplexer als andere Sprachen aber es lohnt sich.

Einen Protector für Programme zu schreiben ist alteisen, natürlich ist es ratsam für Testzwecke einen zu schreiben um zu Wissen, wie viele ihre Programme durch einen Protector(selfcoded oder eingebunden) geschützt haben.

Einen eigenen Code-Obfuscator zu erstellen - der auch einwandfrei funzt - ist schon eine Leistung. :)


Eine Hürde die ich kenne und jeden Umsteiger zu Stimmungsschwankungen verleiten kann ist bspw. der Unterschied im Casting der Datentypen^^ Nach diesem Verständnis kommt alles von selbst. Natürlich liegt es bei dir ob du umsteigen möchtest oder nicht.

MfG
Keci

P.S.. schuldigung für meinen Satzbau o.ä. :O
 
Deshalb sollte man eher in solchen Dingen bei C/C++ + inline ASM bleiben. Eine bessere Kombi für Crack-/Reverse-/..-Me's kenne ich jedenfalls nicht.
Natürlich macht die Programmiersprache o. die Kombination davon ein Programm nicht unknackbar, aber dennoch erschwert es jemanden an die Lösung zu kommen.
Du hast es selbst auch eingesehen, aber der Umstieg fällt irgendwie jedem immer schwer. Ein Einstieg in C# ist leicht wie ein Einstieg in VB, und ich sehe diese Programmiersprachen wirklich sehr oberflächlich. Das "wieso?" ich die Sprachen als oberflächlich definiere ist aber nicht das Thema :)

Im Endeffekt ist es sinnvoller C/C++ (aufwärts^^) zu lernen, wohl vielleicht einbisschen komplexer als andere Sprachen aber es lohnt sich.

Einen Protector für Programme zu schreiben ist alteisen, natürlich ist es ratsam für Testzwecke einen zu schreiben um zu Wissen, wie viele ihre Programme durch einen Protector(selfcoded oder eingebunden) geschützt haben.

Einen eigenen Code-Obfuscator zu erstellen - der auch einwandfrei funzt - ist schon eine Leistung. :)


Eine Hürde die ich kenne und jeden Umsteiger zu Stimmungsschwankungen verleiten kann ist bspw. der Unterschied im Casting der Datentypen^^ Nach diesem Verständnis kommt alles von selbst. Natürlich liegt es bei dir ob du umsteigen möchtest oder nicht.

MfG
Keci

P.S.. schuldigung für meinen Satzbau o.ä. :O

Ja da hast du schon recht mit C++, wäre mir grundsätzlich auch lieber. Nur muss ich mich "leider" weiter mit C# & Java beschäftigen, weils die Arbeit so verlangt.
Vielleicht schau ich mir in den nächsten Tagen nebenbei etwas die Syntax von C++ an wenn ich Zeit dafür finde.

mfg lizz
 
Hi Lizz,

hier noch meine Antworten auf deine Fragen:

Mit welchen Programmen schütze ich meines am besten? Codefort war anscheinend nicht wirklich das gelbe vom Ei.
Welchen Obfuscator sollte ich stattessen verwenden?
Ehrlich gesagt, ich kann dir die Antwort nicht geben. Ich habe mich bisher nur ganz am Rand mit .net obfuscation beschäftigt. Vor längerer Zeit habe ich mal die in VStudio integrierte Schmalspurversion vom Dotfuscator probiert: Die hat nicht mal die Strings verschlüsselt. Eine angeforderte Trialversion wurde zwar "bewilligt" und geschickt, aber die wollte partout immer "nach Hause telefonieren", und das war auch nach Rückfrage nicht abzuschalten. Da habe ich es gelassen. Und der Preis war extrem hoch (einige Tausend Euro). Es war dann auch projektmässig nicht mehr relevant. Aber es gibt hier im Board sicherlich Leute, die diesbezüglich mehr Erfahrung haben.
Sollte ich einen Protector verwenden? Wenn ja, welche könntest du mir empfehlen?
Auch diese Antwort fällt mir schwer, da ich damit noch weniger Erfahrung habe. Remotesoft macht auf ihrer Homepage auch Sprüche, die alle gut klingen. Aber wenn ich keinen Quellcode sondern "nur" native Assembler habe, bin ich da, wo ich bisher bezüglich Reversing auch schon war, und damit bei den altbekannten Tools, die mittlerweile ja einen erheblichen Reifegrad besitzen.
Meine (ganz private) Meinung ist, dass ich es von Microsoft ein Unding finde, dass die das Problem "Schutz des geistigen Eigentums" (darum geht es ja im Grund) ganz allein dem Anwender aufbürden, und nix, aber auch gar nix dafür tun. C# ist zweifelsohne eine sehr produktive und mächtige Programmierumgebung (und IMO in keiner Weise "Schmalspur"), aber warum mir der Hersteller (MS) nicht wenigstens denselben Schutz bietet wie bisher, nämlich die Bereitstellung einer Möglichkeit, "nativen" Assemblercode zu bekommen (womit z.B. Remotesoft wirbt, tolle Innovation), das begreife ich nicht.
Gibt es sonst noch Tricks die ich beachten sollte?
Spezifisch für .NET Programme? Ich persönlich halte Anti-Patch-Schutz für sehr wichtig. Und ich würde, wenn es wirklich "ernst" wäre, die wesentlichen Teile in externe C/C++ DLLs auslagern, die mit der .net SW kommunizieren. Auf diese Weise können z.B. kritische Algorithmen effizient abgeschirmt werden, und ein "normaler" Obfuscator reicht dann für die .net Teile aus.

Allgemeine, nicht .net spezifische Tricks: Eigentlich als Programmierer alles tun, was sonst schlechter Programmierstil ist, z.B. Code bloat, unstrukturierter Spaghetti-Code mit möglichst vielen "Leichen", keine Library-Calls, etc, etc, etc.
Am besten einen Kernel-Rootkit und damit optimale Stealth-Möglichkeiten (Diese "tolle" Idee hatte auch schon Sony, wie bekannt). Ist natürlich nicht ernst gemeint..



-josh
 
Danke Josh,

bezüglich Microsoft gebe ich dir 100% recht.
Aber leider bin ich nunmal auf C# angewiesen, ansonsten würde ich das nichtmal schief anschauen ;)

Habe jetzt einen (denke ich zumindest) sehr netten Obfuscator, sowie Protector. Zumindest kann man die obfuscated .exe nicht mehr im reflector
öffnen.

Da ich hier keine Anhänge mehr hinzufügen kann, und die Datei zu groß ist
hab ich es mal auf einen Multi-Hoster geladen.
(ich weiß das ist nicht erlaubt =\ ).

Im .rar ist einmal ein SerialMe obfuscated, eine SerialMe obfuscated + protector, und eine normale SerialMe ohne jedglichen schutz.

Wenn du mal Zeit hast, könnstest du eventuell mal reinschaun und mir
bescheid geben ob die 2 sicher sind?
Und nebenbei vll. noch versuchen das SerialMe zu lösen? :D
Regeln dafür wären:
- Funktionierende Login Daten!

Download:
http://www.multiupload.com/VPZ4A30FAA


Danke.

Mfg Lizz
 
Zuletzt bearbeitet:
Zurück
Oben