ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º Keygen de ReXstrictor º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ 1ø) Intro ~~~~~~~~~ Tools: SmartCheck, Delphi5 ~~~~~~ Dispo: www.yaskifo.com/fr ~~~~~~ 2ø) Trouver un serial ~~~~~~~~~~~~~~~~~~~~~ lLancez SmartCheck, ouvrez l'exe de reXstrictor, runnez le et allez dans "?", "Enregistrer sa license", rentrez votre nom et votre serial. Vous pouvez maintenant fermez le programme, on va maintenant regardez ce que nous donne SmartCheck en mode Show All Events: vbaStrMove(String:"Kahel", LPBSTR:0064F3F0) returns DWORD:448C5C Len(String:"Kahel") returns LONG:5 Long (5) --> Integer (5) Mid(VARIANT:ByRef String:"Kahel", long:4, VARIANT:ByRef Integer:5) << Pecho la valeur ascii de la 1ere lettre du nom Asc(String:"Kahel") returns Integer:75 << Soit 75 Integer (5) --> String ("5") << 5? vbaStrMove(String:"5", LPBSTR:0064F2B4) returns DWORD:44A2B8 vbaStrVarVal(VARIANT:String:"el") returns DWORD:44A340 Asc(String:"el") returns Integer:101 << Valeur ascii de la 4eme lettre (ou avant derniere) du nom Integer (101) --> String ("101") vbaStrMove(String:"101", LPBSTR:0064F2B0) returns DWORD:44986C vbaStrCat(String:"101", String:"5") returns DWORD:4228AC << la valeur a la suite du 5 trouve tout a l'heure vbaStrMove(String:"5101", LPBSTR:0064F2AC) returns DWORD:4228AC vbaStrCat(String:"-", String:"5101") returns DWORD:5201D0 << Rajoute un '-' a la fin du serial vbaStrMove(String:"5101-", LPBSTR:0064F2D0) returns DWORD:5201D0 vbaFreeStrList() returns DWORD:10 vbaFreeVar(VARIANT:String:"el") returns DWORD:20 Left(VARIANT:ByRef String:"5101-", long:1) vbaVarTstEq(VARIANT:String:"5", VARIANT:Const String:"") returns DWORD:0 vbaFreeVar(VARIANT:String:"5") returns DWORD:20 vbaStrCmp(String:"Blah", String:"5101-") returns DWORD:FFFFFFFF << Compare le bon serial avec celui entre Donc pour Kahel le serial est '5101-'. 3ø) Faire un keygen ~~~~~~~~~~~~~~~~~~~ Le premier probleme que l'on a c'est que l'on ne sais pas exactement d'ou vient le cinq, le second est que le tiret annonce surement une suite du serial pour des noms plus long. On va donc se reengistrer avec un nom plus long ne commencant pas par "K". Par exemple 'Cracking', enregistrez vous et la l'algorythme semble deja un peu plus complique, voici ce que donne SmartCheck en mode Show Error and Specific events: Len(String:"Cracking") returns LONG:8 Long (8) --> Integer (8) Mid(VARIANT:ByRef String:"Cracking", long:7, VARIANT:ByRef Integer:8) Asc(String:"Cracking") returns Integer:67 Integer (-3) --> String ("-3") Asc(String:"ng") returns Integer:110 Integer (110) --> String ("110") Integer (8) --> Long (8) Mid(VARIANT:ByRef String:"Cracking", long:8, VARIANT:Integer:9) Asc(String:"g") returns Integer:103 Long (83) --> String ("83") Integer (7) --> Long (7) Mid(VARIANT:ByRef String:"Cracking", long:7, VARIANT:Integer:8) Asc(String:"ng") returns Integer:110 Long (90) --> String ("90") Integer (6) --> Long (6) Mid(VARIANT:ByRef String:"Cracking", long:6, VARIANT:Integer:7) Asc(String:"ing") returns Integer:105 Long (85) --> String ("85") Integer (5) --> Long (5) Mid(VARIANT:ByRef String:"Cracking", long:5, VARIANT:Integer:6) Asc(String:"king") returns Integer:107 Long (87) --> String ("87") Integer (4) --> Long (4) Mid(VARIANT:ByRef String:"Cracking", long:4, VARIANT:Integer:5) Asc(String:"cking") returns Integer:99 Long (79) --> String ("79") Integer (3) --> Long (3) Mid(VARIANT:ByRef String:"Cracking", long:3, VARIANT:Integer:4) Asc(String:"acki") returns Integer:97 Long (77) --> String ("77") Integer (2) --> Long (2) Mid(VARIANT:ByRef String:"Cracking", long:2, VARIANT:Integer:3) Asc(String:"rac") returns Integer:114 Long (94) --> String ("94") Left(VARIANT:ByRef String:"-3110-83...", long:1) Len(String:"-3110-83...") returns LONG:20 Mid(VARIANT:ByRef String:"-3110-83...", long:2, VARIANT:Long:20) << En entier '-3110-83908587797794' soit notre serial Voyons ce que l'on peut deduire de cette routine, tout d' abord notre premier probleme va etre resolu par un petite equation: 67 - x = -3 75 - x = 5 67 + 3 = x 75 - 5 = x x = 70 Donc la premiere partie du serial est constituee ainsi: (Valeur Ascii de la premiere lettre - 70 ) & Valeur Ascii de l'avant derniere lettre & un tiret. Pour la seconde partie c'est tout aussi simple, il faut simplement remarquer qu' il commence par la fin du nom. On remarque qu'entre les valeurs Ascii et les valeurs qui seront mis bout a bout on retire 20 au valeurs ascii. Il faut egalement remarquer que l'algorythme de la seconde partie s'arrete a la 2eme lettre. Pour coder ca aucun probleme on sort son Delphi 5 et on utilise cet algorythme: procedure TForm1.Edit1Change(Sender: TObject); //<< Quand on rentre son nom var w5,i:integer; //<< les variable que l'on va utiliser var zz:string; begin //<< Debut de la routine if Length(Edit1.Text) <> 0 then begin //<< Ya t'il assez de lettres if Length(Edit1.Text) <= 6 then begin //<< Si moins de 6 lettres on fait juste le 1er algo w5:=Length(Edit1.text); //<< w5 = le nom rentre Edit2.Text:=IntToStr(ord(Edit1.Text[1])-70) + IntToStr(ord(Edit1.Text[w5-1]))+'-'; //<< Algo nø 1 cf plus haut ;) end; //<< Fin de la routine 1 if Length(Edit1.Text) > 6 then begin //<< Le nom fait plus de 6 lettres alors on fait les 2 algos w5:=Length(Edit1.TExt); //<< Notre nom dans w5 zz:=IntToStr(ord(Edit1.Text[1])-70) + IntToStr(ord(Edit1.Text[w5-1]))+'-'; //<< Algo nø 1 For i:=0 to 6 do //<< Debut de la boucle, ne s'execute que sur 6 chars begin //<< on commence zz:=zz+IntToStr(ord(Edit1.Text[w5-i])-20); << Algo nø2 (Valeur ascii - 20 mise bout a bout) end; //<< Fin de l'algo Edit2.Text:=zz; //<< On affiche le resultat a l'ecran end; end //<< Jamais de ';' avant 'else' ;) else Edit2.Text:='Entrez votre nom'; //<< Message quand pas assez de chars end; Kahel - kahel@milliardaires.com