Hackerboard WikiHaboBlog

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

VM-Crackme/Keygenme/Serialme

Diskussion: VM-Crackme/Keygenme/Serialme im Forum Hacks & Crackmes, in der Kategorie Software Home; So etwas wurde breits vor kurzem auf dem Buhaboard vorgestellt - ein Crackme welches eine interne VM nutzt. Allerdings hatte ...

Antwort
Alt 17.10.06, 23:56   #1 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard VM-Crackme/Keygenme/Serialme


So etwas wurde breits vor kurzem auf dem Buhaboard vorgestellt - ein Crackme welches eine interne VM nutzt. Allerdings hatte ich schon länger vor, das selber umzusetzen

Gepackt: nein
Schwierigkeitsgrad: schwer abschätzbar, aber auf jedenfall nicht anfängerfreundlich
Regeln: naja, keine eigene Erfolgsmeldung einpatchen
Ansonsten - Patch, Serial, Keygen - für jeden ist etwas dabei.
Die VM ist im Crackme integriert (es ist also ein ganz normales Programm -nur werden einige Berechnungen von der VM durchgeführt).


Zur VM: ist eine Stackmachine, als Vorbild diente die MIC-1 Architektur (z.B http://www.cs.auc.dk/~mixxel/NA-F03/...03-v2-gray.pdf), wobei ich nicht so ganz runter gegangen bin wie ich wollte (also keine Gatter Nachbildungen usw, war doch etwas zu aufwändig )). Soweit ich weiß, ist die JVM (Java VM) auch Stackbasiert - ist also keine "Exotik".

Kurz: eine Stackmachine bietet nach "außen" hin keine Register, sondern erledigt alle Operationen über den Stack. Sie hat einen bestimmten Befehlssatz (Add,mov etc), intern wird (wie auch in x86) jeder Befehl duch Microprogramme realisiert in welchen die "elementaren" Befehle genutzt werden (diese sind direkt in der Hardware implementiert) .
Diese Methode erlaubt "nach außen hin" die lustigsten Befehle anzubieten (Fakultätberechnung,GGT,Primzahlcheck usw direkt als Assemblyanweisung ) ohne solche Funktionen alle in der Hardware zu realisieren.

Der Checkalgo ist einfach gehalten, es gibt auch keine wesentlichen "Gemeinheiten", keine nervende Musik etc (ich konnte es mir nicht verkneifen, eine Kleinigkeit gegen ältere IDA Versionen einzubauen ).

Die Entwicklungszeit betrug übrigens nur einige Stunden, trotzdem lässt es sich damit schon recht bequem programmieren (es leben die EQU Ausdrücke in MASM)
Codeausschnitt

Code:
code1_ db bipush_,10
            db bipush_,20
            db iadd_
            db istore_,X
x:=10+20;
Ist also gar nicht so weit hergeholt oder gar zu kompliziert, damit wichtige Passagen zu "virtualisieren".
EDIT: habe den IDA-"Schutz" mal rausgenommen
http://cdw.de.vu/vm.zip
oder (wer trotzdem die Auswirktugen sehen möchte - im Anhang ist die "geschützte" Version)
Angehängte Dateien
Dateityp: zip vm.zip (2,0 KB, 102x aufgerufen)
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 18.10.06, 01:18   #2 (permalink)
 
Registriert seit: 16.08.06
merker Leistung: Facit NTK
Likes: 0
Standard

Win98 : "Für diesen Vorgang ist nicht genügend Arbeitsspeicher vorhanden"

WinXP : "Die Auslagerungsdatei ist zu klein"

Was braucht denn die vm.exe als Mindestvoraussetzung zum laufen ? (in GB) :-)
merker ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 18.10.06, 01:25   #3 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard

Zitat:
Was braucht denn die vm.exe als Mindestvoraussetzung zum laufen ? (in GB) :-)
ca 100KB

scheint der Anti-IDA Trick zu sein (dabei habe ich den doch selber vom PrivateExeProtector abgekupfert und nur leicht modifiziert - bei mir kommt nämlich die Meldung erst, wenn ich versuche das Crackme mehrmals in Olly zu laden. IDA 4.3 friert beim ladeversuch komplett ein .
Meine Auslagerungsdatei ist aber eher knappt über 2GB groß. Wenn man sich die VSize einer Section im Crackme anschaut, sieht man auch, warum soviel virtuellen Speicher braucht)

Hier die "leichte" Version, ohne irgendwelche PE-Manipulationen:
Edit: habe jetzt im ersten Post auf die "ungeschützte" Version verlinkt. Werde mal demnächst mit den Parametern rumspielen, paar Gemeinheiten einbauen und ein eigenständiges Crackme dazu machen.
Angehängte Dateien
Dateityp: zip vm.zip (1,8 KB, 55x aufgerufen)
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 18.10.06, 13:34   #4 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Nice! Wirklich gutes CrackMe.
Ok, hier schonmal eine Serial:
serial   

_Lesco
6907041801

Bist du sicher, dass es für jeden Namen eine Serial gibt? Wegen des verwendeten "div"s kann es bei der Serialberechnung nämlich zu einem Überlauf kommen, wenn der Namenshash >= (0x8000000-5) ist, da beim Dividieren eines DWORDs durch 2 das Ergebnis nie größer als 0x7FFFFFFF sein kann. Oder habe ich etwas übersehen?
Lesco ist offline   Mit Zitat antworten
Alt 18.10.06, 14:28   #5 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard

serial   
Zitat:
Dividieren eines DWORDs durch 2 das Ergebnis nie größer als 0x7FFFFFFF sein kann. Oder habe ich etwas übersehen?
die Division war in erster Linie dafür gedacht, dass man die Zahlen nicht auf Anhieb als Eingabe erkennt. Aber du hast recht - die Division ist ungünstig platziert. Ich könnte es editieren und z.B durch Subtraktion ersetzen, wenn ich zu hause bin. Dann müsstest du aber den Keygen anpassen ;). Wenn du willst, schicke ich dir dann die Änderung zu .

Ich überlege mir noch, wie die VM zusätzlich eingesetzt werden könnte...
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 18.10.06, 14:48   #6 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Also bei mir(XP sp2) funktioniert auch die geschützte Version ohne Probleme und mit ein paar Modifikationen klappts auch mit IDA und OllyDbg.

Hier ist schonmal der Keygen für die jetzige Version des CrackMes, eine Lösung folgt noch.(dann zu dem aktualisierten CrackMe)

[OT]Mit der Zeit des ersten Postings hast du 0day ziemlich erschwert [/OT]

Edit: Keygen auf neue Version angepasst.
Angehängte Dateien
Dateityp: rar kg_cdw_vm.rar (13,0 KB, 70x aufgerufen)
Lesco ist offline   Mit Zitat antworten
Alt 18.10.06, 15:32   #7 (permalink)
 
Registriert seit: 16.08.06
merker Leistung: Facit NTK
Likes: 0
Standard

Ich will schon garnicht mehr wissen, was "schüler" heutzutage in der Schule alles lernen. Wir damals blubber, belehre, ... , und überhaupt ! :-)

Es gibt in der vm_.exe eine Adresse im RAM wo man anhand der Eingaben auf den Algorithmus schliessen kann. Sowas lässt sich doch vermeiden, oder geht das bei einer VM nicht ?
merker ist offline   Mit Zitat antworten
Alt 18.10.06, 18:46   #8 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard

Zitat:
Sowas lässt sich doch vermeiden, oder geht das bei einer VM nicht ?
Ich denke Du meinst einige Variablen, die mehrfach verwendet werden. Letzendlich ist es schon eine bewusste Lösungsoption - der schmale Grat zwischen Komplexität und "die Leute nicht verschrecken" .

Man könnte es ja noch weiter "verschleiern", indem jedesmal ein neuer Speicherbereich an die VM übergeben wird (beim Starten einer Code-Sequenz wird ein Zeiger auf den Speicherbereich übergeben, der dann als Variablen"pool" dient). Aber irgendwo müssen die Werte ja zwischen den Aufrufen aufbewahrt werden - und so ein "Positionswechsel" wäre imho einfach nur störend, aber nicht hinderlich - stattdessen könnte man ja gleich einen besseren Algo nehmen . Beides wäre aber imho zuviel des guten (letzendlich könnte man sich eine VM in einer "fetten" Hochsprache basteln mit zig Libs und Junkcode, so ein Crackme wird sich dann keiner anschauen, weil es zu aufwendig ist ).

Wie dem auch sei, ich habe es aktualisiert und das DIV X durch einen SUB Y ersetzt.

Zitat:
Also bei mir(XP sp2) funktioniert auch die geschützte Version ohne Probleme
Wie erwähnt nutzt PrivateExeProtector das auch. Nur ist die VSize geschickter gewählt. Es gibt da eine leere (physische Größe==0), riesige Section und noch eine/zwei "normale" hintendran. Die VSize Spielerei führt dann dazu, dass IDA 4.3 abschmiert sowie OllyDbg je nach System einfach nur "blockt" (ich hatte dank Hyperthreading nicht soo große Probleme damit, es ging zwar langsam und mit "denkpausen", war aber noch im Toleranzbreich) - allerdings wird damit Tracing sehr zeitaufwendig, das debuggen recht langwirieg und einfach die Section entfernen oder editieren ist nicht drin - da noch zusätzliche "funktionelle" Sectionen nach der großen Section kommen. Da muss man beim Entfernen schon tricksen. Vor allem wenn man sich erstmal wundert, warum Olly so lahm ist . Ist der Trick aber einmal bekannt, stellt er kein großes Hindernis dar.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 18.10.06, 19:17   #9 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von CDW

Zitat:
Also bei mir(XP sp2) funktioniert auch die geschützte Version ohne Probleme
Wie erwähnt nutzt PrivateExeProtector das auch. Nur ist die VSize geschickter gewählt. Es gibt da eine leere (physische Größe==0), riesige Section und noch eine/zwei "normale" hintendran. Die VSize Spielerei führt dann dazu, dass IDA 4.3 abschmiert sowie OllyDbg je nach System einfach nur "blockt" (ich hatte dank Hyperthreading nicht soo große Probleme damit, es ging zwar langsam und mit "denkpausen", war aber noch im Toleranzbreich) - allerdings wird damit Tracing sehr zeitaufwendig, das debuggen recht langwirieg und einfach die Section entfernen oder editieren ist nicht drin - da noch zusätzliche "funktionelle" Sectionen nach der großen Section kommen. Da muss man beim Entfernen schon tricksen. Vor allem wenn man sich erstmal wundert, warum Olly so lahm ist . Ist der Trick aber einmal bekannt, stellt er kein großes Hindernis dar.
Keygen im oberen Post ist jetzt angepasst, ich werde demnächst die Lösung schreiben.
Zu diesem Thema fällt mir folgender Artikel ein, in dem viele solcher Tricks beschrieben werden, daher hatte ich auch sowas vermutet, als OllyDbg so viel Speicher verlangt hatte:
http://www.honeynet.org/scans/scan33/nico/


EDIT: Hier ist nun die Lösung, Feedback/Kritik erwünscht. Wenn ich an einigen Stellen zu ungenau erklärt habe, fragt einfach nach.
Angehängte Dateien
Dateityp: rar solution.rar (4,7 KB, 130x aufgerufen)
Lesco ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » VM-Crackme/Keygenme/Serialme
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Braynfack - Keygenme/Crackme lone.wolf Hacks & Crackmes 1 11.11.09 08:22
[SOLVED]Erstes SerialMe Oi!Alex Hacks & Crackmes 3 02.02.07 22:33
SerialMe Grafix Hacks & Crackmes 1 24.10.06 13:33
Keygenme ^^ ReDoX Hacks & Crackmes 3 21.09.06 16:17
Serialme (für CDW :D) sd333221 Hacks & Crackmes 9 15.09.06 19:46


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61