
                    ܲ   ܲ     ߲
   ۲  ޲ ޲ ܱ޲  ۲ 
   ۲          ޲       ޲         
  ۲     ۲  ܲ  ۲ ܲ  ۲                 
  ۲      ۲ ޲޲ ޲޲              
  ۲       ۲۲ ۲ ۲ ۲      ۲    ޲  
   ۲      ޲ ޲   ޲    ޲  ޲      
    ۲   ۲  ߲ ߲     ܲ   
      ۲                  
               ۲ 
                                                ܲ       
                                               ۲     <sorT8>
                                              ۲ 
                                                 ۲
                                                    ۲
-              PROUDLY PRESENTS      ۲   -
                            ANOTHER TUTORiAL BY                        
--       AzzYRiAN       --

                  /* Keygen Tutorial by AzzYRiAN ^ ODDiTY '99 */

Ziel: 	Editor+ 2.0
WebUrl:	zip included
Schutz: name/serial
Crack: 	Keygen
Grad:	Einfach
Tools:	SOFTiCE (v3.23) und nen C compiler (bc++ msvc++ ) irgendwas
Anfrage:Walhalla

Hoi Walhalla!

Also, zu keygens und Softice ...
 Erstmal, such dir nen paar gute tuts von caligos und fravias site,
 da sind Hammersachen. Arbeite die durch. Die ersten die ich gelesen
 habe, waren die von Razzia, und ich habs besser gemacht. :)

Ueber Keygens tuts schreiben ist immer ne kitzlige Sache, da das viel
mit probieren und Aha-Erlebnissen zu tun hat. Naja, jedenfalls oft.
Aber ich hab da nen einfaches Prog rausgesucht, was ich mal geKeygend
habe (wau, tolles Wort).

Ich hoffe, ich muss dir nicht erklaeren, was fuer bpx du in SiCE
setzen musst, um bei der Eingabe von name/serial die Daten einlesen
zu lassen.

Ich benutze immer hmemcpy, da ich mich dann nicht damit rumaergern muss,
welche Funktion das nun ist, oder wie oft die aufgerufen wird. Bei hmemcpy
landest du irgendwo in der Pampa und drueckst so oft f12, bis du im Code
von dem Programm bist. Dann traced du aus den ganzen Funktionen raus, bis
du satten ASM-Code vor dir hast und keinen ret oder nen pop in sichtweite.
Oki, nun enfach mal schauen, was in den verdammten Registern so steh, also
d eax ? eax ... na, nirgendwo die nummer oder den Name gefunde? Schade,
weitersuchen.

Oki, nun zum Tut ich habe Editor+ 2.0 rausgesucht, weil der Programm-
ablauf linear ist und du nichts rueckwaerts rechnen musst. Auch sonst
ist der Algorythmus ein Witz.

Also, das prog starten, ein Nag erscheint, und sagt dir name/seril. Kewl.
- name: AzzYRiAN code: 1122334455
- Strg-d um nach SiCE zu kommen, und nen bpx auf hmemcpy setzen
- f5 um wieder rauszukommen. Dann Enter.
- Nun sind wir wieder in SiCE. Solange f12 druecken, bis du im Hauptteil landest
  EDITORPLUS!CODE+00032132 oder sowas steht unten im SiCE Fenster
- Okay, nun traced du (f10) solange, bis du folgenden code erreichst, is nich weit :>

<Aus softice gedumped>
0137:00470518  8D55F8              LEA     EDX,[EBP-08]
0137:0047051B  8B83C0010000        MOV     EAX,[EBX+000001C0]
0137:00470521  E83E4FFAFF          CALL    00415464
0137:00470526  33F6                XOR     ESI,ESI
0137:00470528  8B45F8              MOV     EAX,[EBP-08]			<-1 eax = Name
0137:0047052B  E8C430F9FF          CALL    004035F4			<-2 Laenge des Namens berechnen
0137:00470530  83F802              CMP     EAX,02			<-3 wenn kleiner 2,
0137:00470533  0F8ECE000000        JLE     00470607			<-4 dann Scheisse
0137:00470539  8B45FC              MOV     EAX,[EBP-04]			<-5 eax = Nummer
0137:0047053C  E8B330F9FF          CALL    004035F4			<-6 Laenge der Nummer berechnen
0137:00470541  48                  DEC     EAX				<-7 1 abziehen, wenn kleiner 0
0137:00470542  0F8EBF000000        JLE     00470607			<-8 dann Scheisse
0137:00470548  8B45F8              MOV     EAX,[EBP-08]			<-9 eax = Name
0137:0047054B  E8A430F9FF          CALL    004035F4			<-10 Laenge des Namens berechnen
0137:00470550  85C0                TEST    EAX,EAX			<-11 eax = Laenge, wenn 0
0137:00470552  7E13                JLE     00470567			<-12 dann Scheisse
0137:00470554  BA01000000          MOV     EDX,00000001			
0137:00470559  8B4DF8              MOV     ECX,[EBP-08]			<-13 loop Start ecx = name
0137:0047055C  0FB64C11FF          MOVZX   ECX,BYTE PTR [EDX+ECX-01]    <-14 ecx = erstes Zeichen
0137:00470561  03F1                ADD     ESI,ECX			<-15 esi ist 0, Zeichen wird aufaddiert
0137:00470563  42                  INC     EDX				<-16 edx raufzaehlen
0137:00470564  48                  DEC     EAX				<-17 Laenge des Namens runterzaehlen
0137:00470565  75F2                JNZ     00470559			<-18 loop Ende
0137:00470567  8B45FC              MOV     EAX,[EBP-04]			<-19 eax = Nummer
0137:0047056A  E8995BF9FF          CALL    00406108			<-20 Nummer aus Ascii ins Integerformat umwandeln
0137:0047056F  81C6C30A0000        ADD     ESI,00000AC3			<-21 esi = Quersumme + ac3
0137:00470575  3BC6                CMP     EAX,ESI			<-22 eax = Fakenummer, esi = Realnummer
0137:00470577  7563                JNZ     004705DC			<-23 wenn sie nicht gleich sind

Alles klar, da sieht man sofort durch. Der Name muss mindestens 2 Zeichen
lang sein. Dann wird die Quersumme des Namens berechnet in den Zeilen 13 - 18
und selbige in ESI gespeichert. Nun, wir zu dieser Summe der konstante wert
ac3h dazuaddiert. Zeile 21. Fertig ist die Seriennummer.

Fuer AzzYRiAN waere es: 2d8h + ac3h = d9bh
			728  + 2755 = 3483
Jau, also nen Keygen :)

Ich hoffe du codest C oder ASM, Pascal geht auch, aber ich hab nur den C - Code reingepackt.
In C berechne ich eine Quersumme eines Strings wie folgt:

	 for ( unsigned int i = NULL; i < strlen( name ); summe += name[ i ], i++ );

Summe sollte mit NULL initialisiert sein. Danach steht fuer AzzYRiAN 2d8h in summe.


//Start//////////////////////////////////////////////////////////////////////////////////////////
/* Keymaker for Editor+ 2.0 by AzzYRiAN*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
//#include "blacklst.h"

int main( void )
{
 char 	name[ 25 ];
 long   summe = 0xac3;	//summe mit dem Wert initialisieren, der
			//nachher dazuaddiert wird.
 
 printf( "\n               "				//Dickes Logo reinhauen
	 "\n                        "
	 "\n           "
	 "\n      "
	 "\n     '99"
	 "\n         "
	 "\n        "
	 "\n          "
	 "\n         "
	 "\n      "
	 "\n               "
	 "\n                       sorT8"
	 "\n                        Ŀ"
	 "\n   Keymaker for Editor Plus 2.0     "
	 "\n   CRACKER/CODER: AzzYRiAN          "
	 "\n                                " );

 printf( "\n Name: ");
 gets( name );

 if( ( strlen( name ) ) < 2 || ( strlen( name ) > 25 ) )	//ist name groesser 2 und < 25?
 {
  printf( "\nPlease use between 2 and 25 characters.\n" );
  exit( 1 );
 }

 //BlacklistCheck( name );

 for ( unsigned int i = NULL; i < strlen( name ); summe += name[ i ], i++ ); //summe berechnen

 printf( " Reg#: %ld\nPress any key to exit ...\n", summe );
 getch();

 return NULL;
}
//Ende///////////////////////////////////////////////////////////////////////////////////////////

Sollte aufwaertskompatibel sein, vieleicht addieren die nen anderen Wert. :)

He, ich hoffe du bist echt dankbar und machst was draus, weil ich hab meine Mittagspause
fuer diesen Schrieb geopfert. Wenn da noch Fragen sind, gerne, aber gute.

Gruesse: Alle ODD-People, Prophecy, ratso, Walhalla, r00ster, sauron,
	 ryder, Das PiLLE, _enigma_, fANt0M, Dazzler (keep on real work :))
	 und alle coolen Leute, mit denen ich in letzter Zeit geredet habe.
	
AzzYRiAN^ODDiTY '99 11:51 10.08.99
eMail: AzzYRiAN@gmx.net
eFnet: #odt

