Les Time-limites
By Falcon(le 18/02/00) - E-Mailfalcon16@caramail.com
Les infections que l’on peut relever, et sur lesquelles s’appuyer, sont principalement les suivantes :
Une limitation dans le temps | |
Un ou plusieurs écrans Shareware | |
Des fonctions limitées |
Dans le cas de trial
versions limitées à un certain nombre de jours, il y a forcement quelque part,
une comparaison entre la date d'installation, et la date de fin de la période
d'essai.
Ces comparaisons peuvent se faire:
- Dans l'exécutable lui même
-
Dans un fichier de type DLL
- Dans un fichier temporaire créé à
l'occasion
(Dans les deux derniers cas de figure, un utilitaire de type Filemon permet de repérer l'utilisation de ces fichiers)
- Sur le nombre de jours
d'utilisation: cmp eax,0000001E
pour une période de 30 jours (30 décimal = 1E
hexadécimal)
La valeur dans Eax fait office de compteur depuis le jour de la
" mise en service ". Dès que cette valeur est égale à 30, la période d'essai est
terminée. Le test peut aussi avoir l'aspect suivant:
add eax,0000001E
cmp dword ptr
[ebp-5C], eax
Ou eax est égale à la date d'installation, à laquelle on ajoute 30d, et que l'on compare à la valeur contenue dans [ebp-5C], où se trouve enregistré la date de fin de la trial période.
Pour éviter une recherche dans un désassembleur sur la valeur 0000001E, certains programmeurs calculent cette durée dans une autre unité que les jours, par exemple en secondes. Pour une durée de 30 jours, la comparaison se ferait sur la base suivante:
30 jours x 24 heures x 60 minutes x 60 secondes = 002592000 décimal (= 278D00 h)
Ce mode de conversion peut nous faire gagner du temps, pour peu que l'on y pense. Il est plus rapide de faire une recherche sur 00278D00 que sur 0000001E qui risque de nous donner de nombreuses occurrences dont la majorité n'auront rien à voir avec le test traqué.
Il y différentes façons
d'exprimer une date, comme on l'a vu: en JJ/MM/AA, en jours (le 30/08/99 est le
242ème jour de l'année 1999), en secondes (une période d'essai de 30 jours et
aussi égale à 2592000 s), etc...
Il reste que l'année est le plus difficile à
camoufler. En gardant un œil sur la fenêtre des registres (WR pour l'activer
dans SoftIce), vous allez tracer avec F10 en surveillant les valeurs qui passent
dans ces registres, et en guettant tout particulièrement un 07FC (1999 en
décimal)
Dans les cas que j 'ai
rencontré, cette comparaison donne, en simplifiant:
call appel_de_la_date
mov eax,
date d'installation ou compteur du nombre de jours depuis l'installation
cmp
eax, date de fin, ou nombre de jours accordée pour la période
d'essai
(Méfiez-vous: La deuxième
ligne peut parfois se trouver au dessus du call appel_de_la_date!)
Il
n'existe pas beaucoup d'API ou de fonctions Windows qui gère le temps. Pour voir
lesquelles vont être sollicitées, il suffit d'interroger les " fonctions
importées " dans W32dasm, et de chercher:
-
GetLocalTime |
-
FileTimetoLocalFileTime |
Je pense avoir cité les
principales. GetLocalTime est souvent utilisé !
Si cette méthode ne donne rien, vous avez d'autres possibilités. Par exemple, vous pouvez avancer l'horloge de votre PC pour forcer l'apparition, à un moment ou à un autre, de l'écran "votre période d'essai à pris fin...". Ce genre de boite de dialogue peut nous servir. Pour "situer" le call qui en provoque l'affichage, on peut utiliser la technique suivante:
Avant de cliquer sur le bouton [OK], lancez SoftIce par un CTRL-D, puis tapez TASK. L'ensemble des applications actives à ce moment précis vont être listées:
TaskName |
SS:SP |
StackTop |
StackBot |
StackLow |
TaskDB |
Events |
Esscode |
0000:0000 |
006C6000 |
006D0000 |
4226 |
4BD7 |
0000 |
Explorer |
0000:0000 |
00640000 |
00640000 |
3486 |
33FF |
0000 |
etc...
Dans la liste que vous
obtiendrez, vous allez relever le nom de l'application qui vous semble
correspondre à votre cible. Afin de la localiser en mémoire, vous taperez HWND
"nom de l'application". Vous aurez alors:
Window
Handle |
hQueue |
Sz |
Qowner |
ClassName |
Window
Procedure |
<FONT face="verdana, arial, he |