duplitop 6

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

Re: duplitop 6

Messagepar etherlord » 04 Avril 2013, 08:08

Il y a plusieurs sujets sur ce forum qui traitent des dongles, tu les as lu ?

Et qu'en as-tu retiré ?

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

Re: duplitop 6

Messagepar Bango » 04 Avril 2013, 11:45

craquepastonslip a écrit:Personne n'a de pistes à me donner?
En même temps c'est un jeu de vieux donc je dois être le seul à avoir besoin de le craquer lol


Bon on va te donner une p'tite piste :) Mais il faudra tout de même mettre les mains dans le cambouis à un moment ou à un autre, parce que je te donne la piste, mais c'est tout! :P

Tu ne l'auras pas manqué, chaque module a son exécutable. Ça te fera autant de patch à faire.
Prenons le cas du module Arbitrage. Tu as donc Arbitrage.exe ET Arbitrage.dll :roll:
Si je ne doute pas que tu as regardé le .exe... En as-tu fait de même avec le .dll ? ;)

Bref, la piste... si tu avais regardé la dll, tu as fait un petit CTRL+N et rangé tout ça par adresse, et là tu vois immédiatement la deuxième ligne au nom évocateur :) :
Code: Tout sélectionner
Names in arbitr_1, item 1
 Address=0275ABE0
 Section=.text
 Type=Export
 Name=DDProtCheck


Ce qui permet de rapidement trouver ça:
Code: Tout sélectionner
00409501  |> \68 67274F00   PUSH Arbitrag.004F2767                            ; /ProcNameOrOrdinal = "DDProtCheck"
00409506  |.  A1 E8264F00   MOV EAX,DWORD PTR DS:[4F26E8]                     ; |
0040950B  |.  50            PUSH EAX                                          ; |hModule => 02750000 (arbitr_1)
0040950C  |.  E8 81660E00   CALL <JMP.&KERNEL32.GetProcAddress>               ; \GetProcAddress
00409511  |.  8BD8          MOV EBX,EAX
00409513  |.  891D 94A85200 MOV DWORD PTR DS:[52A894],EBX


Tu comprends rapidement que ce qui est mis là, dans [52A894], risque d'être très intéressant :mrgreen:
Une petite recherche d’occurrences te donnera la prochaine piste ;)

Pour les autres modules, c'est strictement la même chose, une fois que tu en as compris 1, tu les as tous compris.
Il ne te reste plus qu'à comprendre ce qu'il faut patcher ;)

Au boulot! :D

EDIT: Pour l'émulation des dinkey, je ne connais pas ces dongles, mais je pense que dans ce cas là, c'est bien plus facile de patcher que de chercher de quoi émuler.
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1574
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 12 Avril 2013, 13:23

Désolé pour le délai je ne surveillais pas le post.
@etherlord
Pas trouvé de sujet très détaillé sur le forum donc je me base sur ce tutoriel :
__http://www.woodmann.com/fravia/zee__4.htm
@PaPa Bango
Merci pour cette 1ère piste, ça a l'air complexe tout ça mais j'aime bien les challenges ^^
Tu recommendes un soft pour lire les dll ?
De toute façon il me faudra visual studio pour recompiler ?
Je termine qqs trucs et j'attaque après en espérant pas trop galérer.
A+
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 12 Avril 2013, 16:16

J'ai décidé d'utiliser OllyDbg et j'ai trouvé la 2ème occurence de cette adresse :
004C7556 |. FF15 94A85200 CALL DWORD PTR DS:[52A894]
J'ai essayé de remplacer par NOP, ça fait un truc bizarre à l'exécution mais ça passe pas la protection, je me disais bien que c'était trop facile :mrgreen:
Allez je continue à chercher mais c'est du charabia tout ce code!
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 12 Avril 2013, 16:49

Je viens de découvrir le principe des tests conditionnels donc j'ai voulu remplacer :
JE SHORT 004C74E2
par
JMP SHORT 004C74E2
Mais comme ça renvoie sur une adresse mémoire antérieure au call ça ne devait pas être ça.
Allez je continue mes investigations mais en tout cas respect à ceux qui maitrisent ce language, c'est vraiment du bas niveau!
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 12 Avril 2013, 19:57

C'est très sympa d'essayer de cracker mais je vais pas passer mes nuits dessus non plus, grace à Deamon je comprends déjà mieux le principe :)
@PaPa Bango : tu peux juste me dire combien tu as fait de modifs dans la dll et dans l'exe stp ? Juste pour savoir si j'ai une chance d'y arriver avec mon niveau de débutant ^^
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 17 Avril 2013, 12:07

Code: Tout sélectionner
00409501   > 68 67274F00    PUSH Arbitrag.004F2767                   ; /ProcNameOrOrdinal = "DDProtCheck"
00409506   . A1 E8264F00    MOV EAX,DWORD PTR DS:[4F26E8]            ; |
0040950B   . 50             PUSH EAX                                 ; |hModule => 10000000
0040950C   . E8 81660E00    CALL <JMP.&KERNEL32.GetProcAddress>      ; \GetProcAddress
00409511   . 8BD8           MOV EBX,EAX
00409513   . 891D 94A85200  MOV DWORD PTR DS:[52A894],EBX
00409519   . 85DB           TEST EBX,EBX
0040951B   . EB 3A          JMP SHORT Arbitrag.00409557

EAX prend la valeur à l'adresse 4F26E8 soit 10000000
Ensuite une procédure kernel32 est appelée, je la saute en mettant un BP et en appuyant sur F8
Au retour EAX est passée à 1000ABE0 qui est affectée à EBX puis stockée à l'adresse 52A894
Après j'ai essayé de mettre des BP au fur et à mesure mais je ne trouve pas encore pourquoi le code ne peut pas arriver jusqu'à la 2ème occurence qui lit cette valeur :
Code: Tout sélectionner
004C7556  |. FF15 94A85200  CALL DWORD PTR DS:[52A894]

Pour l'instant le code se termine à cette ligne avec une violation d'accès, je peux forcer l'exécution mais ça terminera simplement le process :
Code: Tout sélectionner
004E80ED   . 3049 62        XOR BYTE PTR DS:[ECX+62],CL

Probabement car l'adresse 10030063 sort de la zone mémoire
CL=00
DS:[10030062]=???
Pas encore trouvé où on stocke 10030000 dans ECX
J'ai du rater un truc dans le traçage :x
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Martinooooo » 17 Avril 2013, 12:44

GetProcAddress retourne l'adresse dans une DLL d'une fonction (ici "DDProtCheck"). Tu as donc une DLL chargée en mémoire contenant une fonction exportée appelée DDProtCheck.
Son adresse est stockée dans un dword à 52A894 puis est appelée.
Il faut donc que tu rentres dans ce call, pour savoir ce qu'il s'y passe.
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: duplitop 6

Messagepar craquepastonslip » 17 Avril 2013, 13:24

Ah ok merci Martino, je viens de capter qu'une fois cette adresse 1000ABE0 écrite en 52A894 je pouvais appuyer sur entrée pour suivre le call.
Par contre comme le code est stoppé par le BP, j'ai remplacé JMP SHORT Arbitrag.00409557 par JMP LONG Arbitrag.004C7556 pour que le call soit appelé direct et ainsi suivre pas à pas les valeurs d'exécution, j'imagine que y'avait plus propre à faire mais je débute ^^
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 17 Avril 2013, 14:31

Maintenant je vois que le call passe par cette ligne :
Code: Tout sélectionner
1000A75B   50               PUSH EAX
1000A75C   68 54E20110      PUSH 1001E254                            ; ASCII "DD_ERRCODE"
1000A761   FF15 90420210    CALL DWORD PTR DS:[10024290]             ; KERNEL32.GetEnvironmentVariableA

J'ai activé DD_ERRCODE dans les variables d'environnement et quand je lance l'arbitrage il m'affiche une erreur 412 et parfois 401.
Il doit y avoir un test effectué plus haut qui créé le code et l'insère en 1001E254 puis jumpe ici ?
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar craquepastonslip » 17 Avril 2013, 14:48

Code: Tout sélectionner
1000AB43   74 15            JE SHORT 1000AB5A
1000AB45   68 9C010000      PUSH 19C
1000AB4A   68 40B00110      PUSH 1001B040
1000AB4F   E8 ECFDFFFF      CALL 1000A940

Je vois plusieurs tests effectués (JE,JNZ, JNB..) et à chaque fois si la condition n'est pas respectée il va en 1000A940 et quand on continue un peu (en sautant les kernel32) il arrive bien sur le DD_ERRCODE.
En + quand on convertit 19C en décimal ça donne 414 donc ça ressemble étrangement au code renvoyé par le système, je pense donc être sur la bonne voie en remplaçant tous ces tests par des JMP :)
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 17 Avril 2013, 14:58

craquepastonslip a écrit:Pour l'instant le code se termine à cette ligne avec une violation d'accès, je peux forcer l'exécution mais ça terminera simplement le process

Configure ton Olly => Options /debugging options puis onglet exceptions. Tu coches toutes les cases, puis tu rajoute en bas la plage 00000000 - FFFFFFFF
Ca ira mieux ;)

craquepastonslip a écrit:Par contre comme le code est stoppé par le BP, j'ai remplacé JMP SHORT Arbitrag.00409557 par JMP LONG Arbitrag.004C7556

humm, ça je ne comprends pas trop, je vais essayer de rejeter un oeil au soft, mais je ne vois pas bien pourquoi tu fais ça ??
Ca expliquerait, à mon avis le DDERRORCODE que tu vois. :roll:

EDIT:
Au fait, craque pas ton slip! craquepastonslip, Edite tes messages plutôt que de répondre à tes propres posts :P
Il y a un petit bouton EDIT en haut à droite de tes posts quand tu es connecté.
Dernière édition par Bango le 17 Avril 2013, 15:00, édité 1 fois.
Raison: Tips
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1574
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 17 Avril 2013, 15:16

Merci Papa Bango de bien vouloir jeter un oeil :)
En effet le fait d'ignorer les exceptions dans les options m'évite maintenant de les passer manuellement.
Arf je pensais être sur la bonne piste pour les codes d'erreur :(
D'autant que c'est du code créé en mémoire à l'exécution donc il me faudrait un autre programme pour le modifier.
D'accord j'éditerai la prochaine fois pour éviter de surcharger le nombre de posts.
craquepastonslip
Débutant
Débutant
 
Messages: 25
Inscription: 01 Avril 2013, 01:01

Re: duplitop 6

Messagepar Bango » 18 Avril 2013, 11:01

Code: Tout sélectionner
004C7549  |.  6A 00         PUSH 0
004C754B  |.  68 649EA600   PUSH Arbitrag.00A69E64
004C7550  |.  890D 789EA600 MOV DWORD PTR DS:[A69E78],ECX
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
004C7568  |>  8B15 C49FA600 MOV EDX,DWORD PTR DS:[A69FC4]
004C756E  |.  81FA 922C0000 CMP EDX,2C92
004C7574      74 08         JE SHORT Arbitrag.004C757E
004C7576  |.  83C8 FF       OR EAX,FFFFFFFF
004C7579  |.  E9 D8000000   JMP Arbitrag.004C7656
004C757E  |>  8B15 8C9EA600 MOV EDX,DWORD PTR DS:[A69E8C]
004C7584  |.  0FBE0A        MOVSX ECX,BYTE PTR DS:[EDX]
004C7587  |.  83E1 02       AND ECX,2
004C758A  |.  83F9 02       CMP ECX,2
004C758D      74 08         JE SHORT Arbitrag.004C7597
004C758F  |.  83C8 FF       OR EAX,FFFFFFFF
004C7592  |.  E9 BF000000   JMP Arbitrag.004C7656
004C7597  |>  B8 06000000   MOV EAX,6
004C759C  |.  E9 B5000000   JMP Arbitrag.004C7656



Bon, à ton avis?
parmi les deux possibilités que tu as en sortie de la fonction DDProtCheck ( 0 ou autre), laquelle est la bonne? (indice: tu peux déjà voir sans dongle le retour que tu obtiens...:roll:)
Tu vois bien qu'après la fameuse fonction, on a un TEST EAX,EAX puis un JE
Je te rappelle que JE signifie Jump if Equal, donc on saute ssi EAX == 0, sinon on met -1 dans eax, et on quitte.

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 ;)
Mais dans un premier temps, réponds d'abord à la question :p
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1574
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: duplitop 6

Messagepar craquepastonslip » 18 Avril 2013, 11:49

Merci! Après le call, EAX a comme valeur 19C soit 412, le fameux DDERR_CODE renvoyé quand il n'y a pas de dongle branché.
Comme je ne pourrais pas patcher en mettant 0 dans le regitre EAX après l'appel, je vais remplacer le JE par un JMP et continuez l'analyse.
Ce qui donne :
Code: Tout sélectionner
Patches
Address    Size   State     Old                               New                               Comment
0040951B     7.   Active    JNZ SHORT Arbitrag.00409557       JMP Arbitrag.004C7556
004C755E     2.   Active    JE SHORT Arbitrag.004C7568        JMP SHORT Arbitrag.004C7568

Je suis obligé de laisser le 1er patch pour l'instant sinon je n'arrive jamais jusqu'au call.
En effet même en ignorant toutes les exceptions, j'arrive sur un popup EAccessViolation et quand je clique sur OK le process se termine, une idée?
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 4 invités