| Programme cible : | Neospace v 1.0 |
| Protections : | Neolite 2 + Nagscreen |
| Dispo : | www.neoworx.com |
| Auteur : | ZeFou |
Ce tut n'est pas un crack. Il a été écrit dans un but purement éducatif. Si vous vous contentez de faire uniquement ce qui est expliqué, vous vous retrouverez avec un prog partiellement cracké. Bien sûr, le plus gros du travail est expliqué avec méthode.
Identification des protections :
Au lancement du logiciel, un nag nous invite à tester le programme ou à obtenir plus d'info sur celui-ci. Ensuite, plus rien, à part un "EVALUATION...". Voilà.
Si on désassemble, on a juste les sections et là, on identifie facilement la protection par compression à l'aide de NEOLITE. C'est pas étonnant vu que les deux progs viennent de chez NEOWORX..
DECOMPRESSION et RECHERCHE DU CRACK :
Avant de décompresser le prog d'origine, on va faire quelques copies avec "MakeDirForCracks" de MrPhilex ou manuellement si on na pas le prog.
Ensuite, on ouvre Procdump et on va dans UNPACK. On selectionne "neolite
2" et ensuite une copie de neospace.
Nous voilà maintenant avec notre prog décompressé
et qui marche.
Dans ce tut, je vais me contenter de faire sauter le nag de départ.
Je lance donc SoftIce et je selectionne mon prog décompressé.
SI ne break pas...
Dans ces cas là, je pense qu'il faut aller voir directement
les sections du prog à l'aide de notre cher pdump.
La premiere section ".text" a une caractéristique du style
C0000080, qui plait pas à SI, on la modifie donc en E0000020.
Maintenant, SI break bien, et on peut commencer par noter l'entry point
du prog et à tracer jusqu'au call qui nous affiche le nag. Cette
partie est très simple.
Personnellement je trace avec F10 et je note le call qui affiche le
nag. Ensuite je relance le prog mis cette fois, je rentre dans le call
qui précédement m'avait affiché le nag, ensuite je
trace avec F10 jusqu'au call qui affiche le nag et ainsi de suite.
On trouve donc que le vrai call qui affiche le nag est :
:0040598E FFD6 CALL ESI
Donc on met un bpx sur cette adresse et on relance le prog
Hop!!
SI break sur 40598E, on met SI en mode assembleur en tapant la commande
"a" et on met deux "nop" pour enlever le call. On relance avec F5 et le
logiciel se lance sans le nag.
On a trouvé l'endroit à patcher.
Mise en place du patch dans le prog compressé
On écrira le patch quand on aura trouvé un endroit pour l'écrire.
A partir d'ici, on ne parlera plus de la version décompressée de NEOPLACE mais seulement de l'original.
On va d'abord modifier la caractéristique de la premiere section
du prog comme sur la version décompressée, en remplaçant
C0000040 par E0000020.
On lance le logiciel en passant par SI et là, on cherche un
peu.. à la recherche d'un éventuel POPAD (avec les flèches
bien sûr..)
Note : Cette astuce ne marche pas avec les packer dits à code
"polymorphe" bien que ce soit pas vraiment ça.. (ex : ASprotect)
On en trouve trois, en 4A621D, 4A61D1 et 4A674E. On met des bpx sur
ces trois adresses et on relance.
Boum... SI plante. On tape "faults off" et F5 pour sortir. Dans le
nag d'erreur de Windows, on peut voir dans "détails", l'adresse
où le soft plante, en 4A6758..
Cette erreur nous apprend deux choses :
* Le neolite contient quelques portions de code "volatiles" (si un jmp
appele un byte plus loin, tout le code de la section suivant le jmp s'en
trouve modifiée)
*On ne pourra pas dérouter le jmp "Entry point", il faudra trouver
un autre endroit.
*Le prog doit être réinstallé
On réinstalle le prog et on chage la caractéristique de
la premiere section. On charge NEOSPACE dans le loader de SI et on lance.
On trace ensuite jusqu'à un call assez loin dans le codage on met
un bpx dessus et dans les datas, on affiche la partie de code où
se trouvera le call qui doit être nopé dans le prog en 40598E
Pour cela : taper "d 40598E"
F5 pour relancer et à chaque break, on regarde si le prog est
décompressé à cet endroit.
Ca y est ? Maintenant, on cherche la ligne de code de 5 bytes la plus
proche qui suit (car pour insérer un long jmp vers notre patch,
il faut 5 bytes)
Personnellement, je l'ai inséré en 4A6AB3
AND eax, 80000000
C'est bien ça mais le jmp va vers où??
Ben, on va l'insérer en 4A621D, soit dans le popad qui est juste
avant l'entry point de la routine de compression. En fait, le 61h qui veut
dire POPAD en hexa n'est pas un POPAD, mais fait partie de la phrase "This
program cannot be run in...." qu'on trouve au debut de chaque prog (visible
avec un éditeur hexa).
Maintenant on sait où placer le patch donc on va l'écrire en tenant compte qu'il sera executé plusieurs fois au démarrage du prog.
Dans le prog :
on remplace AND eax, 80000000 par :
4A6AB3 JMP 4A621D
Le patch :
4A621D CMP byte ptr [40598E], FF
on vérifie si le prog est décompressé
4A6224 JNZ 4A622F
Si non; alors saute le patch modificateur
4A6226 MOV word ptr [40598E], 9090
Nope le call du nag de départ
4A622F AND eax, 80000000
Rétabli le code écrasé par le jmp "patch"
4A6234 JMP 4A6AB8
Comme si de rien n'était, revient dans la routine de décompression
On essaie le patch avec SI en mode assembleur, le prog marche sans le nag.
On fait les modifications avec un éditeur hexa et le tour est joué.
Conclusion :
A part la petite erreur faite en employant l'astuce des POPAD, la protection
en elle-même a peut d'intérêt en tant que protection
anti-cracker.
Neolite est un compresseur moyen offrant une protection moyenne sur
un logiciel sans trop d'intérêt.
Si vous rencontrez des difficultées, posez moi vos questions, je répondrais le plus clairement possible pour vous aider dans votre tache.
Greetz : Christal, MrPhilex & etc..