Commencer à cracker
Les logiciels nécessaires
Il y a plusieurs logiciels que vous pouvez utiliser pour cracker. Ils se complètent et ce serait bien si vous les aviez tous.
Visual C++ 4-6: Peu de personnes le savent, mais c'est l'un des meilleurs logiciels pour cracker. Même Micro$oft peut parfois faire de très bons programmes. Et comme la plupart des programmes ont été faits avec ce langage vous pourrez même avoir les sources de certaines parties des programmes. Il peut être utilisé pour cracker 90% des programmes 32 bits. Mais il ne peut pas débogguer ni les programmes 16 bits ni les programmes qui installent les fichiers système (comme les programmes protégés par les dongles)
Soft ICE : C'est le débogueur le plus puissant pour Windows 3.11, 95 et 98. Il peut être utilisé dans les cas où Visual C++ échoue. Il peut même aller jusqu'à déboguer les interruptions. Cependant il est beaucoup moins fiable, plus difficile à utiliser. Chez moi il ne fonctionne pas. C'est pourquoi je ne pourrai pas expliquer sont fonctionnement.
Win32 Dasm : C'est un désassembleur des programmes 32 bits. Il a tellement évolué qu'il est devenu un débogueur très puissant et convivial. Vous pouvez l'utiliser pour avoir un aperçu global des programmes, des routines, pour faire des recherches dans le code assembleur du programme ou pour extraire certaines routines (par exemple les routines d'encodage des clés afin de les analyser. Vous pouvez aussi l'utiliser si vous n'avez pas Visual C++. Chez moi il a quelques problèmes d'affichage, mais il devrait bien marcher chez vous.
Téléchargez la version complète à l'adresse: ftp://ftp.accesscom.com/pub/users/m/mav/warez/w32dsm89.zip
Hex Workshop : Un éditeur hexadécimal plutôt bien. Mais la plupart des éditeurs hexadécimaux peuvent convenir.
Téléchargez le à l'adresse: http://www.bpsoft.com/downloads/index.html#LATEST_32
Spy++ : Petit utilitaire fourni avec Visual C++ ou Borland C. Il permet d'espionner les fenêtres et les messages transmis à ces fenêtres par Windows.
Ce que vous devez savoir
Pour réussir à faire quelque chose d'intéressant vous devez avoir un minimum de connaissances:
Bien connaître le langage C:
Presque tous les programmes sont faits en langage C. Pour déplomber il faut souvent essayer de deviner comment le programmeur a fait sa protection pour essayer de la désactiver. Vous devez donc être capable de faire les petits programmes qui saisissent un code, qui le contrôlent et qui affichent un message.
Avoir quelques connaissances en assembleur:
Vous ne pouvez voir que le listing désassemblé des programmes. Et les commandes comme mov dword ptr [ebp-4],0 ne doivent pas vous faire peur. Ne soyez pas effrayés, il n'y a pas besoin d'être un as de programmation assembleur. Il suffit de connaître les bases.
Savoir programmer sous Windows:
Souvent il faut espionner les boites de dialogue ou le contenu des fenêtres. Pour faire ça il faut savoir au minimum qu'il existe une fonction WinMain par classe de fenêtre qui traite les messages transmis par Windows etc. Si vous avez fait quelques programmes avec Visual Basic vous pourrez apprendre beaucoup plus facilement la programmation en C sous Windows.
Il est également souhaitable de savoir utiliser les MFC car il y a de plus en plus de programmes qui les utilisent. Mais c'estfacultatif.
Entrer dans les programmes
Tout d'abord il faut réussir à voir le code du programme et pouvoir le déboguer. Avec Visual C++ 5 (Visual C++ 4 ou 6 sont un peu différents mais les étapes sont les mêmes) vous devez passer par les étapes suivantes:
Créer un nouveau projet:
Cliquer File,
New.
Dans l'onglet Projects sélectionner
Win 32
Application,
Donner un nom quelconque
au projet puis valider.
Indiquer où se trouve le fichier
exécutable à déplomber:
Cliquer Project, Settings.
Sélectionner l'onglet Debug de la boite des
paramètres du projet.
Indiquer le chemin de l'exécutable à
déplomber dans la zone "Executable for debug session", puis valider
les paramètres.
Commencer le déboggage:
Sélectionner
le menu Build, Start debug, Step Into (ou la touche F11).
Si Visual C++ vous indique que votre fichier ne contient
pas d'informations de déboggage désactivez ce message et continuez
quand même. Vous pouvez avoir plusieurs
autres messages. Ignorez-les, désactivez-les, mais continuez coûte
que coûte.
Déboguer:
C'est magique! Maintenant vous avez le code désassemblé du
programme et vous pouvez en faire ce que vous voulez. Les commandes les plus
importantes sont:
F10, Step Over: exécuter un pas sans entrer dans
les CALL
F11, Step Into: exécuter un pas en entrant dans
les CALL
F5, Go: exécuter le programme sans
l'arrêter
Set Next Statement (bouton droit de la souris sur
l'instruction): Forcer le programme à s'exécuter à partir
de la position cliquée. Par exemple pour contourner le test de la
validité du code.
Vous pouvez aussi afficher les fenêtres des registres,
de la mémoire, créer les variables à
surveiller.
Les méthodes pour cracker
Sous Windows c'est assez facile. Il suffit de connaître un peu d'assembleur et le langage C. Les programme les plus faciles à cracker sont fait en langage C pour Windows 95. En général ils vérifient un code de validation dans un fichier ou dans la base des registres ou si la date est valide.
Maintenant il ne reste plus qu'à déboguer le sous-programme et à remplacer quelques instructions par celles qui nous plaisent le plus (c'est à dire celles qui Et voici quelques unes des méthodes que j'ai réussi à appliquer avec succès (de la plus simple à la plus compliquée):
Si le programme stocke le nombre de lancement restants dans un fichier:
Vous pouvez créer une copie de sauvegarde
de ce fichier et remplacer le fichier original par le fichier sauvegardé
avant chaque lancement du programme (grâce à un petit programme).
Le nombre de lancement restants ne diminuera jamais. Cette méthode
marche avec la version lite d'Omnipage.
Si le programme stocke la date d'installation dans un fichier .ini ou dans la base de registres:
Vous pouvez essayer de supprimer
la date d'installation. Souvent les programmes la recréent automatiquement
et vous disposerez de nouveau de toute la période d'utilisation. Si
ça ne marche pas vous pouvez créer un petit programme que remplace
la date par la date système d'aujourd'hui. Cette méthode marche
avec Visual Planning (avec quelques adaptations).
Si le programme vérifie la date pendant son lancement:
Vous pouvez créer un programme
qui modifie la date au moment du lancement pendant quelques secondes
jusqu'à l'apparition de la fenêtre du programme (grâce
à la fonction FindWindow) puis la remet après le lancement
du programme. Cette méthode marche avec LFN.
Si le programme affiche les boites de dialogue embêtantes:
Vous pouvez faire un programme
qui surveille les fenêtres (grâce à FindWindow) et ferme
immédiatement la fenêtre indésirable (grâce à
SendMessage). Pour savoir quelle fenêtre doit être surveillée
et quel message doit être envoyé vous pouvez utiliser Spy++.
Cette méthode pourrait marcher avec Paint Shop Pro (mais pas
parfaitement).
Le programme demande un code d'enregistrement et affiche une boite de dialogue standard indiquant que le code n'est pas valide:
La boite de dialogue s'affiche
généralement juste après le test du code d'enregistrement.
Vous pouvez faire un Break au moment où la boite de dialogue est
affichée. Comme Visual C++ ne sait pas déboguer le code
système le programme s'arrêtera juste après le click
sur OK à l'instruction qui suit le "call [boite de dialogue]". Si
vous regardez quelques lignes devant ce call vous verrez sûrement un
"call [vérification du code saisi]" suivi de l'instruction jne (ou
je, ja, jbe, jb, jl). Le saut se fait (ou ne se fait pas) si le code est
valide. Vous pouvez mettre un point d'arrêt à cette adresse
et regarder ce qui se passe en cas de saisie d'un code non valide. Saisissez
de nouveau un code et essayez d'aller à l'adresse qui ne serait pas
exécutée normalement (avec Set Next Statement). Si vous voyez
un message du genre "Merci pour votre enregistrement ;-)" vous avez trouvé
le bon endroit. Maintenant vous pouvez ouvrir un éditeur Hexa, rechercher
l'emplacement de l'instruction trouvée et remplacer pas son contraire.
Le code sera toujours accepté.
Cette méthode (enfin presque) marche avec
WebExpert
Le programme affiche un message à chaque démarrage:
Vous pouvez l'exécuter
pas-à-pas jusqu'à trouver le call qui affiche le message. Pour
trouver plus vite vous pouvez commencer à déboguer les grandes
étapes, sans entrer dans les call (touche F10) jusqu'à l'apparition
du message. Repérez le call qui a conduit à l'affichage du
message et mettez un point d'arrêt à cet endroit. Relancez le
programme et exécutez-le jusqu'au call repéré. Entrez
dans ce call (touche F11) puis continuez jusqu'au nouvel affichage du message.
Répétez la même opération jusqu'à trouver
le dernier call conduisant à l'affichage du message.
Exécutez le programme jusqu'au dernier call
trouvé. Essayez de voir ce qui se passe si ce call n'est pas appelé:
faites Set Next Statement pour positionner le pointeur d'instruction à
l'adresse qui suit le call (faites attention pour que les paramètres
passés au sous-programme ne restent pas sur la pile lorsqu'il n'est
pas appelé. Ca conduirait au plantage).
Si tout se passe bien, ça ne plante pas et le message
n'est pas affiché, vous pouvez désactiver le call trouvé
ainsi que tous ses paramètres: Ouvrez l'éditeur Hexa. Retrouvez
les instructions repérées. Remplacez-les par autant de NOP
(aucune opération) que nécessaire (code de NOP 0x90).
Une variante serait de remplacer la sous-routine d'affichage
du message par RET. Il faut quand même ne pas oublier de dépiler
les paramètres.
Cette méthode a marché avec AX Disk Catalog
2.1
Aucune des méthodes précédentes n'a abouti:
Il y a pas mal d'autres
méthodes (presque une par logiciel). Par exemple vous pouvez surveiller
WinMain de la fenêtre de validation du code. Mais ça devient
vraiment compliqué. Peut être je décrirai tout ça
une autre fois.
Quelques astuces:
Pour reconnaître le début d'une fonction
vous pouvez chercher les instructions du genre:
push ebp
push edx
add esp,0FFFFFEF8h
(plusieurs push, manipulation d'esp, ebp).
Le début d'une fonction est
souvent précédé de ret de la fonction
précédente.
Si vous voyez beaucoup d'instructions identiques comme:
add
byte ptr [eax],al
add byte ptr [eax],al
C'est plutôt une zone des données.
Vous pouvez définir les espions sur tous les registres
pour voir les chaînes de caractères sur lesquelles ils pointent.
Par exemple: (char*)eax
Ainsi vous pourrez voir facilement les messages du genre "Code incorrect"
pendant l'exécution. Ca vous aidera à faire les bonnes
déductions.
Trouver un code personnalisé pour Web Expert 3
Présentation générale
Web Expert 3 est un excellent éditeur html.
Il devra plaire à ceux
qui veulent éditer les pages en mode textuel (avec les tags) pour
profiter au mieux de la puissance d'html. Il contient plein d'applets Java
prêts à l'utilisation, des Java Scripts etc. En plus il contient
la documentation HTML, JavaScript et CGI.
Si vous n'avez pas encore Web Expert 3 téléchargez le à l'adresse: http://www.visic.com/webexpert/download.html.
Sur la page Cracks & Programmes Crackés vous trouverez quelques codes qui fonctionnent avec Web Expert 3 mais si vous souhaitez avoir un code d'enregistrement à votre nom lisez la suite. En plus c'est un excellent moyen d'apprendre à cracker les logiciels.
Principe de fonctionnement
Au démarrage Web Expert appelle un
routine qui teste si le code (lu dans la base de registre) est valide (la
1ère idée qui vient en tête c'est de saboter la routie
de test du code). S'il n'est pas valide, une boite de dialogue est
affichée. Lorsqu'on clique sur le bouton enregistrer, la boite de
dialogue d'enregistrement est affichée.
Le click sur le bouton OK de la boite de dialogue
d'enregistrement active une routine qui génère (on peut modifier
la routine de génération du code) le code d'enregistrement
à partir du nom (c'est à ce moment qu'on peut trouver un
numéro de série personnel). Ensuite le code
généré est comparé au code saisi. Si le code
saisi n'est pas le même, un message d'erreur est
affiché.
Recherche du code
Commencez le déboggage:
Normalement vous devez voir la première
instruction: push
ebp à l'adresse 00626A28
(Les adresses sont valides pour la version 3.0 beta 1)
A un certain moment Web Expert génère
un code pour le comparer. Presque toutes les opérations doivent passer
par le registre EAX y compris ce code. Définissez un espion de EAX:
Affichez la fenêtre Watch.
Saisissez la variable à espionner:
(char*)eax
Lancez l'exécution du programme (touche
F5).
Une fenêtre d'insultes ;-) doit apparaître
Cliquez sur le bouton Enregistrer pour afficher la boite de dialogue d'enregistrement.
Tapez votre nom et un code quelconque dans cette boite de dialogue. Cliquez OK.
Encore une insulte s'affiche: "Mauvais numéro d'enregistrement". Mais il ce programme va être puni pour ses insultes car cette boite de dialogue est le meilleur point de départ pour le déplombage.
Cliquez sur le menu Debug, Break. Alors ? Rien ne se passe. C'est normal. La boite de dialogue qui est affichée est une boite de dialogue système. Or Visual C++ ne sait pas déboguer le système. Le programme ne s'arrêtera que lorsque la boite de dialogue sera fermée. En plus il s'arrêtera sûrement à quelques instructions du test du code d'enregistrement.
Cliquez sur OK de la boite de dialogue "Mauvais numéro d'enregistrement". Le programme s'arrête. Vous devez voir
mov dword ptr [ebp-8],eax
et juste avant call
00407A40 (celui qui affiche la
boite de dialogue)( les adresses peuvent être
différentes)
Maintenant il faut avoir un peu de flair et un peu de chance. Affichez
la fenêtre Call Stack. Vous voyez tous les appels:
=>WEXPERT3!
00452e63()
WEXPERT3! 0050ab6e()
WEXPERT3! 004370d0()
WEXPERT3! 0042e5c9()
Ces appels signifient qu'il y a 4
call imbriqués. On peut se douter que la routine dans laquelle on
se trouve (WEXPERT3! 00452e63()) est une routine d'affichage
du message "Mauvais numéro ...". Donc cette boite de dialogue a
été appelée par le 2ème call (WEXPERT3!
0050ab6e()). Ca veut dire que test de la validité a été
fait un peu avant l'adresse WEXPERT3! 0050ab6e()(si vous n'avez
pas tout a fait la même adresse utilisez la vôtre).
Double cliquez sur le 2ème call (WEXPERT3! 0050ab6e()) pour trouver l'adresse qui suit l'appel de la routine qui affiche le message d'erreur. C'est dans cette routine que se trouve le test de la validité du code.
Recherchez où se trouve le début de la routine de test. Vous pouvez le repérer grâce à un grand nombre (de 4 à 10) de push ECX; push ECX; push EBX .... Normalement il doit se trouver environ 80 lignes plus haut. Mettez un point d'arrêt à cet endroit.
Laissez le programme s'exécuter (touche F5 - Go)
Saisissez de nouveau votre nom et un numéro
quelconque. Puis cliquez sur OK.
Normalement le programme doit s'arrêter juste au moment du click. Si
ce n'est pas le cas relisez tout et réessayez en faisant un peu plus
attention.
Maintenant vous pouvez exécuter pas à pas toute la routine. Comme à un moment elle fait une comparaison entre le code saisi et le code généré vous aurez l'occasion de voir le code d'enregistrement.
Faites une trentaine de pas avec la touche F10.
Vous verrez que l'espion (char*)eax va changer et à un certain moment
il affichera une valeur du genre 0x01d654c4 "G9KN-LEQH-TSND-54B1"
C'est votre code personnel !!! Notez le.
Relancez Web Expert.
Enregistrez-vous avec votre nom et le code que vous avez trouve. Il sera accepté et vous aurez une version complète.
C'est tout !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Vous avez déjà vu les fichiers Word soigneusement protégés par des gens malhonnêtes qui veulent toujours cacher quelque chose (pas comme nous qui ne cachons rien ;-) ). Ca ne vous donne pas envie de voir ce qui est écrit dedans ?
Pour l'instant je vous donne seulement une méthode pour décrypter les fichiers à la main. Mais dans quelques semaines (ou mois :-( ) je ferai un programme qui fera automatiquement tout ce que j'ai décrit. Il faut juste comprendre le format des fichiers de Word 97 (la description occupe 100 pages).
Principe de fonctionnement
J'ai essayé de trouver un moyen pour le faire et j'ai trouvé pas mal de choses intéressantes.
Lorsque vous protégez
un fichier par un mot de passe, Word génère un code de 32 bits
correspondant au mot de passe que vous avez saisi. Ce code est stocké
dans le fichier protégé. Il sert à tester si le mot
de passe que vous allez saisir est valide.
Simultanément un deuxième code de 16 octets
est généré à partir du même mot de passe.
Ce code sert à crypter les données.
Les données sont cryptées en faisant un
"ou exclusif" (XOR) entre le code et les données. Cette opération
est répétée par block de 16 octets autant de fois que
nécessaire pour encrypter tout le fichier.
Les données cryptées ne peuvent pas être
affichées par les éditeurs de textes. Vous devez utiliser un
éditeur hexadécimal pour les visualiser.
Méthode de décryptage
Je suppose que les explications
ci-dessus vous ont inspiré quelques mauvaises idées ;-) . Le
moyen le plus rapide serait de trouver le 2ème code de 16 octets puis
de décrypter tout le fichier avec ce code. Or le décryptage
des données codées par XOR est très simple. Il suffit
de répéter la même opération entre les données
cryptées et le code. Vous pouvez faire cette opération avec
la calculatrice de Windows.
La formule du cryptage
est:
crypté=donnée XOR
code
La formule du décryptage est:
donnée=crypté
XOR code
Par exemple si la lettre
'a' (ascii = 41h en
hexadécimal) a été
cryptée avec le code
58 h
vous obtiendrez le caractère crypté:
41h XOR 58h =
19h. Pour le décrypter il faut
faire 19h XOR 58h =
41h. Or 41h c'est le code ascii de la
lettre 'a' .
Maintenant vous savez comment on peut décrypter les données lorsqu'on a le code. Mais il faut encore trouver ce code. Ce n'est pas très compliqué non plus. Si vous essayez plusieurs codes différents vous verrez que seuls quelques-uns conduisent aux caractères valides. Par exemple si, par erreur, vous utilisez le code B2h pour décrypter le caractère crypté 19h de l'exemple précédent vous obtiendrez : 19h XOR B2h = ABh. Le caractère obtenu est a pour code ascii ABh (171 en décimal). C'est '½'. Vous pouvez facilement vous douter que ce caractère ne peut pas se trouver dans le texte et éliminer le code que vous avez utilisé. De cette façon vous pouvez retrouver le code exact. Vous pouvez aussi utiliser quelques particularités statistiques. Par exemple tous les textes contiennent beaucoup d'espaces. Si vous tombez sur un code qui produit beaucoup d'espaces vous avez de fortes chances qu'il soit bon.
Pour repérer où se trouvent les données cryptées vous devez avoir pas mal de flair. Généralement elles sont composées d'un block de caractères incompréhensibles. Ce block se trouve après une longue suite de caractères 00 (nuls). Ma version de Word 97 place les données à partir de l'offset 600h à partir du début de fichier (mais ça peut varier fortement).
Comme le code fait 16 octets, il est répété
tous les 16 caractères. Faites 16 colonnes pour vous faciliter le
décryptage. Dans chaque colonne notez les caractères cryptés,
le code que vous testez pour cette colonne et les caractères
décryptés.
Un exemple de décryptage
Votre éditeur hexa affiche les lignes suivantes (quelque part au milieu
du fichier):
00000600 0F 52 AF C6 9E 11 EA B7 E6 50
DB 26 09 30 C4 F9
00000610 2C 1D B6 D0 CD 50 FA BB FF 18 D6 AA
11 A3 C4 D8
00000620 36 4F BE 95 CD 1F F5 B5 F2 15 CA BC
06 BD 81 E1
On essaie de trouver le 1er octet du code (valide pour
la 1ère colonne). Par exemple 25h.
On calcule 0Fh XOR 25h =
2Ah. Le code 2Ah obtenu correspond
au caractère
'*'. On peut penser qu'on s'est trompé car ce
caractère a peu de chances de se rencontrer. Pour s'assurer on peut
tester la 2ème ligne: 2Ch
XOR 25h = 9h. Ca ne correspond
à aucun caractère. Donc on peut être presque sûr
que le code 25h était un mauvais choix.
On essaie un autre code. Par exemple 59h. On fait de nouveau un calcul: 0F XOR 59h = 56h. C'est le caractère 'V'. Pour être sûr que ce n'est pas le hasard on essaie la 2ème ligne: 2Ch XOR 59h = 75h. Caractère 'u'. On peut aussi tester la 3ème ligne. Apparemment c'est le bon code (bien sûr je le savais, mais normalement il faut un centaine d'essais avant de réussir).
Maintenant on peut passer à la 2ème colonne. Essayons 3Dh: 52h XOR 3Dh = 6Fh. C'est 'o'. Le même calcul pour la 2ème ligne: 1Dh XOR 3Dh = 20h. C'est un espace. Ca s'annonce bien. Les espaces sont normalement assez fréquents.
De même on trouve le code DAh pour la 2ème colonne.
On a déjà trouvé les 3 octets du code: 59 3D DA. Avec ce code on obtient le début du mot 'Vou' . Vous ne devinez pas les lettres qui suivent ? C'est sûrement un 's' puis un espace pour former 'Vous '. Avec une propriété de l'opérateur XOR on peut trouver l'octet suivant du code sans aucun essai. Un XOR entre le caractère crypté de la quatrième colonne et le caractère ( s = 73h) que vous avez deviné va donner automatiquement le code de cryptage: 73h XOR C6h = B5h. De la même façon vous trouvez le 5ème octet du code: 20h XOR 9Eh = BEh.
De cette façon vous trouvez les 16 octets du code.
Le code utilisé pour le cryptage est :
59 3d da 69 be 70 9c d2 9c 70 bf cf 63
d0 e4 8f
Avec ce code on peut
décrypter tout le fichier. Par exemple pour la 1ère ligne:
0F 52 AF C6 9E 11 EA B7 E6 50
DB 26 09 30 C4 F9
XOR
59 3d da 69 be 70 9c d2
9c 70 bf cf 63 d0 e4 8f =
56 6F 75 73 20 61 76 65 7A 20 64 2E 6A 2E 20 76
En tout cette ligne donne:
'Vous avez déjà
v'.
On refait la même opération avec toutes les autres lignes pour décrypter toutes les autres lignes. La 2ème ligne est : 'u les fichiers W'.
Quelques explications supplémentaires
J'ai fait cette partie il y a assez longtemps. Elle n'est plus tout à fait à jour. Mais vous pouvez trouver quelques informations utiles. C'est pourquoi je l'ai laissée ici.
Le code qui indique si le fichier a
été crypté est en fait un nombre représentant
le système de cryptage. Il vaut 12 (en hexa) si le fichier n'a pas
été crypté ou 0x93 si le fichier a été
crypté avec un système de codage standard (version française
de Word 97). Si vous créez un nouveau fichier et vous le protégez
par un mot de passe vous pourrez retrouver ce code à l'adresse 0x20B
à partir de début de fichier. Mais s'il ne se trouve pas à
cet endroit vous pouvez faire une recherche de la chaîne 0x00000093.
Un fois que vous avez repéré le code du
cryptage vous pourrez retrouver le mot de passe codé. Ce mot de passe
se trouve 2 octets plus loin et occupe 4 octets (Ah! C'est une faille de
sécurité! ce n'est pas très long!). Vous pouvez
vérifier si c'est bien le mot de passe avec une astuce très
simple: Changez le mot de passe puis ouvrez le fichier modifié de
nouveau. Si les octets que vous avez repéré ont changé,
vous ne vous êtes pas trompé.
Vous pouvez maintenant taper un mot de passe et voir comment il est crypté par Word. J'ai vu que le deuxième octet dépend surtout de la taille du mot de passe. Par exemple s'il vaut 0xDE le mot de passe a toutes les chances d'être composé de 6 caractères. C'est plus difficile pour les autres octets. Je n'ai pas encore trouvé de méthode précise pour retrouver le mot de passe. Mais, comme vous avez vu, le nombre de possibilités est assez réduit. Dans le pire des cas on peut avoir 4000000000 possibilités. Donc un décryptage brutal n'est pas impossible. En plus un octet représente la taille ce qui réduit de 256 fois le nombre de possibilités.
On peut essayer de créer un programme qui teste tous les mots de passe et qui stocke les codes obtenus lorsqu'ils sont cryptés. Bien sûr il faut trouver des astuces pour réduire au minimum le nombre de tests et il faudra plusieurs jours de calcul.
Mais si on veut quelque chose de plus performant on peut essayer d'abord de comprendre comment ces mots de passe sont cryptés. On peut modifier une seule lettre du mot de passe et voir ce qui change lorsqu'il est crypté. On peut aussi modifier la taille des mots de passe, changer un seul bit dans chaque lettre (ex @ et Ç qui ont des codes 64 et 128) etc. Après tous ces essais il sera possible de déduire la formule mathématique du codage. Comme vous avez vu, cette méthode m'a déjà permis de trouver la taille mais on peut faire beaucoup plus.
On peut essayer de procéder autrement. Plutôt que de chercher les mots de passe brutalement, on peut analyser la routine de cryptage. Il faut déboguer l'exécution de Word jusqu'à trouver une routine qui convertit les mot de passe en un entier avec toutes les méthodes de craquage . Un bon point de départ serait la boite de dialogue qui demande de saisir un mot de passe pour ouvrir un fichier. Lorsqu'on clique sur OK elle appelle la routine de cryptage puis elle compare le mot de passe stocké avec celui qui a été saisi. Et c'est là que vous pourrez l'attraper (:-o).