zum testen

hm, die Lösung ist zwar keine richtige, aber es ist auch etwas spät.
das Schwierigste ist wohl, dass das Crackme im Vordergrund bleibt und sich auch nicht verschieben lässt ;)
Da Du ja eigene Zeichenroutinen verwendest, dürfte es wohl die meisten "Hm, in den meisten Tuts gehts so:" Leute abhalten, aber hat man erstmal sich dazu überwunden, die Fensternachrichtenschleife zu suchen und ein wenig mit Olly rumzuspielen, kommt man schnell auf die "Vergleichsroutine". Ok, man kann sie nicht einfach "noppen" was ein Pluspunkt ist. Da muss man schon ein paar Zeilen selber schreiben ;)

Je nach Einsatzbreich wären auch die Tipps verschieden:
Du könntest bei teurer Software einen Verschlüsselungsmodul integrieren ,die Installationsdateien damit verschlüsseln (AES,Blowfisch usw) und jedem Kunden ein eigenes Passwort (die Sache mit dem Handbuch) mitgeben. Da kommt kein Reverser an.Somit wird die Software "komplett" weitergegeben.
Wenn Du noch zusätzlich digitale Wasserzeichen einbaust(imho gabs dafür ein Modul),kannst Du später feststellen, welcher Kunde die Software weitergegeben hat.

Eine andere, "billigere" Variante wäre: eine "Jumptabelle", und zwar so:
Du berechnest aus der Eingabe eine Zahl - und rufst eine Funktion an dieser Adresse auf.
Du könntest z.B auch eine Grundadresse haben und diese Zahl immer dazuaddieren. Es sind dann eben ein paar Funktionen, die verschiedenes machen und verschiedene Variablen setzen und ein wenig die Installationsdateien verändern ("vorentpacken" oder ähnlich). Du wertest nachher diese Variablen aus und machst mit der Installation weiter - es muss nichts komplexes sein, wichtig ist nur, dass man keinen "hint" auf diese Adressen bekommt. Und wenn das Passwort eben falsch ist (und somit zu einer ungültigen Adresse gesprungen werden würde) könnte man vorher einen groben Check basteln (Quersumme muss stimmen oder ähnlich) und prüfen ob es dem entspricht - dem Cracker nutzt die Quersumme wegen der Vieldeutigkeit gar nichts.Wer die Abfrage patcht, dem bringt es auch nicht weiter - wenn der "normaluser" sich vertippt hat, dann passiert i.R nichts. Ein zusätzlicher Exceptionhandler sorgt dann dafür, dass "im Falle der Fälle" das Programm nicht unkontrolliert abstürzt.
Die Installationsdateien sollten trotzdem nicht "offen" in der Exe rumliegen (damit nicht jemand diese einfach extrahieren kann).
 
* ich bin erst um 20:00 zu Hause angekommen - ihr hattet also massig Vorsprung :) *
Ich wollte eigentlich noch die Lösung für Teil 1 hinschreiben - muss mich aber erst noch an die Infoaufgaben dranhängen (bis Donnerstag 3 Aufgaben :rolleyes: ), wenn dann morgen oder übermorgen noch Zeit übrig ist, schreibe ich eine ausführliche Lösung. Warum ich so und nicht anders patche habe ich mal kurz in diese "Lösung" hingeschrieben - sie ist damit wesentlich informativer als die erste ;)
Bei richtiger Eingabe wird übrigens eine schöne HTML Seite im gleichen Ordner "installiert", die man sich nicht entgehen lassen sollte ;)
 
So nächster Versuch
Und wieder mussten paar Zeilen geändert werden ;)
(diesesmal beinhaltet die Lösung nur den Ollycode und ein paar Kommentare)
Jetzt gibt es aber eine Einschränkung für die gepatchte Version: der Name muss ungleich 9 Zeichen lang sein (irgendeinen Anhaltspunkt musste ich mir ja suchen - und da war der Buttonname doch recht schön und greifbar :P ). Man braucht aber nicht unbediengt einen Namen einzugeben.

Vom Prinzip war das fast dasselbe wie vorher* - und wenn mir der Platz zum patchen ausgehen sollte, hänge ich einfach eine weitere Section dran und tobe mich da aus ;)

*könntest Du vielleicht vollständigkeitshalber die anderen "Stufen" für die anderen User verfügbar machen (es gibt User, die das Forum noch nicht aboniert haben :) )?
 
Die Idee mit dem Timer ist ganz nett (oder war der schon immer da?). Habe ich schon mal beimBuha-"Contest"
gesehen ;). Level 10. Übrigens sind davon die Sources verfügbar (und der Autor "nait" versteht was davon - sein neueres Projekt ist ein non-intrusive Debugger was glaube ich schon genung über seine Kenntnisse aussagt.
Vielleicht kannst Du ja den einen oder anderen Trick abgucken.

Wobei wir schon bei der "Bewertung" wären - ich würde sagen, zumindest, was das auffinden der Vergleichsroutine angehet - es spielt schon in der gehoben Klasse mit ( verglichen mit vielen Crackmes). Man sieht imho schon, dass Du Programmierst und nicht "codest" oder "proggst" ;) . Allerdings hast Du nur auf die Symptome reagierst.
Zuerst: die globalen Variablen sind schon sehr verdächtig - meistens landet alles auf dem Stack und hat die Adresse 12xxx. Wenn dagegen das "Offset des Programms" als Adresse erscheint, denkt man sich schon "hier muss was sein - denn es ist global"
Und die zweite "gravierende" Schwäche ist überhaupt der Vergleich - diesesmal wird er nämlich zur Lösung genutzt.

Jetzt zu den Tipps:Natürlich hast Du recht, bezüglich dessen, dass ein Cracker, sobald er die Vollversion hat, auch die Sprungadressen herausbekommt. Es war von mir nicht ganz fertiggedacht. Allerdings, wenn jemand die Vollversion weitergibt, kann er das Handbuch als PDF mitgeben.Da bringt die Rumtrikserei nichts mehr. Hier gibte es einige Foren, wo ich nützliche Tipps gesehen habe (delphi-forum, URL habe ich leider nicht im Kopf). Die Absicherung geht dabei immer zur lasten des Kunden.

Was jetzt kommerzielle Packer und Protector betrifft: wie man hier an einigen Threads sehen kann, sind sie nicht wirklich perfekt (ok, ein Armadillo-Crackme war schon komplex, aber auch z.T nur, weil es Autoit - Scriptengine war, was einfach sehr ätzend ausfallen kann). Ich hab die Preise nicht im Kopf, denke aber, je nach Produktpreis muss die Anschaffung der Lizens sehr überlegt sein. Und auch die "Schutzgrenzen" sind begrenzt: wendet man den "besonderen" Schutz z.B auf diese Vergleichsroutine an, läuft der Installer nur noch auf 4 Ghz Boliden. Zumindest sollen viele der einzelnen Optionen in der Praxis Probleme bereiten. Dagegen gibt es für OllyDbg z.B Scripte, die den Schutz oder zumindest einen Teil davon entfernen und damit unwirksam machen.


Kommen wir zur Lösung:
diesesmal ist sie sehr "primitiv".Es werden einfach die Hashes überschrieben. Nach dem Patch gibt es nur ein gültiges Passwort: "CDW" ;)
 
Sorry aber deine Patsch.exe verweigert ihre Arbeit: "CRC-Check failed"
Hast du auch das aktuelle Crackme vom (10.06.2006 14.10uhr) genommen?
Eigenlich dürfte deine Liebligspatchstelle nicht mehr so ohne weiteres zu Patchen sein.
CRC-Test irgenwo weiter hinten...
Der Timer ist eigenlich zu Anzeigeaktuallisierung beim Dateien entpacken und kopieren zuständig.
Das dauert normal bei über 4000 Datein über 5min. Damit dabei niemanden langweilig wird, läuft dann eine Diashow mit bunten Bildchen ab.
 
hm, seltsam, eigentlich sollte Dup (Patchengine) verlässlich sein. Verweigert jetzt bei mir auch die Zusammenarbeit und will partout keine neuen Patches generieren.
(ich habe DuP verwendet, weil meine eigene Patchengine nur bis zu einer bestimmten größe funktioniert)
das hier sollte funktionieren(Anhang).


CRC-Test irgenwo weiter hinten...
Zitat von OllyDbg:
00411DA1 . 50 PUSH EAX ; /Arg2 = 00000000
00411DA2 . 68 9F144400 PUSH crackme.0044149F ; |Arg1 = 0044149F ASCII "crc-e %p"
00411DA7 . E8 752C0000 CALL crackme.00414A21 ; \crackme.00414A21
ist wohl nicht so ganz zuverlässig ;)


EDIT:
So, jetzt habe ich eine sehr ausführliche Lösung geschrieben,das ganze ist im HTML Format und muss also nach dem Download noch umbenannt werden (es sind keine HTML Anhänge im Board erlaubt)
 
Zurück
Oben