Programme cible : Neospace v 1.0
Protections :  Neolite 2 + Nagscreen
Dispo : www.neoworx.com
Auteur :  ZeFou


Introduction :

 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..
 

                                             Contact : ZeFou@caramail.com