Protection d'un soft

Vous avez un problème pour cracker ou vous souhaitez parler de reversing en général...

Protection d'un soft

Messagepar tuyn00txa » 31 Décembre 2015, 15:13

Bonjour à tous,

J'en viens à vous après avoir essayé de déjouer une protection d'un programme mais sans succès.

Après avoir unpacké le soft et constaté qu'il était codé en vb6, j'ai utilisé VB Decompiler Pro v10.1 pour analyser son contenu.
La fenêtre principale est défini comme fenêtre de démarrage du programme.

J'ai dans ma fonction frmMain_load (fenêtre principale) une vérification de la taille du .exe qui pour moi doit servir à comparer avec la taille réelle du .exe compressé, seulement je ne vois aucune comparaison dans la suite de la fonction et je saute vers la fin de la fonction à une adresse qui à partir de là me fait des boucles avec beaucoup d'instructions dont je ne comprends pas l'utilité.

Au bout de plusieurs passages dans cette boucle, je saute à une adresse qui appelle une autre fenêtre qui essaye de télecharger le setup depuis internet et me "unload" ma fenêtre principale après télechargement. :(

J'ai essayé de rajouter des instructions après le call[FileLen...] pour ré assigner le registre EAX avec la valeur du .exe packé mais au final j'appelle toujours cette fenêtre de téléchargement...

J'ai essayé de trouver une référence avec la taille du .exe packé dans les traces de ollydbg quand je fais mes boucles mais il y a rien.

J'utilise OllyDbg 2.01 comme débuggeur.

Auriez-vous des pistes ?
tuyn00txa
 
Messages: 4
Inscription: 31 Décembre 2015, 01:11

Re: Protection d'un soft

Messagepar etherlord » 04 Janvier 2016, 10:15

Pour VB6, je tenterai de le debugger avec smartcheck si c'est possible. Cela a l'avantage de pouvoir faire du pas-à-pas.

une vérification de la taille du .exe qui pour moi doit servir à comparer avec la taille réelle du .exe compressé, seulement je ne vois aucune comparaison dans la suite de la fonction et je saute vers la fin de la fonction à une adresse qui à partir de là me fait des boucles avec beaucoup d'instructions dont je ne comprends pas l'utilité.


Sans les extraits de code concernés, cela va être dur de te répondre.

J'ai essayé de rajouter des instructions après le call[FileLen...] pour ré assigner le registre EAX avec la valeur du .exe packé mais au final j'appelle toujours cette fenêtre de téléchargement...


Comment tu as trouvé la valeure de l'exe packé ? quand tu trace le programme sans le modifier, il télécharge aussi ou pas ?

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2526
Inscription: 22 Mars 2004, 16:12

Re: Protection d'un soft

Messagepar tuyn00txa » 04 Janvier 2016, 18:03

Pour VB6, je tenterai de le debugger avec smartcheck si c'est possible. Cela a l'avantage de pouvoir faire du pas-à-pas.


J'ai essayé de l'ouvrir avec smartcheck mais le programme a apparemment été compilé en p-code or smartcheck gère que les programmes compilés en code native (même chose pour les autres débuggeurs...)

Comment tu as trouvé la valeure de l'exe packé ? quand tu trace le programme sans le modifier, il télécharge aussi ou pas ?


En faite, depuis que je l'ai unpacké, il télécharge systématiquement le setup au lancement du programme. La taille de l'exe packé correspond à la taille du .exe après avoir installé le programme.

Voici où est appelé cette fonction :

Code: Tout sélectionner
main   025C9F49   CALL DWORD PTR DS:[<&msvbvm60.rtcFileLen>]   EAX=02A96000, ECX=76C0A4F8, EDX=0031EE88, ESP=0018EAC4
main   025C9F4F   MOV DWORD PTR DS:[2666910],EAX
main   025C9F54   LEA ECX,[EBP-74]   ECX=0018FA68
main   025C9F57   PUSH ECX   ESP=0018EAC0
main   025C9F58   LEA EDX,[EBP-70]   EDX=0018FA6C
main   025C9F5B   PUSH EDX   ESP=0018EABC
main   025C9F5C   LEA EAX,[EBP-6C]   EAX=0018FA70
main   025C9F5F   PUSH EAX   ESP=0018EAB8
main   025C9F60   LEA ECX,[EBP-68]   ECX=0018FA74
main   025C9F63   PUSH ECX   ESP=0018EAB4
main   025C9F64   LEA EDX,[EBP-64]   EDX=0018FA78
main   025C9F67   PUSH EDX   ESP=0018EAB0
...


Le CALL va chercher la taille du fichier .exe et l'assigne dans le registre EAX (2A96000), on recopie ensuite cette valeur dans l'adresse 2669910 et je ne vois pas après ça ou est utilisé cette adresse.
Ce que j'ai déjà essayé de faire, c'est de réassigner le registre EAX ainsi que l'adresse 2669910 juste après le CALL avec la valeur de mon .exe d'origine en faisant un JMP dans des emplacements non occupés, ce qui n'a pas marché... :roll:
tuyn00txa
 
Messages: 4
Inscription: 31 Décembre 2015, 01:11

Re: Protection d'un soft

Messagepar etherlord » 05 Janvier 2016, 09:35

tuyn00txa a écrit:En faite, depuis que je l'ai unpacké, il télécharge systématiquement le setup au lancement du programme. La taille de l'exe packé correspond à la taille du .exe après avoir installé le programme.


Donc tu as un point de départ. Si tu remonte depuis le téléchargement, tu devrais tomber sur le branchement conditionnel qui t'interesse.

on recopie ensuite cette valeur dans l'adresse 2669910 et je ne vois pas après ça ou est utilisé cette adresse.


Place un break-point on access sur l'adresse mémoire pour retrouver où il récupère la valeure.

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2526
Inscription: 22 Mars 2004, 16:12

Re: Protection d'un soft

Messagepar tuyn00txa » 05 Janvier 2016, 22:58

Donc tu as un point de départ. Si tu remonte depuis le téléchargement, tu devrais tomber sur le branchement conditionnel qui t'interesse.


En faite c'est justement ce saut que je n'arrive pas à trouver... :(

Place un break-point on access sur l'adresse mémoire pour retrouver où il récupère la valeure.


C'est ce que j'ai déjà essayé de faire, l'adresse (2666910) est initialisé à 0 au début du programme, il est assigné ensuite avec la valeur de la taille du .exe et n'est plus modifié au minimum jusqu’à l'apparition de la fenêtre de téléchargement.

Si je t'envoie par MP le fichier unpacké, tu pourrais jeter un coup d'oeil par hasard?

merci de ton aide
tuyn00txa
 
Messages: 4
Inscription: 31 Décembre 2015, 01:11

Re: Protection d'un soft

Messagepar etherlord » 06 Janvier 2016, 09:45

tuyn00txa a écrit:En faite c'est justement ce saut que je n'arrive pas à trouver... :(


Lorsque tu remonte depuis le téléchargement, Olly va te montrer le debut de la fonction (symbole > à gauche du code), si tu te place sur cette fonction, tu peut lister tous les
points dans le programme qui font appel à cette fonction. Dans ce cas de figure, il faut passer à travers tous les points d'appel pour repérer celui qui initie le téléchargement.
L'avantage c'est que tu ne doit pas avoir trop d'appel dans ce cas de figure...

C'est ce que j'ai déjà essayé de faire, l'adresse (2666910) est initialisé à 0 au début du programme, il est assigné ensuite avec la valeur de la taille du .exe et n'est plus modifié au minimum jusqu’à l'apparition de la fenêtre de téléchargement.


Est-tu sûr d'avoir placé un BP on-access (lecture) et pas seulement écriture ?

Si je t'envoie par MP le fichier unpacké, tu pourrais jeter un coup d'oeil par hasard?


Non, j'ai déjà pas assez de temps libre pour mes projets persos, et je fait partie de ces gens qui sont convaincus que pour apprendre, faut se faire ch*... un bon coup :P

N'hésite pas à faire une pause si tu t'embrouille sur ta cible, dès fois reprendre un truc laissé quelques jours de coté, cela permet de prendre le problème d'une autre façon.

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2526
Inscription: 22 Mars 2004, 16:12

Re: Protection d'un soft

Messagepar tuyn00txa » 06 Janvier 2016, 22:26

J'arrive bien à trouver l'appel de cette fenêtre mais pas l'appel de cette appel... :? Voici comment la fenêtre est appelé :

Image

Il s'agit en faite d'une table de jump qui appellent différentes fonctions dans le programme. Là où j'ai du mal, c'est trouver comment et surtout pourquoi est appelé le SUB... juste avant le JUMP concerné.
Je suis persuadé qu'à un moment dans une boucle un JMP EAX est fait avec dans le registre EAX l'adresse de cette instruction...

Est-tu sûr d'avoir placé un BP on-access (lecture) et pas seulement écriture ?


Oui, sur et certain. J'ai l'impression que c'est une mauvaise piste, en tout cas ça en a l'air...

En faite j'ai posté dans le forum car j'avais déjà pas mal bossé dessus pour l'unpacker et je voulais pas baisser les bras aussi vite...

En tous cas, merci de ton aide, si d'autres sont intéressés pour m'aider, je peux vous fournir d'autres détails s'il le faut.
tuyn00txa
 
Messages: 4
Inscription: 31 Décembre 2015, 01:11

Re: Protection d'un soft

Messagepar 0xdb » 07 Janvier 2016, 22:46

Salut,

pas de ta faute mais du VB6 sans smartcheck, noooonnnn.. j'ai déjà la nausée.

tuyn00txa a écrit:Là où j'ai du mal, c'est trouver comment et surtout pourquoi est appelé le SUB...


Le comment: si c'est un call qui appelle ton SUB.., alors l'adresse de retour est sur le stack.

Si l'adresse cible est calculée, JMP r, alors il y a une chance (ou pas) pour que ce soit à partir de l'adresse

du premier SUB. Essaye de chercher dans le code la valeur immédiate 0x4FDECC, peut-être un MOV r, 0x4FDECC.

Je vois qu'olly a reconnu ARG.1, la table de jmp ne se trouve-t-elle pas quelque part dans une fonction ? En faite, je me demande ce qu'il y a au-dessus des DD.

Si ça donne rien, désassemble ta cible avec IDA et cherche d'éventuelles références sur la table.

voilà, je sais pas si ça va t'aider mais tonnerre, faut quand même que je participe un peu à ce forum.

Le pourquoi: c'est pas de l'open source ?? pour l'argent...
Avatar de l’utilisateur
0xdb
Visiteur
Visiteur
 
Messages: 17
Inscription: 19 Novembre 2015, 16:52


Retourner vers Reversing

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités