::Serial fishing à la con, petit exemple!::


================================================================================
le soft : Winshade 3.01
Type : serial fishing
Niveau : Ultra débutant ...
http://www.bluecarpet.com
================================================================================
1) Quels sont les infections du programme?
une simple limitation à 30 j! c'est d'un classique c'est navrant ;-)

2) Comment réparer ce bug?
Bon ben on peut rentrer un serial alors vous me suivez ;-)


Tout d'abord je met comme nom "MadMickael" et comme serial "123456", et je pose mon bpx hmemcpy. je clique sur OK et ca break, F5 ca rebreak, je trace jusqu'a arriver dans le prog ici :

0177:00402719  FFD7                CALL      EDI  ==>                               
0177:0040271B  80BDFCFEFFFF00      CMP       BYTE PTR [EBP-0104],00   ==> on as tapé un nom?         
0177:00402722  7509                JNZ       0040272D                  ==> oui on saute                      
0177:00402724  80BDF8FDFFFF00      CMP       BYTE PTR [EBP-0208],00    ==> un serial?         
0177:0040272B  743F                JZ        0040276C                  ===> non alors saute                    
0177:0040272D  8D85F8FDFFFF        LEA       EAX,[EBP-0208]     ==> eax = nom                
0177:00402733  50                  PUSH      EAX                                
0177:00402734  8D85FCFEFFFF        LEA       EAX,[EBP-0104]     ==> eax=serial tapé                
0177:0040273A  50                  PUSH      EAX                                
0177:0040273B  E833040000          CALL      00402B73  !!! c'est ici que ca ce passe                          
0177:00402740  33FF                XOR       EDI,EDI                            
0177:00402742  59                  POP       ECX                                
0177:00402743  393D20FD4000        CMP       [0040FD20],EDI                     
0177:00402749  59                  POP       ECX                                
0177:0040274A  A31CFD4000          MOV       [0040FD1C],EAX                     
0177:0040274F  89450C              MOV       [EBP+0C],EAX                       
0177:00402752  7410                JZ        00402764                           
0177:00402754  3BC7                CMP       EAX,EDI                            
0177:00402756  750C                JNZ       00402764                           
0177:00402758  C70520FD400001000000MOV       DWORD PTR [0040FD20],00000001

On pushe successivement le name et le serial juste avant un call, ca veut dire certainement que l'on va rentrer dans le call incriminé pour calculer le serial.!!! donc on recommence et on rentre dans le call..

0177:00402B73  55                  PUSH      EBP                               
0177:00402B74  8BEC                MOV       EBP,ESP                            
0177:00402B76  51                  PUSH      ECX                                
0177:00402B77  51                  PUSH      ECX                                
0177:00402B78  56                  PUSH      ESI                                
0177:00402B79  57                  PUSH      EDI                                
0177:00402B7A  8B7D08              MOV       EDI,[EBP+08]                       
0177:00402B7D  85FF                TEST      EDI,EDI                            
0177:00402B7F  7459                JZ        00402BDA                           
0177:00402B81  803F00              CMP       BYTE PTR [EDI],00                  
0177:00402B84  7454                JZ        00402BDA                           
0177:00402B86  8B450C              MOV       EAX,[EBP+0C]                       
0177:00402B89  85C0                TEST      EAX,EAX                            
0177:00402B8B  744D                JZ        00402BDA                           
0177:00402B8D  803800              CMP       BYTE PTR [EAX],00                  
0177:00402B90  7448                JZ        00402BDA                           
0177:00402B92  8D4DF8              LEA       ECX,[EBP-08]                       
0177:00402B95  51                  PUSH      ECX                                
0177:00402B96  50                  PUSH      EAX                                
0177:00402B97  E844000000          CALL      00402BE0  ==> donc on rentre !!                          
0177:00402B9C  59                  POP       ECX                                
0177:00402B9D  85C0                TEST      EAX,EAX                            
0177:00402B9F  59                  POP       ECX                               
0177:00402BA0  7438                JZ        00402BDA  ==> jmp to bad boy

on rentre dans le call 00402BE0...

0177:00402BE0  55                  PUSH      EBP                               
0177:00402BE1  8BEC                MOV       EBP,ESP                            
0177:00402BE3  83EC0C              SUB       ESP,0C                             
0177:00402BE6  57                  PUSH      EDI                                
0177:00402BE7  8B7D08              MOV       EDI,[EBP+08]                       
0177:00402BEA  57                  PUSH      EDI                                
0177:00402BEB  E8A0460000          CALL      00407290   ==> eax = 6                          
0177:00402BF0  83F810              CMP       EAX,10       => compare eax à 10h (16)?                      
0177:00402BF3  59                  POP       ECX                                
0177:00402BF4  7404                JZ        00402BFA     ==> sinon on saute                      
0177:00402BF6  33C0                XOR       EAX,EAX                            
0177:00402BF8  EB52                JMP       00402C4C          
si l'on à l'habitude on devine tout de suite ce que le call 00407290 fait! il met la longueur du serial tapé dans EAX et à l sortie EAX est comparé avec 16. Autrement dis, votre serial dois faire 16 caractères, sinon ca ne passera pas le controle en 00402BA0.... on sort de ce call.
On recommence l'opération avec un serial de 16 caractères. "1234567890ABCDEF". En effet en 00402BA0 on se saute plus donc on continue.....

0177:00402BA2  8B45F8              MOV       EAX,[EBP-08]    ==> EAX= 12345678 (la premiere partie du serial)                 
0177:00402BA5  85C0                TEST      EAX,EAX                           
0177:00402BA7  7431                JZ        00402BDA                           
0177:00402BA9  8BC8                MOV       ECX,EAX     ==> ECX=EAX=12345678                       
0177:00402BAB  81E1FF000000        AND       ECX,000000FF  => ECX=78 (les deux derniers chiffres de 12345678)                     
0177:00402BB1  7427                JZ        00402BDA  ==> ECX=00 alors on saute c'est pas bon!                         
0177:00402BB3  33D2                XOR       EDX,EDX                            
0177:00402BB5  F7F1                DIV       ECX           ==>divise 12345678 par 78 soit eax= 26D60D                    
0177:00402BB7  8BF0                MOV       ESI,EAX   ==> resultat sauvegardé dans esi (esi= 26D60D    
0177:00402BB9  8B45FC              MOV       EAX,[EBP-04]        ==> EAX= 90ABCDEF (2eme partie du serial)                
0177:00402BBC  C1E810              SHR       EAX,10     ==> décalage de 16 byte, EAX =  90AB                       
0177:00402BBF  663BF0              CMP       SI,AX       ==> compare SI (D60D) et AX (90AB)                      
0177:00402BC2  7516                JNZ       00402BDA     ==> ben c'est pas égal, on se barre                      

Que fait cet algo?
1) il prend les 8 premiers  caractères du serial (que j'appele la partie1)
"12345678"

2) les deux derniers chiffres de cette partie sont isolés
"12345678" donne "78"

3) Il divise "12345678" par "78"
ce qui donne 26D60D

4)choppe les huits derniers caractères du serial (la partie 2)
"90ABCDEF"

5) Ne prend que les quatres premiers caractères de la 2ème partie
"90ABCDEF" donne "90AB"

6) compare "90AB" avec les 4 derniers chiffres du résultat de la division (étape 3)(donc "26D60D"==>"D60D")
soit cmp "D60D", "90AB"

7) ==> Warning !! c'est pas bon! ca saute......
Bon, ben à première vue je remplace "90AB" par "D60D" et ca passe! Mon serial devient "12345678D60DCDEF"
Ca passe... donc on continue.....

0177:00402BC4  57                  PUSH      EDI              ==> tient edi contient mon nom...MadMickael                   
0177:00402BC5  E885000000          CALL      00402C4F    -!!!-> EAX=2C8 (ca me dis qqchose cette valeur??)                      
0177:00402BCA  59                  POP       ECX                                
0177:00402BCB  03C6                ADD       EAX,ESI      ==>     EAX=EAX+ESI (D2C8+ 26D60D) (étape 3)                
0177:00402BCD  33C9                XOR       ECX,ECX        .....donc eax = 26D8D5                  
0177:00402BCF  663B45FC            CMP       AX,[EBP-04]    ===> cmp D8D5, CDEF                    
0177:00402BD3  0F94C1              SETZ      CL           ==>si  oui, alors cl=01 !! REGIsTERED!!!!!!               
0177:00402BD6  8BC1                MOV       EAX,ECX                            
0177:00402BD8  EB02                JMP       00402BDC                           
0177:00402BDA  33C0                XOR       EAX,EAX                            
0177:00402BDC  5F                  POP       EDI                
0177:00402BDD  5E                  POP       ESI
                                  .........
				   RET
Pourquoi eax=2c8???? Euréka! je sais ce qu'est cette valeur!!! Je l rencontre souvent quand je teste mes keygens ;-) c'est la somme des valeurs ASCII des lettres de mon pseudo (en majuscule).. M+A+D+M+I+C+K+A+E+L= 2C8 !!! ;-) ca il faut le savoir mais bon en etudiant le call ca peut se deviner .. donc la suite
7b) calcule la somme des valeurs ASCII du nom mis en majuscules (car MadMickael donne 3c8 et non 2c8!!)
donc "2C8"

8) ajoute à cette valeur le résultat de la division de l'étape 3
"2C8" + "26D60D" = "26D8D5"

9)compare les 4 derniers chiffres du résultat avec les 4 derniers du serial
cmp (26)"D8D5", "CDEF"

10 ) pas égal, alors Cl=00, le flag est unregistered!!!
Bon je remplace CDEF par D8D5 et ca tourne !! le bon serial est 12345678D60DD8D5
c'est finit...

NB : comme 12345678 est un nombre bidon, et que c'est de ce nombre que dépend le reste du serial, on peut trouver une infinité de serial!

Ce Cour est uniquement à but informatif! Vous êtes seul responsable de l'utilisation que vous pourriez en faire!


Little tut by