|
Tutorial n° 4
UltraEdit
V.8 (Version Française)
Par
Freud
-
Date
: 31 Janvier 2001
-
Logiciel
: UltraEdit V.8
-
Distributeur
: IDM
(Ian D. Mead)
-
Protection
: AsPack 2.01, Utilisation limitée à 45 jours, NagScreen
au lancement du programme
-
Outils
: ProcDump, WDasm 8.93, SoftIce 4.01, Hiew
-
Pour
me contacter : French_Freud@Hotmail.com
-
Avant-Propos
Avec
beaucoup de retard, je vous souhaite à tous et tout(es ??)
une bonne et heureuse année !! Quelle soit faite pour nous
de nombreux défits et nouvelles protections de plus en plus
intéressantes à cracker.
C'est donc après 6 mois d'absence (pour cause de stage en
Angleterre) que je reviens pour proposer un nouveau tutorial qui
concerne le logiciel UltraEdit V.8 (VF). Un éditeur très
puissant que j'utilise régulièrement (et crack à
chaque nouvelle version aussi) pour créer et compiler des
programmes en Java, C++ ou encore assembleur Win32. Auparavant,
je n'avais pas fait de tutorials à propos de ce logiciel,
utilisé pourtant par beaucoup de personnes, car son système
de protection était, on va dire, assez facile à supprimer;
c'est un peu différent avec la version 8.
Je
dédicace ce tut à : Anne-Laure, Mathilde, Mélissa,
Aurélie, Sophie, Alison & Gemma (from Portsmouth - ENGLAND).
-
Au
lancement du logiciel...
Quand on lance UltraEdit V.8, un beau NagScreen surgit nous rappelant
que ceci est une copie non enregistrée du programme et que
nous pouvons seulement l'utiliser dans un but d'évaluation
pour une durée de maximun 45 jours. Celui reste affiché
quelques secondes (très ennuyantes), et il disparait ensuite
pour nous laisser la main. Pour supprimer ce NagScreen, il faut
rentrer son nom et un code d'autorisation pour passer le logiciel
en mode enregistré. On peut le faire soit en cliquant sur
le bouton se trouvant sur le NagScreen ('Entrez le code d'autorisation')
ou alors en allant dans le menu '?' et en choisissant l'item 'Enregistrer
UltraEdit-32'.
-
A
la découverte de la protection
La logique
voudrait qu'on commence par désassembler l'éxécutable
d'UltraEdit avec Wdasm pour essayer de trouver des String Reference
à propos du NagScreen. Si on arrive à faire cela
c'est pratiquement gagné...Essayons de commencer par
le plus facile...Pas de chance...si on essait d'ouvrir le fichier
'uedit32.exe' avec Wdasm, ce dernier plante lamentablement.
A ce niveau là on peut déjà s'inquiéter
un peu et se dire que notre crack ne va pas être si facile
à réaliser car lorsque Wdasm ne désassemble
pas un programme c'est en général que ce dernier
est crypté et/ou compressé par une protection
du type AsPack, AsProtect, etc...
Quand on arrive à ce point, il est bon de connaître
à quelle méthode de protection nous avons affaire
afin de mieux la combattre. Il existe pour cela de nombreux
logiciels à savoir : PE Sniffer, File Analyser, File
Scanner, etc...disponible en téléchargement sur
le site de protools.
Pour ma part j'ai utiliser ProcDump pour voir le nom des
sections qui sont parfois révélatrice comme ici
par exemple :
Number of Objects = 0006 (dec), Imagebase = 00400000h
Object01: .text RVA: 00001000 Offset: 00000600 Size: 000CFC84 Flags: C0000040
Object02: .rdata RVA: 000D1000 Offset: 000D0400 Size: 000244C4 Flags: C0000040
Object03: .data RVA: 000F6000 Offset: 000F4A00 Size: 0000D13C Flags: C0000040
Object04: .rsrc RVA: 00112000 Offset: 00101C00 Size: 0003F610 Flags: C0000040
Object05: .aspack RVA: 00152000 Offset: 00141400 Size: 00002D90 Flags: C0000040
Object06: .data RVA: 00155000 Offset: 00144200 Size: 00000000 Flags: C0000040
Comme
vous pouvez le constater, UltraEdit est protégé
par une Ready Made protection : AsPack. Je voudrais signaler
que ni PE Sniffer V106, ni File Analyser, ni File Scanner
n'a su me donner ce renseignement. Je pense qu'il s'agit donc
de la dernière version 2.1
Voici les informations que j'ai pu glaner sur AsPack (qui
a déjà fait l'objet de nombreux tutorials dois
je le préciser ?? Cependant je pense qu'il n'est pas
inutile d'avoir toujours plus d'informations).
ASPack - Executable compressor
ASPack
is an advanced Win32 executable file compressor, capable of
reducing the file size of 32-bit Windows programs by as much
as 70%. ASPack makes Windows 95/98/NT programs and libraries
smaller, and hence faster to both load and download; it
also protects programs against reverse engineering by non-professional
hackers. Programs compressed with ASPack are self-contained
and run exactly as before, with no runtime performance penalties.
Features
- advanced processing of executable files (exe, dll, ocx)
- encoding and compression of program code, data, and resources
- completely transparent, self-contained operation with long
filename support
- fast decompression routines deliver better performance than
competing products
- integrates directly into Windows as a shell extension for
ease of use full Windows 95, Windows 98 and Windows NT compatibility
Benefits
- significant reduction in executable file sizes, averaging
from 40-70% decrease load times across networks, and download
times from the internet
- embedded Windows applications require significantly less
storage space
- protects resources and code against
peeking, disassemblers and decompilers
- no runtime royalties for distributing compressed programs
- compatibile with executables created by Microsoft Visual
C++, Visual Basic, Inprise (Borland) Delphi and C++ Builder,
and other Win32 compilers
-
Réaliser
un dump fonctionnel d'un logiciel compressé avec AsPack
2.1
Qu'est qu'un Dump ? (Eh oui cela peut paraître
trivial pour beaucoup d'entre vous cependant je suis sûr
qu'il y en a un certain nombre qui reste interloqué.
A ce propos, je voudrais attirer l'attention des rédacteurs
de tutorials qui parfois restent très vagues sur des
termes qui pour eux cela leur paraissent évidents; je
pense qu'il est nécessaire d'être le plus précis
possible bien qu'il y est des limites et qu'en tant que rédacteur
de tutorials je sais que cela demande du temps, du travail et
que l'on a tendance à vouloir aller au plus vite en supprimant
des explications qui peuvent nous paraitre inutiles). Cette
parenthèse étant faite je vais essayé de
vous expliquer ce qu'est un Dump.
Lorsque un programme est compressé par une protection
type AsPack par exemple, un loader est intégré
a celui-ci. Le loader intervient lors de l'éxécution
du programme, il va s'attacher à décompresser
le programme en mémoire afin qu'il puisse s'éxécuter
comme un programme normal.
Voilà donc comment s'éxécute un programme
compressé :
1. Lancement du loader (Invisible à l'oeil de l'utilisateur)
2. Décompression du logiciel en mémoire
3. Le loader donne la main au programme décompressé.
Eh bien un Dump d'un logiciel compressé correspond à
prendre le contrôle lorsque le loader rend la main au
programme décompressé et a sauvegardé celui-ci
sur le disque. Ainsi on obtient un fichier exécutable
fonctionnel (dans la plupart des cas, il y a des exeptions)
que l'on peut désassembler avec WDasm afin de trouver
des String Reference, etc...
Application de tout ça à UltraEdit
V.8
Pour commencer, il faut charger le logiciel avec le Symbol
Loader de SoftIce. On s'aperçoit vite que SoftIce ne
nous donne pas la main à l'entry_point du programme (=
première instruction exécutée). Pour corriger
ce problème, il suffit de rendre la première section
'.text' Readable, Executable, Writable grâce
à ProcDump (code
E0000020 à la place du C0000040, cf plus haut dans ce
tutorial ou je montre toutes les sections et leurs caractériques).
Une fois ce problème corrigé,
SoftIce break à l'entry point. Il suffit
maintenant de trouver quand est ce que le loader a fini de décompresser
le logiciel en mémoire et qu'il est sur le point de lui
rendre la main. C'est assez simple à trouver car il y
a des signes caractéristiques (POPAD, JMP EAX, PUSH entry_point
puis RET, etc...). En traçant un petit peu (F8 sous SoftIce)
on arrive facilement à trouver le POPAD dans notre exemple
UltraEdit. On le trouve à l'adresse :5523AA.
REM : Contrairement aux versions précédentes
de AsPack, le loader décrypte une partie de son code
au début du coup le POPAD n'est pas visible tout de suite,
il faut attendre un peu. Ne perdez pas courage le loader est
un bout de code très petit et en général
on voit arriver le POPAD très rapidement. Si vous arrivez
à sentir le code vous verrez tout de suite la routine
de décryption et vous ferez le le nécessaire pour
la passer et arriver plus vite au POPAD.
Voici le code qu'on trouve pour UltraEdit :
:005523AA 61 POPAD :005523AB 7508 JNZ 005523B5 :005523AD B801000000 MOV EAX,00000001 :005523B2 C20C00 RET 000C :005523B5 68A8334900 PUSH 004933A8 > Entry_Point :005523BA C3 RET
Comme vous pouvez le constater le programme pousse
la valeur de la prremière instruction à exécuter
du programme décompresser sur la pile et grâce
au RET on commence l'éxécution en :004933A8
A ce moment, sous SoftIce vous faites : a (Assemble)
005523BA et JMP EIP. Ainsi le programme tournera en rond à
l'adresse :005523BA.
Lancer ensuite ProcDump et faites un click droit sur la task
uedit32.exe puis Dump full. Editer l'entry_point du dump avec
ProcDump remplacer la valeur existante par 004933A8-00400000
(Image Base)=000933A8. Et voilà vous avez un dump fonctionnel
du logiciel UltraEdit. N'oubliez pas de killer l'application
qui tourne en rond en mémoire. Comme vous pouvez le constater
le logiciel dumpé occupe environ 1,300 KB au lieu des
500 KB compressé. Un rapide
calcul nous montre que le programme a perdu 62% de son poid
grâce à AsPack.
-
Cracker
le logiciel devient alors un jeu d'enfant
Ouvrez dès à présent
le logiciel dumpé avec WDasm et oh miracle Wdasm désassemble
ce programme sans aucun problème vous donnant par la
même occasion accès a toute les String Reference
dont nous avons besoin.
Rechercher par exemple cette String Reference
:
String Resource ID=00008: "Ceci est une
copie non enregistée de UltraEdit-32. Si vous c"
Vous pouvez voir qu'il en existe un sacré
paquet dans le fichier désassemblé. Avec un peu
de bon sens on peut trouver le bon endroit à patcher
pour supprimer le NagScreen. On sait que le logiciel est limité
à 45 jours d'utilisation donc on peut se douter qu'il
va y avoir dans le programme quelques chose du style CMP xxx,0000002D
(2D (hex)= 45 (deci)). Faisons une recherche sur 0000002D...Bingo
!! On trouve une seule référence CMP EAX,0000002D
avec en dessous des String Reference du style 'String Resource
ID=00068: "La période d'évaluation d'UltraEdit
de 45 jours a expiré!!!"'.
Voici ce que l'on trouve dans WDasm :
:0047843E E8D7A80100 call 00492D1A
:00478443 83F82D cmp eax, 0000002D
:00478446 59 pop ecx
:00478447 7F0C jg 00478455 > Si EAX > 45 (2D) alors fin d'évaluation
:00478449 399E48010000 cmp dword ptr [esi+00000148], ebx
:0047844F 0F8576FFFFFF jne 004783CB > Saute toujours sinon affiche fin d'évaluation
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00478447(C)
|
:00478455 E8CDFBF8FF call 00408027
:0047845A 391DB0735000 cmp dword ptr [005073B0], ebx
:00478460 758A jne 004783EC
:00478462 A12CED4F00 mov eax, dword ptr [004FED2C]
:00478467 894510 mov dword ptr [ebp+10], eax
:0047846A 894514 mov dword ptr [ebp+14], eax
* Possible Reference to String Resource ID=00068: "La période d'évaluation d'UltraEdit de 45 jours a expiré!!!"
|
:0047846D 6A44 push 00000044
:0047846F 8D4D10 lea ecx, dword ptr [ebp+10]
:00478472 C645FC02 mov [ebp-04], 02
:00478476 E871FA0200 call 004A7EEC
* Possible Reference to String Resource ID=00069: "Pour continuer à utiliser UltraEdit vous devez envoyer votre"
|
:0047847B 6A45 push 00000045
.
.
.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047844F(C)
|
:004783CB 391DB0735000 cmp dword ptr [005073B0], ebx
:004783D1 7519 jne 004783EC > Affiche le NagScreen
Analyse
:
Le programme a chaque utilisation vérifie
si la période d'évaluation est expirée
ou pas si oui il affiche que le logiciel n'est plus utilisable
et se ferme. Dans le cas contraire, il affiche le NagScreen
avec le nombre de jours restant. C'est la que nous intervenons
!! Nous allons remplacer l'instruction
jg 00478455 par un jmp
004783EC. Ainsi,
on saute la vérification de la date et l'affichage
du NagScreen.
Si on remplace donc le jg 00478455 par jmp 004783EC dans le
programme dumpé avec un éditeur hexa style Hiew,
tout se passe très bien !! UltraEdit est cracké
!!
REM : En
fait pour être un tout petit peu plus précis,
le logiciel commence par regarder au lancement si vous avez
rentré un code d'enregistrement dans le fichier uedit32.reg
(Ce fichier qu'après avoir rentré un code d'enregistrement).
Si il existe il regarde si le code est bon et lance le programme
normalement, sinon c'est à ce moment qu'il vérifie
que le nombre de jours restant (dans une clé registre)
est inférieur à 45 et affiche le NagScreen.
Vous allez me dire c'est bien de savoir comment
cracker le logiciel dumpé; c'est pas dure les octets
à modifier son directement accessible dans le fichier
sur le disque ce qui est loin d'être le cas dans le
fichier qui se décompresse.
-
Comment
faire pour que le fichier compresé s'auto-patch au
démarrage
Patcher
un logiciel compressé avec AsPack a déjà
été expliqué dans beaucoup d'autres tuts
(je l'avais moi-même décrit pour le logiciel
AddWeb 3.15). Cependant, pour cette version d'AsPack cela
diffère un peu du fait qu'il décrypte une partie
de son code au lancement...cela complique un peu les choses.
Le principe :
Une fois qu'AsPack a fini de se décrypter, modifier
le code vers le POPAD pour prendre le contrôle à
ce moment et ainsi patcher le logiciel qui je le rappelle
est complètement décompressé en mémoire
et est prêt à être exécuté.
Le but ici est je le redit de remplacer l'instruction jg 00478455
par jmp 004783EC.
Il faut donc trouver pour commencer l'endroit du programme
où la décryption a lieu (cet endroit est présent
physiquement sur le disque évidement et permettra qu'il
soit modifier par un éditeur héxa).
En posant un BPM (Break Point On Memory Access) en :5523AA
c'est à dire la ou le POPAD va être décrypté,
on trouve facilement la routine de décryptage.
Elle se termine à l'adresse :552553. L'instruction
codé à cet endroit est un jmp 553887 ca tombe
bien. on modifie ce jump vers notre_routine1 c'est à
dire un jmp 5538B1.
En effet, à partir de 5538B1 on a une suite 00 qui
vont nous servir à insérer notre patch puisque
ces octets ne servent à rien. Auparavant je m'en suis
assuer en posant un BPM.
A ce moment, il faut modifier l'instruction situer juste après
le POPAD par un jmp notre_routine2, ce sont les intructions
de notre_routine1 qui vont s'en charger.
Ensuite, dans notre_routine2 il ne faudra pas oublier de rajouter
les instructions effacées (push...) et d'insérer
notre patch pour modifier l'instruction jg 00478455 par jmp
004783EC.
Mes explications sont des plus succinctes mais vous pourrez
trouver des informations complémentaires dans beaucoup
d'autres tuts sur les logiciels compressés.
En attendant voici le code source commenté de mon patch
cela vous fera certainement mieux comprendre que des explications
longues et ennuyeuses :
:552553 JMP 553887 > On prend la main a la fin de la décryption, jmp notre_routine1
Notre_Routine1 > On place un jmp notre_routine2, après le POPAD
:553887
mov dword ptr [5523AB], 001501E9 > Correspond au jmp notre_routine2 en assembleur
mov word ptr [5523AF], 9000
mov byte ptr [5523B0], 90
JMP 55243B > retour prog. normal apres décryption
Notre_Routine2 > le patch pour le crack
:5538B1
mov word ptr [478447], EBA3
mov byte ptr [407CFA], 75
push 004933A8 > comme si on était en fin de décompression
ret > le prog. décompressé prend la main
-
Conclusion
Héhé mais mais mais tu dors ???!!! :) Réveille toi bordel !! Bon j'espère que j'ai été assez clair dans mes explications et si vous avez appris quelques trucs ben c'est super car les tutorials sont fait pour ça : le partage des connaissances.
Merci à Christal.
Au passage, si vous trouvez des absurdités,des erreurs dans
ce tut (ce qui est loin d'être impossible) ou que vous avez une
remarque a faire, n'hésitez surtout pas à prendre
contact avec moi (French_Freud@Hotmail.com).
Don't give up the fight
Freud
"Plus vous roulez sur un chat mort, plus il est plat."
|