Enable Button,plz help :D

Hab mir jetzt ehrlich gesagt das Crackme nicht angeguckt, aber deiner Beschreibung nach, müsstest du nur die HWND des Buttons herausfinden (FindWindowEx) und dann mit SetWindowLong, das GWL_STYLE Attribut mit WS_ENABLED ODER-Verknüpfen.
 
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 :D )

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 ;)
 
Ok. Hab mir das ganze mal angeguckt und so wie ich das gesagt hab, gehst also nicht.
Das Windows hat u.a. den Style WS_DISABLED und einen Style mit dem Wert 0xB.
Wenn man beide Styles rausnimmt, kann man den Button zwar jetzt anklicken, aber es tut sich nix. Sry.
 
Danke :)
Aber CDW bei mir schaut der Bereich um Register so aus:

Code:
0047E403   . 52 65 67 69 73 74 65 72        ASCII "Register"
0047E40B   . 08                             DB 08
0047E40C   . 54 61 62 4F 72 64 65 72        ASCII "TabOrder"

?(

Xalon
 
Da sind auch zwei - einmal der Rahmen und einmal der Button. Dass Du beim Rahmen bist, kannst Du eigentlich auch an der Speicheradresse sehen (Du bist im 47xxx bereich ;) ). Also noch einmal STRG+L drücken ;)
 
Aha im 47xxx Bereich o_O
Ich bin ein Anfänger also musst du mir diese Unwissenheit verzeihen :P

Nochmal Danke,
Xalon

EDIT:
So und wieder ein Anfängerprob,wie bekomm ich da ein 09 rein?
Mit assemle ja leider nicht.
 
Aha im 47xxx Bereich o_O
Ich bin ein Anfänger also musst du mir diese Unwissenheit verzeihen Zunge raus

ich hatte es ja so gepostet:
Code:
-> 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"
Du hast dagegen Deinen Treffer hier gehabt
->0047E403<- . 52 65 67 69 73 74 65 72 ASCII "Register"
das war eigentlich mit dem Adressbereich gemeint ;)

So und wieder ein Anfängerprob,wie bekomm ich da ein 09 rein?
Mit assemle ja leider nicht.
Die langwiriege Methode: Rechtklick, Binary-> "Edit".
Oder: STRG+E
 
Ahh danke :)
Ich muss noch viel lernen auf dem Gebiet
Übrigens ist das hier das einzige Forum wo ich jetzt noch ne Antwort bekommen :D

Xalon

EDIT:
Funzt alles,DANKE
 
Zurück
Oben