naja, habe anfangs das Crackme schnell manuell entpackt - ResHacker funktionierte nicht. Also kam die langwiriege Suche nach einem FSG-Unpacker (
http://doom.scene-gods.de/)
Aber auch wenn man damit entpackt, will es nicht gehen (Reshacker meckert nur rum - auch verständlich, weil Delphi imho die GUI selber "zusammenbastelt" und nicht im RC Format speichert - oder meine Version von Reshacker ist zu alt

).
Was bleibt ist der Weg übers Olly (oder eventuell DeDe - aber echte Männer brauchen kein DeDe

)
Man such einfach im Olly nach dem Buttonnamen "Register" (STRG + B)
Schnell kommt man auch in die "Ressourcentabelle" von Delphi.
Da stehen jetzt die ganzen Bestandteile fein säuberlich mit den Attributen aufgelistet - deswegen denke ich kann ResHack die Form auch nicht ändern (aber es gibt durchaus auch für VB solche Formänderer - für Delphi/VCL muss es die Dinger auch geben)
Code:
004810A7 . 08 DB 08
004810A8 . 52 65 67 69 73 74 65 72 ASCII "Register"
004810B0 . 07 DB 07
004810B1 . 45 6E 61 62 6C 65 64 ASCII "Enabled"
004810B8 08 DB 08
004810B9 . 08 DB 08
Was jetzt kommt, sind nur reine Überlegungen, die man so anstellt

:
Naja, bei den anderen Form-Bestandteilen und Buttons (die anklickbar sind) steht kein "Enabled" dran. Imho macht Delphi/VCL es per default so, dass sie sichtbar sind, wenn keine "Enabled" steht.
wenn man sich da ein wenig umschaut, merkt man, dass vor dem String immer die Länge steht und danach die Attribute.
Die zweite 08 nach dem "Enabled" ist die Länge des nächsten String - die "vorherige" ist das Attribug von "Enabled". Ändert man diese in 09 *, ist der Button anklickbar
*Da kommt man nicht drumherum, es selber auszuprobieren - oder, wer Delphi hat, könnte auch schnell eine Form erstellen und damit rumexperementieren. Ich weiß bloß nicht nach welcher Logik Borland darauf kommt, für "enabled"=FALSE eine 08 und für TRUE eine 09 zu verwenden.
Alternative wäre v01ds Vorschlag - gut durch eine Codeinjection zu bewerkstelligen, allerdings denke ich nicht, dass das "Anfängergeeignet" ist
EDIT:Alternativ:
man setzt auf dieses Attribut einen Hardware BP (on access byte). Wenn dieser ausgelesen wird (mit dem REPS kopiert), setzt man nochmal einen BP (einfach Memory on access) auf die "neue" Speicherstelle.
Das wird dann nochmal ausgelesen :
Code:
00416A42 |. F3:A4 |REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
Nochmal BP (Memory on Access) auf diese Stelle setzten

Und prompt landet man in einem sehr interessanten Teil:
zuerst wird der Wert in AL gelesen, aber wenn man paar mal F7 getätigt, kommt man hierhin:
Code:
004174D0 |> \8BC6 MOV EAX,ESI ; Case 8 of switch 00417461
004174D2 |. BA 1C754100 MOV EDX,dump.0041751C ; ASCII "False"
004174D7 |. E8 C4C9FEFF CALL dump.00403EA0
004174DC |. EB 2F JMP SHORT dump.0041750D
004174DE |> 8BC6 MOV EAX,ESI ; Case 9 of switch 00417461
004174E0 |. BA 2C754100 MOV EDX,dump.0041752C ; ASCII "True"
004174E5 |. E8 B6C9FEFF CALL dump.00403EA0
004174EA |. EB 21 JMP SHORT dump.0041750D
004174EC |> 8BC6 MOV EAX,ESI ; Case D of switch 00417461
004174EE |. BA 3C754100 MOV EDX,dump.0041753C ; ASCII "nil"
004174F3 |. E8 A8C9FEFF CALL dump.00403EA0
004174F8 |. EB 13 JMP SHORT dump.0041750D
004174FA |> 8BC6 MOV EAX,ESI ; Case 0 of switch 00417461
004174FC |. BA 48754100 MOV EDX,dump.00417548 ; ASCII "Null"
Auf die andere Methode komme ich irgendwie nicht
