CD check reverse engineering Lv2

décembre 20, 2014

Après s’être mis tranquillement en jambe il y a quelques jours de cela avec le reverse engineering d’une première protection CD Check basique, place aujourd’hui à une protection un poil + compliqué. Dans les années 1990, Microsoft a commencé à renforcer les protections de ces Jeux contre la copie en rajoutant une fonctionnalité parfois encore utilisé aujourd’hui : le code (ou clé) d’activation.

En effet, en plus d’une protection plus ou moins standard sur l’api getdrivetypeA, l’installation jeux nécessité un clé d’activation. Je vous propose d’étudier aujourd’hui le crackme de DAXXOR, reprenant dans les grandes lignes le schéma de protection de Microsoft. Lorsque l’on essai de cliquer sur PROCEED  : les réjouissances sont annoncées

cdcheck2.2

Comme à l’accoutumé, je dégaine mon PEiD qui m’indique directement que l’exécutable est compressé par Aspack 2.12.

cdcheck2.3

Ayant déjà écrit un article relativement détaillé sur le manual unpacking d’aspack, je ne vais pas m’attarder ici sur le sujet. Et pour les plus fégnaces d’entre vous et j’imagine qu’ils sont nombreux, je vous invite à utiliser le tool FUU (Fast Universal Unpacker) qui se chargera de l’unpacking d’aspack pour vous.

Me voila donc avec l’exécutable unpacké, et Ollydebug nous indique cette fois clairement les Strings datas references  (search for all referenced texte string):

cdcheck2.4

Un simple double clique sur la ligne « Wrong CD! » m’envoie directement ici

L’adresse 00401B05 me saute aux yeux, il compare via l’api GetDriveTypeA la nature du support. La valeur AEX 3 avec 5 . et Jump si egal . Inutile de perdre du temps ici, lors du premier tutorial sur le cd check nous avions déjà fait connaissance avec l’api GetDriveTypeA, forçons donc le JUMP à la ligne du dessous :

il n’y a plus qu’à enregistrer notre modification d’executable directement sous Ollydbug.
cdcheck2.5

Une fois le nouvel exécutable crée , on vérifie que l’on ne s’est pas planté. En effet, cette fois il doit vous affichez le message d’erreur : « Please enter a valid Serial! » Parfait. Place maintenant à la routine de calcul de cette fameuse clé d’activation !

Dans les referenced text string nous retrouvons nos ‘Please enter a valid Serial’, ainsi qu’un thank you for purchasing. Attardons nous sur ce dernier :

 

Allons y par étape : Tout d’abord les adresses : 00401C21, 00401C33, 00401C45 et 00401C57 reprennent toutes la même fonction :

Instruction FCOMP compare la valeur réel saisi à la valeur mathématique de 401D8C puis, systématiquement nous avons un JB vers ‘Please enter a valid serial’. L’instruction assembleur JB signifie : Jump if Below, ce qui signifie saute si inférieur à. Reste à voir à quoi correspond la valeur mathématique de ce [401D8C] . Je regarde donc un peu plus bas et je vois qu’ollydebug m’indique clairement  :

Ces 4 adresses précédemment citées représentent les 4 box du code à saisir et vérifient que ce que l’on a saisi au niveau des sections de codes de la clé d’activation est supérieur à la valeur 100000 pour chacune des boxs. Si non => JUMP vers « Please enter a valid serial ».

cdcheck2.9

Bien, voila une bonne étape de franchi. Ensuite vient le calcul de la routine de notre clé d’activation. Durant le calcul la routine va utiliser ces valeurs là :

Voici la version détaillée de l’algorithme :

pour résumer :

– le code saisi dans chaque box doit être supérieur à 100 000 et maximum 999 999 car nous n’avons la possibilité que de mettre 6 chiffres.
– le code saisi dans la box 3 = (box4 multiplié par 0.5) + 1422
– le code saisi dans la box 2 = (box3 multiplié par 3) – 555
– le code saisi dans la box 1 = (box2 multiplié par 2) – 311

Faisons donc un test avec le chiffre bidon 222222 dans la box 4.

Box 4 = 222222
box 3 = (222222 x 0.5) + 1422 = 112533
box 2 = (112533 x 3) – 555 = 337044
box 1 = (337044 x 2) – 311 = 673777

bingo !

cdcheck2.6

Voila cet article se termine, j’espère que ce second volet sur les protections CD Check vous aura plus, les fêtes de noëls approchent à grand pas, mais je tacherais de vous écrire un nouvel article sous peu. D’ici là prenez soin de vous et à très bientôt.

 

thomas.