My keygenme #1

User: 90nop
Serial: C44FDDA21038045200-C61B3C62

keygen muss ich noch schauen :)
 
naja, weist du, du läst eine serial generieren und vergleichst diese mit der user-serial. Wenn du die Userserial durch ein paar testalgos laufen lassen würdest, könnte man die Serial nicht sniffen ;)

Und ist immer das gleiche, wenn ich meine gültige passcombo habe, fehlt die motivation keygens zu schreiben. wobei ich das meist sowieso nicht hinkriege :rolleyes:
 
Original von 101
Hehe ok danke ja bin noch net so der Programmierer pro :D kann alles noch verbessert werden. Aber es handelt sich auch um ein KEYGENME nicht serialme also ging es mir nicht wirklich drumm wie leicht oder auch nicht man eine serial fischen etc kann. Ziel war nur ein Working Keygen.
Du generierst mit der Eingabe die Serial, (in einer Funktion) und gibst dann die generierte Serial zurück.
d
Man braucht nichtmal deinen Serial algo zu verstehen, man kann einfach den Assembly-Code von dir nehmen, und ihn für einen keygen missbrauchen.

Ich würde nun versuchen, dass _dein_ Programm nach einer Modifikation meinerseits die Korrekte Serial in das Serial Edit schreibt. Die vorgehenden Serial Längen check kann man simpel NOPen.

Vielleicht finde ich diese Woche noch zeit dafür. Für jemanden mit Assemblerkentnissen sollte es jedenfalls ne Kleinigkeit sein das zu bewerkstelligen. ;)
 
Nop meint sowas: (siehe Anhang).
PS:
Da ich zu faul war, FindWindowEx und strcmp einzufügen, verlasse ich mich darauf, dass EnumChildWindow API in jeder Winversion das gleiche Ergebnis liefert (die Child-Windows also in derselben Reihenfolge durchgeht). D.h die richtige Serial sollte im Serial-Edit erscheinen und nicht irgendwoanders ;)
Notfalls kann man die Serial auch mittels MessageBox ausgeben.

PPS: @90nop: bist Du zufällig nop60nop ;) ?
 
Ich sag da nix mehr zu, wenn du so "gut" bist dann her mit deinem keygen....
Ich bin überhaupt nicht gut in sowas. Ich bin nicht in der Lage,(leicht komplexe) algorythmen umzukehren (kombinatorik usw fehlt mir das wissen) und kann auch nicht assemblercode wirklich verstehen. (Ich lerne immer dazu, aber viel kann ich nicht). Aber bei deinem Konzept muss man praktisch nichts können um es zu lösen. :D

@CDW:
nein, so nenne ich mich nirgens. :)

Ich werde es nun auch mal versuchen den keygen so hinzukriegen wie du. Ist mein "lieblings Ansatz" - man braucht nicht am algo herumzustudieren und muss nicht mal ein GUI basteln...

Muss aber erst das "build" Plugin für Olly wieder finden, damit ich Änderungen im Code gleich wieder zu ner validen exe kompilieren kann. Weist du zufällig wie das Plugin hiess? (war für olly 1.x) Ist schon ein weilchen her, seit dem letzten "keygen", wobei das auch eher ein verändern von 3 Zeilen im code war.

Wie gehst du vor, um Änderungen am Code zu "speichern"? Das Ollyplugin ist doch immernoch der angenehmste Weg dies zu erledigen?

lg

Edit: War wohl "OllyDump" :) mal versuchen ob ichs hinkrieg.
 
Wie gehst du vor, um Änderungen am Code zu "speichern"?
Ich bin da etwas altmodisch und versuche mit möglichst wenigen Plugins auszukommen ;)
Den hinzugefügten Code kann man durch Markieren->Rechtsklick->copy to executable speichern (auch ohne Plugins). Allerdings ist es wirklich mit dem DumpPlugin angenehmer, weil es alle Stellen automatisch heraussucht :)

PS: habe zuerst mit LordPE eine Dummydatei als Section hinzugefügt, um genug Platz zu haben und nicht erst eine Codecave suchen zu müssen.
 
Original von 101
gott beware :)
hä? :D

@CDW:

Hm, ich dachte, das läst sich noch simpler machen ;)

Nach dem Call der Keygen Funktion steht im Register EDX ja die generierte Serial. Kann man nun nicht einfach dieses Register in das Edit ausgeben lassen? Man kann sich ja Platz schaffen, in dem den Jump sowie "well done"/"party " usw. weg Nopt und dort die Ausgabe hineinbastelt. (gleich nach dem call der keygen funktion)

Ich habe nun aber Verständnis Probleme. Es gibt ja weiter oben im Code eine stelle, wo er selber in dieses EDit schriebt:
Code:
0045B283  |.  BA 68B34500   MOV EDX,0045B368                         ;  ASCII "Please Enter Not More Then 24 Chars..."
0045B288  |.  8B83 7C030000 MOV EAX,DWORD PTR DS:[EBX+37C]
0045B28E  |.  E8 71F3FDFF   CALL 0043A604

kannst du mir da auf die Sprünge helfen?

So wie ich das verstanden (oder eben nicht) habe, muss man zuerst den Ausgabe wert in ein Register moven, (was ja hier schon erledigt ist) und danach die Funktion mit dem Register als Parameter aufrufen.

Stimmt das so ca.?
 
Original von 90nop


@CDW:

Nach dem Call der Keygen Funktion steht im Register EDX ja die generierte Serial. Kann man nun nicht einfach dieses Register in das Edit ausgeben lassen? Man kann sich ja Platz schaffen, in dem den Jump sowie "well done"/"party " usw. weg Nopt und dort die Ausgabe hineinbastelt. (gleich nach dem call der keygen funktion)

Ich habe nun aber Verständnis Probleme. Es gibt ja weiter oben im Code eine stelle, wo er selber in dieses EDit schriebt:
Code:
0045B283  |.  BA 68B34500   MOV EDX,0045B368                         ;  ASCII "Please Enter Not More Then 24 Chars..."
0045B288  |.  8B83 7C030000 MOV EAX,DWORD PTR DS:[EBX+37C]
0045B28E  |.  E8 71F3FDFF   CALL 0043A604

kannst du mir da auf die Sprünge helfen?
stimmt. Habe gar nicht daran gedacht. Da Delphis Strukturen immer so komisch sind, würde ich einfach nach dem JNZ
Code:
0045B283   |.  BA 68B34500                MOV EDX,WarRock'.0045B368                                 ;  ASCII "Please Enter Not More Then 24 Chars..."
0045B288   |.  8B83 7C030000              MOV EAX,DWORD PTR DS:[EBX+37C]
0045B28E   |.  E8 71F3FDFF                CALL WarRock'.0043A604
Der Rest sollte ja schon richtig vorinitialisiert sein (das wäre sonst ein Problem).
Ich habe es gerade in Olly getestet - klappt anstandslos.

Original von 101
Nun ist es doch nicht so einfach?? Jetzt patchen die mein KM auch noch rest in peace baby...
wer die Serial im Plaintext vergleicht, muss schon mit Selfkeygens rechnen ;). Immerhin wird es ja nicht so umgepatcht, dass es jede Serial akzeptiert - sondern so, dass es die Serial generiert ;)
 
Ich habe das schon vorher probiert, erhielt aber immer ne Access violation :(
Und "nach dem JNZ" einzufügen bringt doch nix, das wird ja eben durch den bedingten Jump übersprungen. :

Code:
0045B2BB  |.  E8 BCFDFFFF   CALL 0045B07C
0045B2C0  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
0045B2C3  |.  58            POP EAX
0045B2C4  |.  E8 AF99FAFF   CALL 00404C78
0045B2C9  |.  75 1A         JNZ SHORT 0045B2E5
0045B2CB  |.  6A 40         PUSH 40
0045B2CD  |.  B9 90B34500   MOV ECX,0045B390                         ;  ASCII "Well done! DU BIST GUT!"
0045B2D2  |.  BA A8B34500   MOV EDX,0045B3A8                         ;  ASCII "yEAH! pARTy!"
0045B2D7  |.  A1 ACE94500   MOV EAX,DWORD PTR DS:[45E9AC]
0045B2DC  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0045B2DE  |.  E8 C1DDFFFF   CALL 004590A4
0045B2E3  |.  EB 18         JMP SHORT 0045B2FD
0045B2E5  |>  6A 10         PUSH 10
0045B2E7  |.  B9 B8B34500   MOV ECX,0045B3B8                         ;  ASCII "SOWAS VON FALSCH!!! DU BIST SCHLECHT!"
0045B2EC  |.  BA E0B34500   MOV EDX,0045B3E0                         ;  ASCII "WTF IS WRONG WITH U?"
0045B2F1  |.  A1 ACE94500   MOV EAX,DWORD PTR DS:[45E9AC]

Ich nehme an du meinst den JNZ SHORT hier:
Code:
0045B2C9  |.  75 1A         JNZ SHORT 0045B2E5


Also was mache ich falsch? Ich habe schon vor dem ersten Posting damit rumprobiert, es aber nicht geschafft... habe quasi n Tipp gegeben den ich selber nicht mal ausführen kann :D
 
Original von 90nop
Ich habe das schon vorher probiert, erhielt aber immer ne Access violation :(
Ich nehme an du meinst den JNZ SHORT hier:
Code:
0045B2C9  |.  75 1A         JNZ SHORT 0045B2E5


Also was mache ich falsch? Ich habe schon vor dem ersten Posting damit rumprobiert, es aber nicht geschafft... habe quasi n Tipp gegeben den ich selber nicht mal ausführen kann :D
Jep, den JNZ meine ich auch. Eventuell liegts auch am OS (in Delphis Strukturen rumzuwühlen ist eine undankbare Angelegenheit), dass bei Dir ein Access Violation kommt. Die Frage ist, wo Du es schon probiert hast einzufügen und ob Du eventuell nur "Byte copy/paste" gemacht hast (im letzern Fall muss man die Call Adresse nachkorrigieren, da hier ein relativer Call vorliegt und bei Positionsänderung nicht mehr stimmt).
Code:
0045B283     BA 68B34500                  MOV EDX,WarRock'.0045B368                                 ; ASCII "Please Enter Not More Then 24 Chars..."
0045B288     8B83 7C030000                MOV EAX,DWORD PTR DS:[EBX+37C]                            ; kopieren
0045B28E     E8 71F3FDFF                  CALL WarRock'.0043A604                                    ; kopieren
0045B293     EB 68                        JMP SHORT WarRock'.0045B2FD
0045B295     8D55 F0                      LEA EDX,DWORD PTR SS:[EBP-10]
0045B298     8B83 7C030000                MOV EAX,DWORD PTR DS:[EBX+37C]
0045B29E     E8 31F3FDFF                  CALL WarRock'.0043A5D4
0045B2A3     8B45 F0                      MOV EAX,DWORD PTR SS:[EBP-10]
0045B2A6     50                           PUSH EAX
0045B2A7     8D55 E8                      LEA EDX,DWORD PTR SS:[EBP-18]
0045B2AA     8B83 78030000                MOV EAX,DWORD PTR DS:[EBX+378]
0045B2B0     E8 1FF3FDFF                  CALL WarRock'.0043A5D4
0045B2B5     8B45 E8                      MOV EAX,DWORD PTR SS:[EBP-18]
0045B2B8     8D55 EC                      LEA EDX,DWORD PTR SS:[EBP-14]
0045B2BB     E8 BCFDFFFF                  CALL WarRock'.0045B07C
0045B2C0     8B55 EC                      MOV EDX,DWORD PTR SS:[EBP-14]
0045B2C3     58                           POP EAX                                                   ; WarRock'.0043FD48
0045B2C4     E8 AF99FAFF                  CALL WarRock'.00404C78                                    ; <--- vergleichscall
0045B2C9     90                           NOP                                                       ; jnz wurde weggenoppt
0045B2CA     90                           NOP
0045B2CB     8B83 7C030000                MOV EAX,DWORD PTR DS:[EBX+37C]                            ; <---- von oben kopiert
0045B2D1     E8 2EF3FDFF                  CALL WarRock'.0043A604
0045B2D6     EB 0B                        JMP SHORT WarRock'.0045B2E3                                       ; <---- danach schön zum Ende springen
0045B2D8     90                           NOP
0045B2D9     90                           NOP
0045B2DA     90                           NOP
0045B2DB     90                           NOP
0045B2DC     8B00                         MOV EAX,DWORD PTR DS:[EAX]
0045B2DE     E8 C1DDFFFF                  CALL WarRock'.004590A4
0045B2E3     EB 18                        JMP SHORT WarRock'.0045B2FD
0045B2E5     6A 10                        PUSH 10
0045B2E7     B9 B8B34500                  MOV ECX,WarRock'.0045B3B8                                 ; ASCII "SOWAS VON FALSCH!!! DU BIST SCHLECHT!"
0045B2EC     BA E0B34500                  MOV EDX,WarRock'.0045B3E0                                 ; ASCII "WTF IS WRONG WITH U?"
0045B2F1     A1 ACE94500                  MOV EAX,DWORD PTR DS:[45E9AC]
läuft zumindest bei mir (XP SP2) fehlerfrei.


@101: darf ich fragen, was das Löschen der Beiträge denn soll?
 
@CDW:

Hm, vielleicht liegts an Vista, teste es am Abend jedefalls mal auf beiden Systemen XP und Vista. Ich habe es jedenfalls genau gleich gemacht.

(Bei nem simplen binary paste verändert sich die Zieladresse des Calls automatisch.(jedenfalls bei mir mit vielen Plugins) habe die dann wieder angepasst, dass sie wieder auf das gleiche Zielt wie vorher. ) DIe Call Zieladresse muss ja gleich bleiben, da sie ja sonst nicht zur Sub/Funktion springen würde, sondern sonst wo hin. WO genau an dem Call etwas relativ ist, sehe ich ehrlichgesagt nicht. Ich glaube mir fehlen einfach zu viele asm Basics :(

Code:
0045B28E  |.  E8 71F3FDFF   CALL 0043A604
->
Code:
CALL 0043A604
Er springt doch einfach zur Adresse '0043A604'.(Ist ja bei beiden Fehlermeldungen die gleiche Zieladresse, sonst würde ich es auch nicht verstehen) Und solange man in der gleichen exe ist, sollte man ja immer am gleichen Ort landen.


Zum Link: Man kann sich das keygenme übrigens nur als angemeldeter Benutzer ansehen. ;)
 
Original von 90nop
@CDW:

Hm, vielleicht liegts an Vista, teste es am Abend jedefalls mal auf beiden Systemen XP und Vista. Ich habe es jedenfalls genau gleich gemacht.
kannst Du mal Deine Version hochladen? Eventuell liegt der Fehler auch woanders.
Bzw: läuft meine Version nicht unter Vista?

WO genau an dem Call etwas relativ ist, sehe ich ehrlichgesagt nicht. Ich glaube mir fehlen einfach zu viele asm Basics :(

also:
Code:
0045B28E  |.  E8 71F3FDFF   CALL 0043A604
 CALL 0043A604 als Opcode:
E8 71F3FDFF              (man denke an little-endian beim Auslesen)
E8= opcode für relativen Call
FFFDF371 = relativer Abstand (der Wert ergibt als direkte Adresse auch keinen Sinn ;) )
aktuelle Position des Calls(45B28E)+relativerAbstand(FFFDF371)+CALL Opcodesize (5Bytes)=Zieladresse. Also FFFDF371+45b28E+5=43A604
Olly rechnet es freundlicherweise schon vorher heraus und zeigt dann statt CALL +FFFDF371 das Endergebnis CALL 43A604. Genauso ist es mit vielen JMPs - da sind die Angaben auch relativ zu der aktuellen Position. Genau aus diesem Grund verändert sich die Call Adresse scheinbar, wenn man in Olly Binary copy/paste macht - die Bytes bleiben gleich, allerdings ergibt sich durch neue Position auch ein neuer Zielwert.
Man muss jetzt nicht unbedingt immer in der Opcodetabelle nachschauen, was für ein Call vorliegt - wenn die "Adressopcodes" sonst keinen Sinn ergeben, muss wohl ein relativer JMP/CALL vorliegen. Bsp:
Code:
0045C71B    /EB FF                        JMP SHORT WarRock'.0045C71C
0045C71D     E9 FA000000                  JMP WarRock'.0045C81C
0045C722     E8 F5000000                  CALL WarRock'.0045C81C
0045C727     E8 F0FFFFFF                  CALL WarRock'.0045C71C
 
Ach so ist das.

Demnach rechnete Olly nach dem Binary paste einfach die "neue" Adresse aus, die dann nicht mehr dem Begin der Sub/Funktion entsparch.
Wenn ich dann aber einen Doppelklick auf diesen Befehl mache, kann ich ja den asm code editieren. Reicht es nicht aus, dort einfach die Adresse von oben einzugeben? (Genau das habe ich gemacht -> damit dort wieder CALL 0043A604 stand.)

Wenn ja, dann habe ich es zumindest in der Theorie verstanden. :)

Bzw: läuft meine Version nicht unter Vista?
kann ich erst am abend testen.

kannst Du mal Deine Version hochladen?
Ich werde einen Screenshot nach dem patchen machen, und ihn hochladen. Geht aber auch erst abends.

lg & danke für deine tollen Erklärungen :)

EDIT:

Habe es nun doch hingekriegt. Es lag daran, dass ich nach dem CALL nicht "schön" zum Ende gesprungen bin. es hat erst dort geknallt.

Ich habe im Anhang ein Bild des Funktionierenden Patches. :)
 
Zuletzt bearbeitet:
Zurück
Oben