::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