L'étude de la protection DENUVO.

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

Re: L'étude de la protection DENUVO.

Messagepar baboon » 20 Janvier 2017, 14:38

Cool de voir que tu n'as pas abandonné :)
Je n'ai pas abandonné non plus mais je manque cruellement de temps...
Je m'y remettrai un jour, promis :P
C'est encourageant de voir que tu progresses.
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3285
Inscription: 08 Juillet 2005, 17:49

Re: L'étude de la protection DENUVO.

Messagepar eabcdx » 22 Janvier 2017, 23:46

Merci baboon !

Ce n'est pas facile mais je n'abandonne pas !
J'ai terminé l'analyse de la seconde VM et voici ce que j'ai constaté :
1) La signature de chaque opération (VM_PUSH, VM_POP, etc...) est tout simplement différente des autres VMs

2) Le registre x64 utilisé pour gérer les registres peut changer. Idem pour le registre qui gère les VMs opcodes

3) Il semble y avoir des tests anti-debug hors-VM (donc dans un context x64 normal) et in-VM (je bute actuellement sur un, qui me balance sur ExitProcess tel un malpoli)

C'est un jeu sur S*7*3*a*m, j'ai passé l'init de l'API 5*t*e*4*m et j'ai pu trouver ce qui me semble être l'OEP du jeu.
Voilà, c'est tout pour le moment :)
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Re: L'étude de la protection DENUVO.

Messagepar eabcdx » 28 Janvier 2017, 20:43

Salut,

je continue (et me permets de double-poster), ce n'est pas facile...
Actuellement j'ai fait la découverte de la "fonction" _initterm qui, de ce que j'ai compris, parcours un tableau de pointeurs vers d'autres fonctions.
Certaines de ces fonctions sont des VMs de Denuvo. Je m'en suis occupé de 2 pour le moment.

L'une d'entre elles était assez facile à appréhender, en revanche, l'autre n'arrêtait pas de jumper de sous-VMs en sous-VMs qui n'étaient pas identiques, du coup très difficile de suivre le fil.
Je suis de toute manière obligé de passer par là, car lorsque je F8 sur la fonction _initterm, ça crash donc bon, je me dis que Denuvo doit avoir un rôle là dedans :)

J'en ai 2998 à analyser, j'espère que dans le lot il n'y aura pas plus de 1% de VMs Denuvo :lol:

Sinon pour l'histoire du ExitProcess, je ne me suis pas attardé dessus pour le moment, ma maigre analyse de la VM qui me fait atterrir dedans ne m'a pas apporté grand chose (j'ai essayé de jouer avec la valeur de LastError mais sans succès).

A+ pour de nouvelles aventures :)
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Re: L'étude de la protection DENUVO.

Messagepar baboon » 02 Février 2017, 10:16

C'est à peu prêt là que je suis aussi. Je n'ai pas encore eu le temps de creuser plus.
Je suis en train de dev des tools pour me simplifier la vie mais ça prend du temps...
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3285
Inscription: 08 Juillet 2005, 17:49

Re: L'étude de la protection DENUVO.

Messagepar eabcdx » 07 Février 2017, 06:18

Oui idem, je me suis construit un désassembleur de VM mais c'est fastidieux à utiliser. Il faut décrire pour chaque VM, sa forme et comment elle fonctionne, ça prend beaucoup de temps.
Couplé à cela le manque de temps, ça n'avance pas vite :|

EDIT (09/02/17) : Ayé j'ai patché l'ExitProcess. J'ai gratté quelques heures mais après réflexion, j'ai effectué ça de la manière suivante :
Il s'agit d'un patch pseudo "in-VM". En soit, ça n'altère pas le code de la VM mais une valeur utilisée par la VM.
J'ai juste eu à trouver l'adresse vers laquelle le programme devrait normalement aller en temps normal, et lors du calcul de l'adresse dans la VM, j'ai changé une valeur que la VM allait lire à une adresse mémoire spécifique.
J'ai testé, ça marche bien, visiblement la valeur à l'adresse mémoire modifiée n'est lue que par la VM en question, nul part ailleurs (tout du moins avant d'exécuter la VM en question).

Du coup je peux run le jeu dans mon debugger et arriver à l'OEP sans me faire griller et sans avoir à faire à S*7*e*4*m.

EDIT (11/02/17 - 2h et quelques) : J'en suis à la 8ème VM, aucun problème pour l'exécuter normalement, en revanche si je place un sw bp (donc modif du code) sur une fin de sous-VM8 (ici un pauvre CPUID), alors ça pète.
J'ai pas regardé pour les autres mais ma première analyse me laisse penser qu'il y a donc un anti-tamper check in-VM. Ma brève analyse montre qu'à un certain moment, l'adresse où est placée l'instruction CPUID est calculée et que juste après, il y a fetching du premier octet constituant l'instruction CPUID (0x0F). J'ai pas mis à jour mon analyseur pour qu'il puisse décoder toute la VM (il est déjà 2h :p), mais je pense que derrière il doit tester l'intégrité du code quelque part...

EDIT (11/02/17 - 20h) : Plutôt drôle, j'ai modifié le 0x0F en 0xCC pour faire un BP et exécuté la VM pas à pas. Ca marche mais à l'arrivée, on atterrit pas tout à fait à l'endroit attendu. A mon avis, l'adresse de fin et le bytecode qu'elle occupe ont un lien fort.

EDIT (14/02/17) : Effectivement, il y a bien un check du bytecode pour cette VM. J'ai trouvé un moyen de le patcher en traçant l'exécution de la VM, ça se fait assez facilement, mais pour le moment je n'en ai pas l'utilité, c'était plus pour comprendre comment ça fonctionne en gros.
Autre chose (rien à voir), en analysant les VM suivantes, je suis tombé sur une VM qui certaines fois, s'amuse à chiffrer le contenu des registres en sortie. Je n'ai pas gratté pour le moment mais il y a ce phénomène qui apparaît de temps en temps.
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Re: L'étude de la protection DENUVO.

Messagepar eabcdx » 18 Mars 2017, 20:05

Salut,

ça fait un moment depuis la dernière fois que j'ai mis le nez dedans.
J'ai bien avancé, aujourd'hui j'ai repris où je m'en étais arrêté et je suis arrivé jusqu'au moment où la GameWindow est créée ce qui représente une bonne avancée pour ma part.

Malheureusement, pour y arriver je dois faire des vieux patch qui évitent certaines VMs ce qui implique que ça finira par exploser à un moment random.
Le gros soucis qui me fait éviter certaines VMs, c'est que le programme tente d'écrire 1/2/4/8 octets à de fausses adresses (à mon avis, ce sont les précédents patchs qui font que le calcul des bonnes adresses est faussé).
Je ne vais pas plus avancer pour voir quel niveau je peux atteindre, je vais me concentrer sur la première VM qui me fait une violation d'accès lors de l'écriture de données, à mon avis les suivantes qui me posent le même soucis pourront être patchées d'une manière identique.

Autre chose qu'il faut que je teste, c'est lancer le même exécutable sur une autre machine où le hardware est différent, voir si ça pète avant ou non...

A+
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Re: L'étude de la protection DENUVO.

Messagepar dionosis » 19 Mars 2017, 00:10

Salut eabcdx,

Ca fait plaisir de voir que toi et baboon êtes toujours sur le coup à vos heures perdues. :)
(pas d'infos dans ce post mais un tout petit peu de soutien moral :P)

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: L'étude de la protection DENUVO.

Messagepar baboon » 19 Mars 2017, 15:22

Salut eabcdx,

Ravi de voir que tu continues à avancer. Pour ma part la motivation est un peu au point mort et je suis énormément pris dans le peu de temps libre qu'il me reste... Mais je ne lache pas l'affaire malgré le fait que ma cible soit maintenant crackée...

D'après ce que je lis, tu tentes plus de contourner les checks dans les VMs et autour que de reconstruire le code, right ?
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3285
Inscription: 08 Juillet 2005, 17:49

Re: L'étude de la protection DENUVO.

Messagepar eabcdx » 19 Mars 2017, 15:32

Salut,

oui c'est bien cela, reconstruire le code me paraît un peu overkill, je ne suis même pas certain que les teams qui crack Denuvo s'amusent à reconstruire le code pour produire des cracks aussi rapidement.
Quoiqu'il en soit, j'essaye d'avancer pendant mon temps libre, aussi très réduit.
eabcdx
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 131
Inscription: 03 Novembre 2012, 14:44

Précédente

Retourner vers Reversing

Qui est en ligne

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