KeygenMe

Nabend Zusammen!

Ich hab mal wieder ein KeygenMe aus dem Hut gezaubert, welches ich euch nun vorstellen möchte.

Ziel ist es einen Keygen zu schreiben, ein Keyfile ist aber auch schon mal ein Anfang. Ich habe mir keine Mühe gegeben Patches zu verhindern, dies hindert euch aber natürlich nicht an selbigem ;).

Das KeygenMe richtet sich eher an erfahrene Leute. Ein gültiges Keyfile könnte ich auch bereit stellen - wenn erwünscht.

Dann wünsche ich viel Spaß und gutes Gelingen!

Gruß,
redox

Edit: In der alten Version war es unter Umständen möglich, mit einem Keyfile, Code auszuführen. Sonst hat sich allerdings nichts geändert.
 
Zuletzt bearbeitet:
hallo,

nach längerer Zeit habe ich mich mal wieder ans Werk gemacht. Diesmal habe ich, da erlaubt, die leichtere Variante gewählt, nämlich zu patchen.

Also:
Erstmal den UPX-Packer loswerden: macht z.B. der CFF Explorer auf Knopfdruck.

Die Struktur des Keygen ist so, dass der Inhalt des Keyfile ("Keyfile.dat") und der Name zum Keyfile (mindestens 7 Zeichen) zueinander passen müssen. Dass dem so ist, wird in Adresse 0040f419 geprüft. Dieser "Gutfall" wird zwangsweise per Patch herbeigeführt. Inhalt von Keyfile und Name dazu sind in der Patch-Lösung beliebig.
Code:
.text:0040F40E                   loc_40F40E:                             
.text:0040F40E F7 55 C4          not     dword ptr [ebp-3Ch]
.text:0040F411 8B 45 C0          mov     eax, [ebp-40h]
.text:0040F414 F7 D0             not     eax
.text:0040F416 33 45 C4          xor     eax, [ebp-3Ch]
.text:0040F419 0F 85 F1 01 00 00 jnz     loc_40F610                      ; #patch -> jz
.text:0040F419                                 ; unpacked file offs 0xe81a : 0x85 -> 0x84
Das wäre der erste Patch.

Anschliessend wird der Inhalt des Keyfile als Instruktionen einer virtuellen Maschine (Aufruf der VM in Adr. 40f471) interpretiert. Das Ergebnis wird wohl in 40f47d abgeholt, ist aber in dieser Patch-Lösung nicht von Interesse.

Weitere Versuche hatten ergeben, dass die "Lizenz gueltig" Meldung vom Exception Handler her ausgegeben wird (gute Idee!). Daher wird eine sichere Exception mittels Division durch 0 herbeigeführt, indem in Adr. 0040f491 statt xor edx, edx ein xor ecx, ecx gepatcht wird. Dies ist dann der zweite (und letzte) Patch.
Code:
.text:0040F476 loc_40F476:                             ; CODE XREF: sub_40F19E+2CEj
.text:0040F476 mov     byte ptr [ebp-41h], 1           ; # dieses flag muss f den exc hdlr gesetzt sein
.text:0040F47A mov     eax, [ebp-48h]                  ; VM
.text:0040F47D call    VMgetResult
.text:0040F482 mov     edx, [ebp-40h]
.text:0040F485 inc     edx
.text:0040F486 xor     eax, edx
.text:0040F488 push    eax
.text:0040F489 mov     eax, 0DEADh
.text:0040F48E pop     edx
.text:0040F48F mov     ecx, edx
.text:0040F491 xor     edx, edx                        ; patch xor ecx,ecx : 33 c9
.text:0040F491                                         ; offs 0xe892
.text:0040F493 div     ecx
Der erste Patch ist (leider) nötig, da der Exception Handler das Flag in ebp-0x41 abfragt, welches erst nach dem ersten Patch gesetzt wird (s. Codesnippet).
Das Ergebnis ist in der beigefügten jpg-datei zu sehen.

Dank an den Autor!

-josh
 
Das sieht doch sehr gut aus, allerdings habe ich es Dir eindeutig zu einfach gemacht!

Wer sich noch etwas intensiver mit diesem KeygenMe befassen möchte findet im Anhang ein gültiges Keyfile (umbenennen in Keyfile.dat), welches auf den Namen redox4habo ausgestellt wurde. Ein Keygen wird aber einiges an Arbeit und Zeit in Anspruch nehmen.

Gruß,
redox
 
Zurück
Oben