# Crack (informatique)

Un crack est un programme qui s'applique sur un logiciel pour en modifier son code, dans le but d'utiliser gratuitement un logiciel payant, par exemple.

## Terminologie

Lorsque des personnes redistribuent des applications dites « craquées », on parle alors de warez. Lorsqu'une personne a trouvé comment craquer un logiciel, elle peut alors créer une version modifiée de celui-ci ou programmer un outil de piratage dédié qui permettra à d'autres personnes d'utiliser le logiciel en question sans l'avoir acheté au préalable.
Il ne faut pas confondre un crack avec un patch :
* un patch est la modification d'une application (logiciel, jeux vidéo…) pour apporter de nouvelles fonctionnalités, corriger des bugs ou modifier son fonctionnement. En général, le patch est fourni par le créateur du logiciel ;
* un crack est un type particulier de patch car il n'est pas officiel et son application n'est pas autorisée par l'éditeur du logiciel concerné.
Les cracks sont créés par des crackers. L'activité d'analyse et de modification des logiciels (souvent désignée par l'ingénierie inversée) est interdite dans la plupart des contrats de licences utilisateur des logiciels propriétaires.

## Utilité

Craquer un logiciel ou une application peut avoir plusieurs utilités :
* pouvoir utiliser un logiciel protégé ou une fonctionnalité bridée ou payante sans avoir acheté la licence correspondante au préalable, qui peut être considérée comme trop chère ou démesurée par rapport aux fonctionnalités apportées ;
* pouvoir tester pleinement le logiciel concerné avant de l'acheter, dans le cas d'une période d'essai trop courte ou trop limitante ;
* relever un défi ;
* tricher dans un jeu vidéo ;
* permettre une interopérabilité, une amélioration ou une modification du fonctionnement du logiciel qui est à l’origine non prévue par son éditeur ;
* pouvoir utiliser un logiciel sans devoir utiliser le CD correspondant (crack « No CD ») (aujourd'hui désuet).

## Outils du cracker

Le cracker peut utiliser plusieurs outils pour arriver à ses fins :
* des logiciels de détection, pour détecter le langage de programmation et les technologies utilisés par l'application à craquer et ses éventuels outils de protection ;
* des logiciels d'anti-protection spécialisés, permettant de déprotéger le logiciel concerné et de désobfusquer si besoin son code pour faciliter son analyse et sa modification ;
* un désassembleur, permettant d'analyser et de modifier le logiciel à partir de son code en assembleur ;
* un débogueur, qui permet de visualiser l'état du programme pendant son exécution et notamment les données qu'il conserve en mémoire (fonctionnalité souvent comprise dans un logiciel multifonction comme x64dbg ou IDA) ;
* des logiciels de suivi divers qui permettent de tracer les accès aux dossiers et aux fichiers du logiciel, au registre de Windows le cas échéant et à des serveurs distants, dans le but de comprendre son fonctionnement et de trouver d'éventuelles failles dans son système d’activation ;
* un éditeur hexadécimal, permettant de modifier précisément le programme ou un de ses fichiers binaires comme un fichier DLL si besoin ;

## Méthodes du cracker

Le but d'un crack est de contourner une limitation présente dans un logiciel payant, comme son enregistrement avec une clé ou un fichier de licence, et d'autres informations comme un nom d'utilisateur ou une adresse e-mail.
Pour ce faire, le cracker va procéder à de l’ingénierie inversée : le logiciel à craquer est soigneusement analysé et décortiqué à l'aide d'un désassembleur et le cracker essaye ensuite de trouver la fonction de protection qui s'occupe de vérifier son statut d'activation ou la validité de la licence saisie. Le but du cracking est ainsi de faire en sorte que la fonction concernée valide toujours la clé ou le fichier de licence entré dans le logiciel. Une fois que la fonction est repérée, celle-ci peut être grossièrement remplacée par l'instruction NOP (qui signifie « No Operation » en anglais ou « ne rien faire ») ou plus souvent détournée pour empêcher son exécution.
Cependant, certains crackers préfèrent ne pas modifier le code du logiciel pour assurer la stabilité et la durabilité de leur version craquée au fil des mises à jour, et en étudient de fait la fonction de protection. Ils peuvent alors réaliser un générateur de clés valides (« keygen » en anglais) pour permettre l'activation du logiciel, ou une DLL détournée appelée « hook » qui va s'attacher au logiciel pendant son exécution et modifier à la volée des données stockées en mémoire pour lui faire croire qu'il est activé. Les développeurs de logiciels propriétaires essayent cependant de complexifier ces processus d'analyse et de modification en utilisant des techniques et des logiciels de protection bien connus comme l'anti-débogage, l'obfuscation, la vérification régulière de la licence saisie depuis un ou plusieurs serveurs distants ou encore le calcul de la somme de contrôle du fichier exécutable principal pour détecter d'éventuelles modifications non désirées.
Certains crackers expérimentés peuvent également rechercher des vulnérabilités spécifiques dans le système d'activation du logiciel concerné qui pourraient s'appliquer dans des conditions bien spécifiques et être exploitables à partir d'un outil codé pour l'occasion comme un script. Dans le cas où le logiciel en question a été programmé dans un langage de haut niveau, celui-ci peut être décompilé pour obtenir une représentation plus ou moins précise de son code source. Cela est notamment possible avec des langages semi-compilés comme le C# ou le Visual Basic .NET qui sont traduits dans un langage intermédiaire pendant la compilation, ou des langages de script comme le Python ou le Batch dont le code source aurait été intégré dans un fichier exécutable avec des outils spécialisés.

## Protections à contourner

Le cracker peut faire face à des objectifs et des contraintes multiples lors du craquage d'un logiciel donné :
* trouver une clé ou un fichier de licence pour l'activer ;
* trouver l'algorithme de génération des clés ou des fichiers de licence, afin d'enregistrer le logiciel avec n'importe quel nom, par exemple ;
* enlever les diverses limitations du logiciel telles que :
** la limitation de certaines fonctionnalités utiles ou exclusives ;
** l'affichage de fenêtres intempestives d'activation appelées « Nag screen ».
Pour arriver à ses fins, le cracker doit souvent déjouer de nombreuses embûches comme :
* l'anti-débogage, qui rend le débogage bien plus difficile à mettre en place ;
* l'obfuscation ou la virtualisation du code réalisées par des logiciels de protection divers, qui rendent le débogage et l’ingénierie inversée très pénible et complexe ;
* la vérification de la licence depuis un ou plusieurs serveurs distants, qui complexifie son processus de détournement ou de suppression ;
* le calcul de la somme de contrôle du fichier exécutable principal, qui pourrait détecter d'éventuelles modifications non désirées et qui entraînerait l'affichage de fenêtres d'avertissement ralentissant le travail du cracker ;
* le chiffrement ou la compression, qui rendent l'exécutable plus difficile à analyser, voire illisible.

## Musique

Les outils de patch et les générateurs de clés publiés par les crackers ou les groupes de crackers possèdent souvent une musique électro ou rétro 8-bit dans le style des musiques de Game Boy, qui sont appelées chiptunes.