AlterHacker's KeyGenMe

Hey^^

Ich hab mich auch mal an ein KeyGenMe gewagt^^
Ich hoffe mal, dass das Programm auf allen Rechnern gleich abläuft(weil rand())

Ansonsten wünsch ich euch viel Spass^^ und hoffe dass es nicht zu einfach ist.

Patchen verboten ;-) (das kann ja jeder :D)

MfG
 
Zuletzt bearbeitet:
Hi,

ich bin neu hier und möchte mich daher erstmal vorstellen: Also, ich bin 16 Jahre alt und fang grad an Assembler zu lernen. Bin aber schon noch ziemlicher Anfänger.
Hab nun mal in Ollydbg dieses Keygenme bearbeitet.
Ich find auch die Stelle, wo eingelesen wird.
Doch ab da komme ich nicht mehr weiter. Ich hab aber bereits herausgefunden, dass bei diesem Keygenme jede der 5 Keys nicht größer sein darf, als 5000(dec).

Nun hab ich noch eine Frage:

Was macht in folgender Grafik Die Zeile mir dem "TEST AL,AL"??? Da komm ich einfach nicht dahinter.

Hier ein Bild:

Anhang anzeigen 3027

-RUNDLL
 
Kurz gesagt:
Code:
CALL ...
TEST EAX, EAX [Statt EAX geht auch AX oder AL]
überprüft ob der vorhergegangene Call erfolgreich war, d.h. ob er 0 zurückgegeben hat. (Rückgabe eines Calls (fast) immer in EAX)

PS: Bin auch 16 :P, wir könn uns ja mal zusammentun (Programmieren, Reveverse Engineering, o.ä.)
 
Ja da müsste man patchen, wenns denn Erlaubt wäre^^
keygenMe.00401320 müsstest du dir dann mal etwas genauer angucken ;-)

Bei Bedarf könnte ich ein paar Tipps rausrücken aber damit warte ich wenn noch etwas, damit auch andere etwas rätseln können
 
Hab mich grad mal an deinem Keygen versucht.
Kannst du mal sagen wie genau man die Daten eingeben muss?
Kenne bereits einen Teil vom Algo naja.
Grad gesehen gab grad noch einiges posts naja mal sehen ^^

int generate( char username[] )
{
int i = 0;
int counter = 0;
int key = 0;
int temp = 0;
while (username[counter]!='\0')
{
counter++;
}
for(i = 0; i < counter; ++i)
{
if(i == 0)
key = (int)username;
else
{
temp = (int)username;
temp ^= i;
key += temp;
}
}
return key;
}
 
Zuletzt bearbeitet:
Die Daten müssen so eingegeben werden: ZAHL1-ZAHL2-ZAHL3-ZAHL4-ZAHL5

TIPP:
So als Hinweis: gebt einstellige Zahlen ein und guckt dann mal so gegen ~004013EE. Eure Zahlen findet ihr im Register wieder && seid auch mitten im Überprüfungsalgo
 
Zuletzt bearbeitet:
Also,
http://en.wikipedia.org/wiki/X86_instruction_listings
TEST ist praktisch wie ein bitweises AND. Mit dem Unterschied, dass hierbei keine Werte in Registern geändert werden, sondern nur Flags gesetzt (= sowas wie ein Statusregister - zeigt nach einer Operation bestimmte Dinge an - z.B es dabei zum Überlauf gekommen ist, ob das Ergebnis =0 ist usw). Das heißt, man kann z.B mit TEST feststellen, ob das Ergebnis REGISTER1 AND REGISTER1 ==0 wäre. Das wäre dasselbe, wie ein direkter Vergleich des Werts mit 0.
Warum so umständlich? Weil CMP REG,0 intern "aufwändiger" ist, als eine einfache bitweise Verknüpfung und daher optimiert der Compiler. D.h ein bisschen Binärarithmetik kann beim Debuggen schon nutzlich sein :-)
 
ab 0x40139F fängt wohl der wichtige Code an jedoch blick ich da garnicht durch. Denn wenn ich einen anderen Key eingebe, wird auch was anderes verglichen...Keine ahnung ^^
 
Naja ich werd mich nicht mehr dran versuchen, hab auch viel zu wenig geduld für Keygen mes :> Normalerweise schau ich mir die garnicht erst an ^_^
 
Username: WoodyWood
Serial: 00515-00561-00920-01328-02749

Wenns jemand will kann ich den KeyGen auch posten, aber hab ich mal vorsichtshalber gelassen^^.
 
Zuletzt bearbeitet:
Kannst ihn ja mal spoiler'n dann kann ich auch den Haken reinmachen^^

Wie fandest dus?(von der Schwierigkeit her, kann das selber schlecht einordnen^^)
 
http://rapidshare.com/files/310753304/AlterHacker_KeyGen.exe.html
http://rapidshare.com/files/310753585/Code_KeyGen.txt.html

Habs mit Ollydbg gelöst, die rand-Funktion fand ich geschickt eingesetzt^^.

Vom Schwierigkeitsgrad kann ichs jetzt noch nicht so richtig einordnen, hab selber noch nicht soviele KeyGenMes gemacht.
Aber hat mir echt Spaß gemacht dran zu arbeiten, thx :D

Find ich klasse das du dir die Mühe gemacht hast, sowas zu erstellen damit andere was lernen können :D
Gerne wieder

Übrigens:
Der Key ist auch gültig wenn man den ersten Teil einfach 5x eingibt.

Den Grund dafür kann man in der Funktion "GenerateKey" sehen.
Wenn man nach jedem Durchlauf der for-Schleife "KeyPart" auf 0 setzt - stimmt der Code vom Sinn her mit dem von deinem Programm her überein.
Aber wenn jeder Teil unterschiedlich aussieht, sieht das ganze doch viel cooler aus^^.
 
Zuletzt bearbeitet:
Zurück
Oben