A propos de DGPlayer95

Encore un programme en VISUAL BASIC 5...
Mais contrairement à TARIFCOM particulièrement chiant à tracer (car tout se passait dans la DLL), ici on a entre les mains 
un programme EXE de structure classique.

A ce propos, il semblerait que l'on trouve deux grandes catégories de programme VB 5. 
Ceux (comme TARIFCOM) ressemblant vraiment à des programmes VB 3 ou VB 4, 
composés d'instructions VB codées et interprétées par la DLL Runtime. 
Et certains comme ici DGPlayer (mais aussi BlackWidow pour ceux qui connaissent) 
dont le code est réellement une suite d'instruction ASM (avec appels à des API VB issue de la DLL) 
et donc tout à fait traçable de manière traditionnelle. 
Cette différence est particulièrement caractéristique, comme si on avait avec VB 5 la possibilité 
soit de compiler, soit d'interpreter le code de sortie. 
Si quelqu'un possèdant l'info pouvait me la transmettre, comme toujours je suis preneur...

Bref ici, on a un programme à priori plus abordable que TARIFCOM...
Première chose à effectuer (si ce n'est pas déjà fait), intégrer MSVBVM50.DLL (la fameuse DLL...) 
dans les Exports de Softice. Je pense que vous savez comment faire.
Ici, on va utiliser une API issue de cette DLL affichant une boite de dialogue : 
rtcMsgBox (et oui ça ressemble étrangement à MessageBox :).
Donc BPX rtcMsgBox (si softice vous jette, c'est que vous n'avez pas exporté la bonne DLL).

Et on lance le programme...

Boite de dialogue avec la saisie Name + Serial. Entrez n'importe koi...Bouton "I Accept" 
et break.
Un coup de F12 pour sortir de la DLL.
Et on se retrouve dans DGPlayer95.exe. 
Et là tout devient simple, on regarde pourquoi on est arrivé là. 
- > un joli saut conditionnel testant SI. 
Attention il faut remonter assez haut dans le code
(Fidèle à ma sale habitude, je ne vous donnerais pas d'adresse :).
Et il faut remonter juste encore un peu pour voir ce qui a conditionné le positionnement de 
ESI.
On a un CALL XXXX avec juste en dessous MOV ESI,
EAX.
Ce CALL XXXX est en fait l'appel à la routine de Verif...

Voilà en gros ce qu'elle fait : 

Elle fait la somme des codes HEXA des lettres du Name 
entré.
Elle multiplie cette somme par elle-même et divise le tout par le nombre de lettre du Name 
entré.
Elle ajoute ensuite à ce resultat la somme des codes Hexa des lettres de 
DGPlayer95.
Nous avons notre Magic Number :)

Ensuite elle va vérifier si "DGP95" est bien au début du Serial entré.
Et vérifier, pour finir, 
si le nombre terminant le serial est bien notre magic number (en decimal).
(à noter que la comparaison s'effectue 
en utilisant la FPU...N'oubliez pas :  WF sous Softice)

On a donc un SERIAL du genre : DGP95XYYYYY

Avec X n'importe koi (sauf un chiffre) (il sert seulement à séparer DGP95 du magic number,
on peut donc y foutre un "-" mais le programme ne le reclame pas explicitement).

Anonymous = 0x3C9 (somme hexa des lettres - 41 6e 6f 6e 79 6d 6f 75 
73)
0x3c9 x 0x3c9 = 0xE53D1
0x3c9 / 9 = 0x19789


DGPlayer95 = 0x366 (somme de 44 47 50 6c 61 79 65 72 39 35)

0x19789 + 0x366 = 0x19AEF = 105199

d'où :

Name : Anonymous
Serial : DGP95-105199

Voilà...

A+

Mister X
RETOUR