duplitop 6

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

Re: duplitop 6

Messagepar Bango » 18 Avril 2013, 13:00

craquepastonslip a écrit:Comme je ne pourrais pas patcher en mettant 0 dans le regitre EAX après l'appel

Et pourquoi ça?

Bref,
Code: Tout sélectionner
004C7556  |.  FF15 94A85200 CALL DWORD PTR DS:[52A894]                                 ;  arbitr_1.DDProtCheck
004C755C  |.  85C0          TEST EAX,EAX
004C755E      74 08         JE SHORT Arbitrag.004C7568
004C7560  |.  83C8 FF       OR EAX,FFFFFFFF
004C7563  |.  E9 EE000000   JMP Arbitrag.004C7656

Bref, comme tu l'as vu, il faut que EAX soit == 0 ( ce qui est équivalent à un SUCCESS en retour, cf. la doc du dongle :roll: qui doit aussi détailler les différents codes retour possibles). Ce qui ne veut pas dire que la fonction DDProtCheck vérifie uniquement si le dongle est présent... elle peut aussi tester la présence du dongle, et en cas de succés, lire le contenu de celui-ci ;)
Donc si t'as pas de dongle, eax ne sort pas à 0 (success) de la fonction ddProtCheck, eax sera mis à -1 et on sort.
Hypothèse: EAX ne doit pas être == -1 à la sortie de la routine qui appelle DDprotCheck. C'est là que l'indice précédent trouve son sens:

PaPa Bango a écrit:Tu peux aussi aller jusqu'au RETN en 04C765C et voir ce qui passe à la sortie, et avec le bout de code que j'ai pasté, quelque chose devrait attirer ton attention


Donc qu'est-ce qui attire ton attention? :D
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 18 Avril 2013, 19:53

Et pourquoi ça?

En effet je pourrais juste faire un MOV EAX,0 :)
Tu peux aussi aller jusqu'au RETN en 04C765C et voir ce qui passe à la sortie, et avec le bout de code que j'ai pasté, quelque chose devrait attirer ton attention

En sortant j'arrive sur ce code :
Code: Tout sélectionner
0018FEE4   14 FF            ADC AL,0FF
0018FEE6   1800             SBB BYTE PTR DS:[EAX],AL

A ce moment là EAX = FFFFFFFF soit -1, j'ai essayé plusieurs valeurs (0,5,6) mais la 2ème ligne renvoie tout le temps une violation d'accès :
Code: Tout sélectionner
AL=FE
DS:[FFFFFFFE]=???

Je dois trouver la valeur à mettre dans EAX à partir du code avant le return?

EDIT : J'arrive maintenant jusqu'au call sans bidouiller avec un JMP avant, il fallait que je chope l'exe de la v2.1 d'Ollydbg :)
Allez je continue l'arrachage de cheveux en espérant ne pas finir chauve bientôt! :mrgreen:
Après les cracks de Deamon, je trouve ce site aussi intéressant :
__http://thelegendofrandom.com/blog/sample-page
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 19 Avril 2013, 08:05

craquepastonslip a écrit:En effet je pourrais juste faire un MOV EAX,0

Alors ça, c'est po joli joli :/
Il vaut mieux faire un XOR EAX,EAX ;)
Dans ton cas, les opcodes seraient : B8 00 00 00 00
Avec un xor eax,eax => 33 C0

On verra ça quand tu auras vu ce qui doit te sauter aux yeux ;), mais ce n'est pas en lieu et place du CALL [DDProtCheck] qu'il faudra patcher car tu n'auras pas assez de place, mais juste dedans ;)

craquepastonslip a écrit:En sortant j'arrive sur ce code :

Code: Tout sélectionner
0018FEE4 14 FF ADC AL,0FF
0018FEE6 1800 SBB BYTE PTR DS:[EAX],AL

Alors ça, c'est pas normal :roll:
Tu dois avoir un mauvais patch qui traîne, ou bien tu as oublié de restaurer la pile à un moment ou un autre.
Le mieux, c'est de recharger une cible propre, défait tous tes patchs, tous tes BP, et pose juste un BP en 004C7556 sur l'appel à DDProtCheck et un BP sur le RETN de la routine en 04C765C.
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 20 Avril 2013, 09:04

Thanks again PaPa Bango!
mais ce n'est pas en lieu et place du CALL [DDProtCheck] qu'il faudra patcher car tu n'auras pas assez de place, mais juste dedans

Oui j'imagine que je devrais insérer ce patch dans un code cave juste avant le return.
Alors ça, c'est pas normal
Tu dois avoir un mauvais patch qui traîne, ou bien tu as oublié de restaurer la pile à un moment ou un autre.

Je confirme que c'est bizarre comme bugs, avec Olly 1.10 je dois créer un jump pour arriver au call et avec la 2.01 je n'arrive pas à sauter le call en appuyant sur F8, il surligne en rouge le 85 de l'opcode du dessous (au lieu de la ligne entière) puis la fenêtre de code disparait avec une violation d'accès car lecture sur une mauvaise adresse.
Pourtant j'ai essayé sur un autre PC avec duplitop et olly fraichement installés (donc sans patch etc...) et j'obtiens les même symptomes, c'est peut être lié à Win7 64bits.
Tu utiliserais pas un autre désassembleur par hasard?
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 20 Avril 2013, 09:46

craquepastonslip a écrit:et j'obtiens les même symptomes, c'est peut être lié à Win7 64bits.
Tu utiliserais pas un autre désassembleur par hasard?

Peut-être que c'est lié au 64bits. Non j'utilise pas d'autre debugger, mais par contre, j'ai une vm xp x86 ;)
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 20 Avril 2013, 09:59

Il y a ça sur leur site :
Version 2.01 will finally work under 64-bit Windows. Probably I will start developing 64-bit OllyDbg, but this depends on my free time.

Sous entendu qu'elle tourne maintenant sous 64 bits mais qu'il faudra attendre une version dédiée pour ne pas voir de bugs.
En tout cas la version 5 d'IDA PRO a l'air de bien fonctionner :)
Après le return je tombe sur ces lignes, toi aussi ?
Code: Tout sélectionner
.text:004C3E56 cmp     eax, 5
.text:004C3E59 jnz     short loc_4C3EA9

Mais bon je vais peut être monté aussi une VM en x86 car je préférais l'interface d'olly et je m'étais bien formé dessus!
EDIT : finalement IDA est vachement bien aussi, j'arrive même jusqu'au call qui affiche le message comme quoi le dongle n'est pas branché 8)
Code: Tout sélectionner
.text:004C7713 call    dword ptr [edx+0FCh]

On a enfin un peu de soleil sur l'ile donc je vais en profiter et j'attaque l'analyse de tout ça en rentrant :mrgreen:
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 20 Avril 2013, 10:30

craquepastonslip a écrit:Après le return je tombe sur ces lignes, toi aussi ?

Code: Tout sélectionner
.text:004C3E56 cmp eax, 5
.text:004C3E59 jnz short loc_4C3EA9

Ah ba voilà :)
Donc là EAX sera comparé à 5. Mais s'il vaut pas 5, tu vas sauter. Regarde ce que tu vois quand tu sautes.

Ensuite, reviens à la routine, relis le bout de code(entier) que j'avais collé là:
viewtopic.php?p=116054#p116054
Et dis moi quelle hypothèse tu peux en tirer. :)
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 20 Avril 2013, 15:26

C'est quand même plus simple d'analyser avec un débogueur sans bugs ! ^^
Voilà j'ai patché et arrive maintenant à lancer l'entrainement sans dongle je suis trop content ! :D
Je ne poste pas la solution car c'est probablement contraire aux CGU mais surtout parce qu'avec tous les indices donnés, c'est relativement simple à trouver même pour un newbie comme moi :mrgreen:
Merci 1000 fois à PaPa Bango et aux autres pour votre aide.
Au plaisir de vous retrouver pour un nouveau challenge.
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 21 Avril 2013, 12:20

craquepastonslip a écrit:Voilà j'ai patché et arrive maintenant à lancer l'entrainement sans dongle je suis trop content ! :D
Je ne poste pas la solution car c'est probablement contraire aux CGU

Oh bah comme c'est dommage :( j'aurais bien aimé savoir comment tu avais décidé de patcher le module arbitrage.

Bref, je voulais te faire dire qu'en sortie de routine, il y avait un cmp eax,6 :D
Ensuite, dans ce code:
Code: Tout sélectionner
004C7556  |.  FF15 94A85200 CALL DWORD PTR DS:[52A894]                                 ;  arbitr_1.DDProtCheck
004C755C  |.  85C0          TEST EAX,EAX                                   <= ReadDongle SUCCESS?
004C755E      74 08         JE SHORT Arbitrag.004C7568
004C7560  |.  83C8 FF       OR EAX,FFFFFFFF                             <=sinon EAX = -1
004C7563  |.  E9 EE000000   JMP Arbitrag.004C7656
004C7568  |>  8B15 C49FA600 MOV EDX,DWORD PTR DS:[A69FC4]           <= lecture du 1er contenu (ou module)
004C756E  |.  81FA 922C0000 CMP EDX,2C92                             <= égal à 2C92 ?
004C7574      74 08         JE SHORT Arbitrag.004C757E
004C7576  |.  83C8 FF       OR EAX,FFFFFFFF                              <= sinon EAX =-1
004C7579  |.  E9 D8000000   JMP Arbitrag.004C7656
004C757E  |>  8B15 8C9EA600 MOV EDX,DWORD PTR DS:[A69E8C]           <= lecture du 2eme contenu (ou module)
004C7584  |.  0FBE0A        MOVSX ECX,BYTE PTR DS:[EDX]
004C7587  |.  83E1 02       AND ECX,2
004C758A  |.  83F9 02       CMP ECX,2                                         => égal à 2?
004C758D      74 08         JE SHORT Arbitrag.004C7597
004C758F  |.  83C8 FF       OR EAX,FFFFFFFF                               <= sinon EAX =-1
004C7592  |.  E9 BF000000   JMP Arbitrag.004C7656
004C7597  |>  B8 06000000   MOV EAX,6                                     => tout est ok, eax est mis à 6 :)


Ce qui est intéressant, c'est de voir comment tu patches, il y a surement plusieurs façons de voir le truc.
Tu peux très bien patcher les sauts, ou comme j'ai fais, entrer dans le DDProtCheck et là mettre ce qu'il faut:
2C92 dans le DWORD PTR DS:[A69FC4]
2 dans le DWORD PTR DS:[A69E8C]
suivit d'un petit xor eax,eax et d'un retn ;)
L'avantage, c'est que tu patches directement la fonction, et je ne saurais que trop te conseiller de placer un BP en début de fonction de check et jouer un petit moment comme ça, voir s'il y a pas un moment ou un autre contenu est lu...
Mais il semble qu'il n'y a rien de vicieux ici :mrgreen:
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 21 Avril 2013, 15:52

PaPa Bango a écrit:Bref, je voulais te faire dire qu'en sortie de routine, il y avait un cmp eax,6 :D

Oui j'ai remplacé le JE par un JMP juste après cette comparaison et ça suffisait :)

PaPa Bango a écrit:Ce qui est intéressant, c'est de voir comment tu patches, il y a surement plusieurs façons de voir le truc.
Tu peux très bien patcher les sauts, ou comme j'ai fais, entrer dans le DDProtCheck

J'étais parti là-dessus au début mais ça faisait beaucoup de modifs même si tu as raison car la fonction peut être rappelée plus tard...mais heureusement pour moi la vérif du dongle ne se fait qu'au lancement des modules ^^
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 21 Avril 2013, 18:08

craquepastonslip a écrit:mais heureusement pour moi la vérif du dongle ne se fait qu'au lancement des modules ^^

Humm non, le module arbitrage contrôle régulièrement le dongle, je pense qu'il en va de même pour les autres...
D'ailleurs quand tu lances le soft sans dongle, tu as le nag 'pas de dongle, veuillez brancher blabla', et si tu branches le dongle, le soft se lance.
C'est bien qu'il y a un contrôle tous les X secondes.
Et le check peut ne pas être appelé par la même routine à chaque fois. C'est pour ça que je pense préférable de patcher la fonction ;)

M'enfin, ça a l'air de fonctionner pour toi. Félicitations :D
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 05 Octobre 2015, 14:10

Bonjour à tous,
Voilà plus de 2 ans que j'ai réussi à cracker la version 7 (grâce à Bango surtout) or j'aimerais faire de même avec la 7 mais cela me semble + compliqué.
Pour l'entrainement.exe je vois bien que DDProtCheck est appelé en 004787BB, je peux éviter une 1ère exception en 004D2539 en remplacant :
jnz short loc_4788DB par un jz mais je bloque ensuite... :(
J'utilise IDA Pro 6.5
Merci d'avance pour vos pistes
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar baboon » 06 Octobre 2015, 10:56

Il va falloir nous en dire un peu plus...
On ne sera pas aussi gentil que PapaBango à chaque fois :)
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3319
Inscription: 08 Juillet 2005, 17:49

Re: duplitop 6

Messagepar Bango » 06 Octobre 2015, 14:04

baboon a écrit:On ne sera pas aussi gentil que PapaBango à chaque fois

En plus j'ai tendance à penser qu'il est con ce mec!!! :mrgreen: :aie:
Quand je relis ça, je me dis que ça empêche de chercher, y a trop d'indices voire carrément de réponses. Ça en est même plus marrant pour le challenge :) . 0 intérêt.
Ceci dit... rien n'a changé :roll: C'est strictement la même chose :mrgreen:
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1551
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 07 Octobre 2015, 11:56

Bango a écrit:
baboon a écrit:On ne sera pas aussi gentil que PapaBango à chaque fois

En plus j'ai tendance à penser qu'il est con ce mec!!! :mrgreen: :aie:
Quand je relis ça, je me dis que ça empêche de chercher, y a trop d'indices voire carrément de réponses. Ça en est même plus marrant pour le challenge :) . 0 intérêt.
Ceci dit... rien n'a changé :roll: C'est strictement la même chose :mrgreen:


PapaBango ah oui t'es plus aussi gentil en effet à penser que je suis con... :cry:
Désolé ça remonte à hyper longtemps donc c'est redevenu du charabia pour moi :?
Les explications :
DDProtCheck est la fonction qui permet de vérifier la présence/validité du dongle, elle commence à l'adresse 00478888.
Il y a d'abord ce test sur EBX qui est égal à 1000ABE0 :
CPU Disasm
Address Hex dump Command Comments
004788A0 |. 85DB TEST EBX,EBX
004788A2 75 37 JNE SHORT 004788DB

Ca fait sauter en 4788DB et ensuite je mets des BP sur les call et je rentre dans chacun d'eux mais au bout du 3e :
INT3 breakpoints, item 3
Address = 004D2520
Module = Entrainement_-_origine_-_Copie
Status = Active
Disassembly = CALL 004D627D
Comment =
J'ai beau rester appuyer sur F8 ça boucle indéfiniment et un F9 me renvoit cette erreur :
Access violation when writing to 001A2230

Voilà pourquoi j'ai voulu changer le JNE par un JE, ça m'amène à :
CPU Disasm
Address Hex dump Command Comments
004788BA |. E8 B9080600 CALL <JMP.&vcl100_bpl.@Forms@TCustomForm ; Jump to vcl100_bpl.@Forms@TCustomForm@Close$qqrv

Et en rentrant dedans j'obtiens le nag "Veuillez brancher votre dongle !" ici :
CPU Disasm
Address Hex dump Command Comments
52074DAD FF92 F4000000 CALL DWORD PTR DS:[EDX+0F4]
Du coup comme c'est le module vcl100_bpl je me dis que c'est pas bon de patcher ici...
En rentrant dans les call je reviens dans le module entrainement ici :
CPU Disasm
Address Hex dump Command Comments
00479E8C |. 3C 01 CMP AL,1
00479E8E |. 74 0A JE SHORT 00479E9A

J'essaie de remplacer JE par JNE au dessus par ex ou ceux plus bas mais quoi que je fasse ensuite j'arrive jamais à sortir de la fonction sans qu'il appelle la fonction exit

CPU Disasm
Address Hex dump Command Comments
0047896B |. /74 05 JE SHORT 00478972

CPU Disasm
Address Hex dump Command Comments
00401EEF |. /0F84 5A010000 JE 0040204F
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

PrécédenteSuivante

Retourner vers Reversing

Qui est en ligne

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