Hiddencode KeygenMe

CDW

0
Mitarbeiter
Hier etwas zum Zeitvertreib.
OS: ab win2000/NT (getestet: win2k SP1 und XP SP1)

Nicht gepackt und kein Anti-Debug Schutz.
Erlaubt: eigentlich alles (nur nicht die eigene Erfolgsmeldung einpatchen ;) )
Ziel1: Keygen
Ziel2: gültiger Name und Key
Man kann natürlich auch Patchen, damit jede Name/Key Kombi akzeptiert wird (wird aber nicht ganz so einfach)

Schwierigkeit: der Keyalgo ist einfach und hochstprachenfreundlich - sollte also kein Problem sein, Java/C#/VB usw zu nutzen. Allerdings würde wohl ein Anfänger ohne Hilfe wahrscheinlich daran scheitern (wenn man die Augen offen hält und etwas Glück hat, kann man es auch als Anfänger schaffen) und ein Fortgeschrittener wahrscheinlich zu schnell am Ziel sein ;).
Probiert es einfach aus *dreckig lach*

EDIT: als kleine Hilfe: bei einem richtigne Key wird eine "GoodBoy" MessageBox erscheinen("GoodBoy" bitte nicht wörtlich nehmen ;) ).
Es ist auch nicht wirklich viel Code. Da aber das Musikfile (XM-Format) mit in der Codesection steckt, könnte Olly/IDA auf falsche Gedangken kommen und versuchen diesen zu interpretieren.
Den zum Namen passenden Key kann man übrigens mit dem WinTaschenrechner innerhalb von 1-3 Minuten berechnen.
 
Ich hab dieverse Algos mit dem Taschenrechner ausprobiert, dabei auch auf früher von dir verwendete zuück gegriffen aber ich habs immer noch nicht raus wie man auf genau 16 Zeichen kommen soll..? 8o
Was ich mir noch vor stellen könnte wäre eine Verschlüsselung mit "=::=::\"
wie versteckt man etwas am besten? In dem man es an eine gut sichtbare Stelle legt
Außerdem wird bei der außführung "CRYPT32" mit einbezogen ;)
Ich mache weiter :P
 
Was ich mir noch vor stellen könnte wäre eine Verschlüsselung mit "=::=::\"
der Algo ist wie erwähnt, recht klein und unkompliziert - und ich verwende einen "anständigen", bei dem man keine Sonderzeichen und desgleichen braucht ;) - vielleicht sitzt Du ja bloß an der falschen Stelle.

Außerdem wird bei der außführung "CRYPT32" mit einbezogen
nicht dass ich es wusste ;) - es kann sein, dass in Olly verweise darauf auftauchen - aber das Crackme verwendet die DLL zu keinem Zeitpunkt.
Und was PEiD meint, ist auch mit Vorsicht zu genießen - Neolite (meint es zumindest bei mir) verwende ich auch nicht ;)

Ich wette sogar, dass die meisten den Key-Aufruf schon fast genauso oft gesehen haben, wie sie es in Olly neustarteten *g*
 
kann es sein das es keine rückmeldung gibt ob die daten falsch sind? weil mit olly sehe ich den string "Falscher Key"...
 
Mist. Ich seh grad bei BUHA war jmd schneller....
Jetzt machts kein Spass mehr... ;(

Hier noch ein kleiner Bug den ich entdeckt hab:

Ein Beispiel einer Kombination, bei der keine Messagebox folgt, obwohl es 16 Zeichen beim Key sind.

Name: B?X (X=undruckbares Zeichen) -> 0x42 + 0xFF + 0x13
Serial: <<<<<<<<<<<<<<<<

Aber interessantes Crackme. Wenn ich überlege wo ich im Crackme überall rumgesteppt bin, dann wird mir ganz schlecht. Der Name passt echt zum Crackme... :D
 
in Beispiel einer Kombination, bei der keine Messagebox folgt, obwohl es 16 Zeichen beim Key sind.
Anscheinend hast Du die Kombi für die FakeSerial/Name gefunden, die übereinstimmt, so dass die Prüfung gar nicht gemacht wird. Ich musste da ein JE hinschreiben, damit es auch nach einer Prüfung aussieht :D
 
Erinnert mich ein wenig an mein erstes CrackMe ;)
Ich musste da ein JE hinschreiben, damit es auch nach einer Prüfung aussieht

Warum nicht einfach auch eine Fake-Erfolgsmeldung? ;)

Ich weiß, es gibt schon einen Keygen(auf dem BuHa), aber ich poste meinen trotzdem auch mal.
Lösung folgt.

EDIT: Hier ist die Lösung. Leider gibt es hier keine Spoiler-Tags, ist hier das ganze als Textdatei, wobei leider Code-Formatierungen usw. verlorengehen:

EDIT2: Ergänzung der Lösung, Erläuterung, wie der Hook installiert/entfernt wird.
 
Ok,schön gemacht ;)

Wer sich fragt was TLS ist:
http://www.windowsitlibrary.com/Content/356/11/5.html
Der Code im TLS-Callback wird vor dem "offiziellen" Start der Exe ausgeführt - um z.B bestimmte Initialisierungen vorzunehmen.
Der wirkliche Sinn erschließt sich mir auch nicht - schließlich kann man diese Sachen auch direkt beim "normalen" Start machen und muss nicht erst "Vorinitialisierung der Initialisierung" durchführen :rolleyes:
 
Das ganze hat schon seinen Sinn, wenn man TLS nicht "zweckentfremdet", wenn man nämlich eine globale Variable in mehreren Threads nutzt, kann man diese dort initialisieren/Konstruktor aufrufen, ohne dies in jedem einzelnen Thread machen zu müssen. Beispiel:
Code:
//ohne TLS:
MyClass __declspec(thread) *c;

void thread1proc()
{
   c = new MyClass();
   ....
}

void thread2proc()
{
   c = new MyClass();
   ....
}
//mit TLS:
MyClass __declspec(thread) *c;

void tlsCallBack()
{
    c = new MyClass();
}

void thread1proc()
{
   ...
}

void thread2proc()
{
   ...
}
 
Zurück
Oben