Photocopier Pro 2.03d et Nico's Commander 5.47

http://www.nicocuppen.com

Ce petit tutoriel ne vise pas en soit le cracking du soft qui comme son nom l'indique sert à réaliser une photocopie d'un document scanné avec bien sûr une imprimante mais plutôt s'intéresser d'abord à la manière d'obtenir un dump fonctionnel d'un programme compressé avec Aspack 2.12 de modifier ensuite le programme dumpé pour qu'il soit fonctionnel sans ses diverses protections et modifer finalement le soft original pour qu'il se patche automatiquement lors de son exécution afin de faire sauter les protections. Le Hard patching. Cette dernière partie du tutoriel nous donnera également l'occasion d'ajouter un outils de plus à notre panel de softs de cracking, mais voyez plutôt ....

Commençons d'abord par le premier soft pour nous familiariser avec la méthode de création d'un dump opérationnel.

Après avoir installé le programme , on le lance et un Nagscreen apparaît

Et évidemment, si on tente de s'enregistrer on obtient :

          comme par hasard !

 

La commence notre étude: On va comme toujours analyser le programme pour savoir a qui l'on a vraiment à faire avec PEiD v0.9

et voilà programme compilé avec ASPack 2.12 !

Nous allons donc réaliser un dump de notre petit soft (192 Ko) avant de s'amuser avec ....

Rendons hommage à Kephren en utilisant PeXplorer 0.99 pour analyser le PE.

et en cliquant sur Directory nous avons aussi ...

Nous prenons toute notre attention sur les données importantes: à savoir...

L'Entry Point: 90001
Les sections qui sont au nombre de 6 avec comme caractéristiques C0000040 et dont une possédant le nom du packer.
L'image Base traditionnelle en 004000000
Imports Table l'RVA 90FAC et sa taille 268.


Nous allons à présent avec l'aide d'OllyDbg et d'un de ses nombreux plug-in trouver l'OEP.

Regardons d'abord si Olly est correctement configuré pour le travail qu'on va lui demander:

A présent ouvrons notre cible dans Olly et il va commencer sa recherche bien gentiment pour s'arrêter quelques instants plus tard pour indiquer ...

Nous trouvons notre EIP en 42DF43 !

Utilisons un autre plug-in de Olly pour réaliser le dump du programme:
Dans le menu Plugins choisissez évidement OllyDump (si vous l'avez installé !!) ensuite dump debugged process et nous avons notre fenêtre de dumping:

On lance la procédure et quelques instants plus tard nous avons notre dump qui est réalisé. Attention malgré que celui-ci est plus "lourd" (588 Ko) il n'est pas encore exécutable il reste deux étapes:

-) Rendre la section qui contient l'EIP readable, writable et executable.

Ici la section qui contient l'EIP qui est souvenez-vous 42DF83 est la .rsrc ! Nous allons donc modifier sa caractéristique afin qu'elle nous offre toutes les possibilités que nous voulons en modifiant le C0000040 en E00000E0 avec PeXplorer. On clique droit sur la section pour obtenir ...

On change la caractéristique et on applique la modification.

-) Reconstruire L'IAT ( Table des imports) (Import Api's Table).

Pour ce faire utilisons un autre petit utilitaire très pratique: ImpRec Final 1.6f.
Il faut pour cela lancer notre cible non dumpée (l'original) afin que notre petit soft puisse charger la table des imports et ensuite la greffer sur notre dump !
Lancer le programme original et chercher-le dans les processus actifs:

A présent il faut indiquer à notre soft la nouvelle EIP (ou OEP) el lui demander de retrouver une table d'imports. Pour ce faire on renseigne notre OEP qui est souvenez-vous 42DF83 - 40000 (Image Base) = 2DF83 !

Il a trouvé ! Maintenant il faut lui demander d'aller chercher tous les imports du programme ASPacké avec GetImports et ...

Nous remarquons que toutes les DLL's ont bien été importées et que leur validité est OK ! Reste à greffer notre table sur notre dump avec FixDump et rechercher notre dump sur notre disque dur !
et nous avons :

Voilà notre dump fonctionnel ! Reste plus qu'à l'étudier ...

Là, en fait, il existe plusieurs solutions (rechercher le sérial, faire sauter la limitation à 30 jours, etc ...) en voici une qui évite de casser trop la tête et qui passe au dessus de toutes les procédures de test de validité de sérial, de time limit et n'affiche plus le Nag's du début.

En fait, j'ai pour habitude lorsque je craque un soft de lors de la première analyse des strings data avec OllyDbg de taper comme texte à rechercher:

donc reg

et parfois ....on tombe sur ceci:

Ce qui est flagrant ici c'est le UNREGDLG (et pour ceux que ca intéresse le dVhzf! et 7885563293) le REGISTRATE est la routine qui affiche votre boite de saisie du sérial. Mais nous, on va s'intéresser ici a ceci:

Olly s'est arrêté sur notre breakpoint en 40BFF3 à la suite d'un JNZ. Remontons plus haut dans le listing du code:

Nous remarquons que nous sommes "aiguillé" vers le processus qui constate que nous ne sommes pas enregistré et affiche par la suite la fenêtre d'invite pour introduire un sérial. Ce qui attire directement l'attention c'est le GO ! Et si on modifiais la valeur du Flag Z lors du break sur l'adresse 40BF70 ?
Eh bien, oui le soft ignore tout des protections installées à savoir: le time limit qui est calculé sur la valeur 1D (29 jours d'essais) et l'enregistrement du soft dans la base de registre et bien évidement n'affiche plus le Nag's du début.

Il suffit de modifier la ligne 40BF70 par un NOP ou mieux JMP SHORT 0040BF72 (EB 00 en hexa) et le soft tourne sans problemes.

Nous pouvons à présent nous lancer dans l'étude de :

Nico's commander 5.47.

Une fois le soft cracké il nous servira comme outils dans nos prochains crack ...

Si vous avez pris le temp de lire le tut concernant le même auteur ci-dessus,vous ne serez pas surpris de retrouver les mêmes et stupides protections. Ce tutoriel ne vise pas en soit le cracking du soft qui comme son nom l'indique ressemble à un ancien programme qui pouvait remplacer l'explorateur de fichiers mais à démontrer qu'il serait quand même mieux pour un programmeur digne de se nom de varier la protection de ses softs.
Un bel avantage de ce programme est de permettre à l'utilisateur de configurer une dizaines de boutons appelant tel ou tel programme, mais voyez plutôt ...

Après avoir installé le programme , on le lance et un Nagscreen apparaît

Et évidemment, si on tente de s'enregistrer on obtient :

          comme par hasard ca ressemble vraiment à photocopier Pro !

 

La commence notre étude: On va comme toujours analyser le programme pour savoir a qui l'on a vraiment à faire avec PEiD v0.9

et voilà programme compilé avec ASPack 2.12 , tiens ?!

Nous allons donc réaliser un dump de ce petit soft (424 Ko) avant de s'amuser avec ....

Rendons hommage à Kephren en utilisant PeXplorer 0.99 pour analyser le PE.

et en cliquant sur Directory nous avons aussi ...

Nous prenons toute notre attention sur les données importantes: à savoir...

L'Entry Point: 14D001
Les sections qui sont au nombre de 6 avec comme caractéristiques C0000040 et dont une possédant le nom du packer.
L'image Base traditionnelle en 004000000
Imports Table l'RVA 14DFAC et sa taille 2A4.


Nous allons à présent avec l'aide d'OllyDbg et d'un de ses nombreux plug-in trouver l'OEP.

Regardons d'abord si Olly est correctement configuré pour le travail qu'on va lui demander:

A présent ouvrons notre cible dans Olly et il va commencer sa recherche bien gentiment pour s'arrêter quelques instants plus tard pour indiquer ...

Nous trouvons notre EIP en 4B105A !

Utilisons un autre plug-in de Olly pour réaliser le dump du programme:
Dans le menu Plugins choisissez évidement OllyDump (si vous l'avez installé !!) ensuite dump debugged process et nous avons notre fenêtre de dumping:

On lance la procédure et quelques instants plus tard nous avons notre dump qui est réalisé. Attention malgré que celui-ci est plus "lourd" (1.31 Mo) il n'est pas encore exécutable il reste deux étapes:

-) Rendre la section qui contient l'EIP readable, writable et executable.

Ici la section qui contient l'EIP qui est souvenez-vous 4B105A est la .rsrc ! Nous allons donc modifier sa caractéristique afin qu'elle nous offre toutes les possibilités que nous voulons en modifiant le C0000040 en E00000E0 avec PeXplorer. On clique droit sur la section pour obtenir ...

On change la caractéristique et on applique la modification.

-) Reconstruire L'IAT ( Table des imports) (Import Api's Table).

Pour ce faire utilisons un autre petit utilitaire très pratique: ImpRec Final 1.6f.
Il faut pour cela lancer notre cible non dumpée (l'original) afin que notre petit soft puisse charger la table des imports et ensuite la greffer sur notre dump !
Lancer le programme original et chercher-le dans les processus actifs:

A présent il faut indiquer à notre soft la nouvelle EIP (ou OEP) el lui demander de retrouver une table d'imports. Pour ce faire on renseigne notre OEP qui est souvenez-vous 4B105A - 40000 (Image Base) = B105A !

Il a trouvé ! Maintenant il faut lui demander d'aller chercher tous les imports du programme ASPacké avec GetImports et ...

Nous remarquons que toutes les DLL's ont bien été importées et que leur validité est OK ! Reste à greffer notre table sur notre dump avec FixDump et rechercher notre dump sur notre disque dur !
et nous avons :

Voilà notre dump fonctionnel ! Reste plus qu'à l'étudier ...

Là, en fait, il existe plusieurs solutions (rechercher le sérial, faire sauter la limitation à 30 jours, etc ...) en voici une qui évite de casser trop la tête et qui passe au dessus de toutes les procédures de test de validité de sérial, de time limit et n'affiche plus le Nag's du début.

En fait, j'ai pour habitude lorsque je craque un soft de lors de la première analyse des strings data avec OllyDbg de taper comme texte à rechercher:

donc reg

et parfois ....on tombe sur ceci:

Ce qui est flagrant ici c'est le UNREGDLG , le REGISTRATE est la routine qui affiche votre boite de saisie du sérial. Mais nous, on va s'intéresser ici a ceci:

Olly s'est arrêté sur notre breakpoint en 476d20 à la suite d'un Call. Remontons plus haut dans le listing du code:

Nous remarquons que notre Call fait partie d'une routine qui comence en 46A0A2 appellée par un JNZ en 46A071 qui lui aussi fait partie d'une routine appellée par un JNZ en 46A024. Posons des breaks et lançons le soft....Notre programme passe bien par ces breaks !

Et si on changeait la valeur du flag Z lors des breaks pour éviter ou provoquer les sauts selon la situation ?
On n'a d'abord ceci:

qui devient :

On lance avec F9 et ...notre programme tourne sans plus aucunes protections !!!

Il suffit de modifier la ligne 46A024 par un NOP ou mieux JMP SHORT 0046A026 (EB 00 en hexa) et le soft tourne sans problemes.

Encore une fois nous avons démontré combien il était facile de détruire une protection simple cachée derrière un programme packé !

De plus en réalisant cette modifications, lorsque nous allons dans le menu About, nous n'avons plus le Nag's ! ce qui indique que le soft "pense" que nous sommes enregistré ! Il ne nous reste plus qu'à enregistrer notre modif et sauvegarder notre exécutable modifié !

Mais nous pouvons encore aller plus loin ...

Et si on modifiais le programme packé pour qu'il fasse AUTOMATIQUEMENT lui-même la modification à la ligne 46A024 en y plaçant deux NOP (90) et ceci par l'instruction MOV WORD ptr [0046A024],9090 ?

Il faut pour que cela fonctionne que la modification se fasse APRES que le soft se soit installé en mémoire et AVANT qu'il ne démarre !
Donc placer notre instruction juste avant le saut sur l'EIP en 004B105A juste après le POPAD de fin de décompression.

On va rechercher dans Olly nos instructions POPAD (et oui, il y en a plusieurs) et observer les lignes de codes environnantes pour découvrir rapidement ceci:

Bizarre ces lignes de codes non ? Surtout quand on exécute le soft !

Tiens ! Notre PUSH 0 est devenu PUSH 004B105A ! notre EIP ! Nous y voilà donc ! Il faut trouver à présent la place pour placer notre instruction de patch.


Nous pouvons remarquer que le saut se fera toujours car sinon ceci signifierais que le programme est mal décompressé ! Donc nous pouvons utiliser cet endroit pour y placer ceci:

Testons pour voir si notre PUSH 0 se modifie encore malgré notre modification:

Nous constatons que tout c'est bien passé et que notre patch a été appliqué, si on trace avec F8 le soft il démarre à son EIP mais il est patché !

L'avantage de ce type de modifications appellées Hard Patching est qu'il permet ensuite de créer un patch avec l'un ou l'autre PATCHER's afin de diffuser un patch du fichier original comme ci-dessous après bien entendu avoir enregistré notre programme modifié comme exécutable !

Utilisons l'excellent soft de Netix : Graphical-PatchMaker 1.4
Il suffit de remplir les info's demandées comme ci-dessous ...

et

pour obtenir une excellente confirmation ..

.

Voici notre patch diffusable:

Et notre nouvel outil une fois configuré peut ressembler à ceci:


Thanks to FFF Team and specialy to Anthrax, Genaytyk and Gbillou for precious help !