logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Reverse Engineering >> CHESSCOMMENT 1.2 Newtopic | Reply
poster txt
TaIPaN666
Inscrit le 06-01-2005
Posté le 06-01-2005 17:55

Bonjour Messieurs-Dames(?)!

Je m'en remets à vous pour un logiciel appellé CHESSCOMMENT. Il peut être téléchargé à : hoop://www.mrit.com/FR/Logiciels/ChessComment/Installer.html

Je suis débutant en cracking. Enfin on va dire "un peu plus que débutant". Je m'attaquais à voir comment la protection de ce logiciel mais je vous avouerai que je sèche... Ca n'a pas l'air bien dur peut-être mais bon...

Avant j'utilisais softice, mais maintenant, ce dernier me fait planter sous XP. Donc je viens d'utiliser OLLYDBG. Et je n'arrive pas encore à bien le maîtriser. Voilà pour le contexte.

EN CE QUI CONCERNE LE PROG, VOILA CE QUE G PU TROUVER :

00502ABB |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00502ABE |. E8 0D15F0FF CALL ChessCom.00403FD0
00502AC3 |. 83F8 13 CMP EAX,13
00502AC6 |. 75 1B JNZ SHORT ChessCom.00502AE3
00502AC8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00502ACB |. 8078 04 2D CMP BYTE PTR DS:[EAX+4],2D
00502ACF |. 75 12 JNZ SHORT ChessCom.00502AE3
00502AD1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00502AD4 |. 8078 09 2D CMP BYTE PTR DS:[EAX+9],2D
00502AD8 |. 75 09 JNZ SHORT ChessCom.00502AE3
00502ADA |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00502ADD |. 8078 0E 2D CMP BYTE PTR DS:[EAX+E],2D
00502AE1 |. 74 16 JE SHORT ChessCom.00502AF9

Le password que l'on rentre est dans EAX. D'après les lignes qui précédent, j'en déduis que le pass doit être de 19 caractères (0x13) et sous la forme XXXX-XXXX-XXXX-XXXX. Car si l'on va à 00502AE3 ==> le prog indique que le code est erroné.

J'ai donc tapé comme password 1111-1111-1111-1111 et comme prévu, je vais plus loin dans le processus d'identification du code jusqu'à un certain point :

00502C36 |> 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00502C39 |. BA 85040000 MOV EDX,485
00502C3E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00502C41 |. E8 AAB9FBFF CALL ChessCom.004BE5F0
00502C46 |. 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
00502C49 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00502C4C |. E8 9711F0FF CALL ChessCom.00403DE8
00502C51 |. 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00502C54 |. 50 PUSH EAX

en 00502C3E, on met notre password dans EAX (en sachant que les caractères '-' ont été retirés). Dans EAX, G donc :
EAX 00AB257C ASCII "1111111111111111".

Après le call en 00502C41, il est mis une valeur dans EDX à l'instruction 00502C46. A savoir :
EDX 00AB259C ASCII "5033031103031001"

A ce moment, je me dis "SUPER!!!". Ca doit être le good serial. Je le teste (à savoir 5033-0311-0303-1001) et... NON! En fait, j'ai l'impression que c'est le résultat d'un calcul par rapport à notre faux sérial. En effet, si j'avais mis 2222-2222-2222-2222, j'aurais eu une autre valeur dans EDX. Snif alors...

Et après je ne comprends plus rien d'autant plus que je ne sais pas encore faire des BP sur des valeurs ASCII en mem (pour savoir si ce 5033031103031001 est comparé a autre chose par la suite...)

Bref, si qqn pouvait me donner un ptit coup de pouce.

Merci beaucoup en espérant avoir été assez clair!

[ Ce Message a été édité par: elooo le 2005-01-06 20:55 ]
profil | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 06-01-2005 23:24

Ahah je suis à la limite entre écrouler de rire (ce prog est rigolo à cracker quand même : entre les MessageBox "N'essayez pas de deviner un code de sérialisation" (vivi j'y ai eu droit :>), les messages comme quoi mon serial ne correspond pas au programme en question mais qu'il est cependant valide, mais pas pour ce soft quoi (bah quoi... j'essaie des trucs hein ), les blocages au bout d'un moment quand je lui fais avaler plein de serials à la suite, etc), et entre pleurer (c'est qu'il est chiant ce prog Ceci dit ça fait plaisir venant d'un developpeur français, au moins le mec fait un peu attention ).

En fait après la 1ere modif sur le serial entré, il compare le 2eme caractère et le 6eme caractère de la chaine nouvellement crée avec deux valeurs, valeurs récupérées aussi d'après des calculs (ce ne sont pas des valeurs figées, elles changent tout le temps en fonction de la chaine).
C'est rigolo parce que si dans le fake serial on entre les lettres A, L, T ou Z il lui donne des valeurs particulières avant de le passer dans la 1ere modif ('Z' devient ';', 'T' devient ':', 'L' devient '>' et 'A' devient '<'). Bref m'étonnerait pas que ces 4 lettres fassent partie du serial correct, dans quel ordre j'en sais rien, placées où je sais pas non plus, mais je me laisse penser que si elles sont là c'est qu'il doit bien y avoir une raison.
Comme l'algo de la 1ere modif est déjà chiant, j'ai essayé de piger par comparaison ce qui se passait. Pour la transformation sur le 1er caractère c'est très simple à comprendre, ça pourrait se résumer à une différence avec 4. Par contre vu que le modulo est récupéré ensuite pour le caractère suivant et ainsi de suite, c'est difficile de mettre en place une table qui permettrait de se passer de l'algo...Ou alors 'faudrait que j'y réfléchisse un peu plus.

L'auteur du soft utilise des SEH pour l'apparition des messages d'erreur, ce qui rend l'aventure plus sinueuse... on ne se rend compte qu'au dernier moment de vers quoi on va tomber.

Bref c'est pas le genre de soft qu'on cracke en 5 minutes, même si ça me paraît pas infaisable, juste chiant et ça demanderait certainement plus de temps que ce que je viens de passer dessus.
Il y a bien entendu davantage de checks que ce que j'ai énoncé au-dessus, mais les autres me restent encore assez flous pour pouvoir en parler.

En mattant les strings dans les data, j'ai vu aussi qu'il y aurait des licences "provisoires" et d'autres "définitives", bref le top serait de choper une licence définitive.

(Text string=ASCII "Utilisable sur 1 poste jusqu'au %s "
Text string=ASCII "Utilisable sur 1 poste sans limitation.")

Bref pour le moment j'ai rien de croustillant à mettre sous la dent.
Tu serais pas l'auteur du soft TaIPaN666 par hasard ?
_________________________

profil | mail | Website | edit | quote
TaIPaN666
Inscrit le 06-01-2005
Posté le 07-01-2005 09:35

Hé non elooo!!! Je ne suis pas l'auteur de ce soft d'autant plus que je n'aurais jamais pu trouver une protec de ce genre (pas assez fort hihi).

Nan mais C vrai qu'il é bizarre ce prog. Very funny one! Par contre si tu pouvais me dire ce que sont les SEH? C'est une méthode pour camoufler des chaînes de caractères comme cela on ne les voit en décompilant le prog? Comment ca fonctionne?

J'avais bien vu les :

(Text string=ASCII "Utilisable sur 1 poste jusqu'au %s "
Text string=ASCII "Utilisable sur 1 poste sans limitation.")

Seulement j'arrive à une comparaison simple pour savoir si on redirige sur "1 poste jusqu'au" et "1 poste sans limitation" mais en amont de tout ça je m'y perd! J'arrive pas à retracer pour retrouver le chemin de l'algo vérif serial...

Pfiou ben en attendant que tu me dises C koi les SEH, je V y retourner dessus.

A+!
profil | edit | quote
burnze
Inscrit le 05-11-2004
Posté le 07-01-2005 10:28

SEH = Structured Exception Handling

En cas d'erreur (division par 0, opcode inconnu,...), le programme saute vers une section de code "sûre" qui va traiter l'erreur.

On utilise souvent les SEH pour déstabiliser le debugger.
profil | Website | edit | quote
spacemonkey
Inscrit le 01-07-2004
Posté le 07-01-2005 16:51

A l'origine, les SEH sont surtout la pour stabiliser le prog

Win32 Exception handling for assembler programmers :
http://www.jorgon.freeserve.co.uk/Except/Except.htm
profil | edit | quote
TaIPaN666
Inscrit le 06-01-2005
Posté le 08-01-2005 12:24

Re messieurs!

Bon, j'ai avancé un petit poil...

Alors en fait j'ai mis la main sur la routine qui fabrique cette fameuse série à partir du sérial donné :

Code:

004BE62B |> 8D45 F4 /LEA EAX,DWORD PTR SS:[EBP-C]
004BE62E |. 33D2 |XOR EDX,EDX
004BE630 |. 8AD3 |MOV DL,BL
004BE632 |. 8A5417 FF |MOV DL,BYTE PTR DS:[EDI+EDX-1]
004BE636 |. 8BCE |MOV ECX,ESI
004BE638 |. C1E9 08 |SHR ECX,8
004BE63B |. 32D1 |XOR DL,CL
004BE63D |. E8 B658F4FF |CALL ChessCom.00403EF8
004BE642 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C]
004BE645 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
004BE648 |. E8 8B59F4FF |CALL ChessCom.00403FD8
004BE64D |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
004BE650 |. 33C0 |XOR EAX,EAX
004BE652 |. 8AC3 |MOV AL,BL
004BE654 |. 0FB64407 FF |MOVZX EAX,BYTE PTR DS:[EDI+EAX-1]
004BE659 |. 03F0 |ADD ESI,EAX
004BE65B |. 69C6 53030000 |IMUL EAX,ESI,353
004BE661 |. B9 CF020000 |MOV ECX,2CF
004BE666 |. 99 |CDQ
004BE667 |. F7F9 |IDIV ECX
004BE669 |. 8BF2 |MOV ESI,EDX
004BE66B |. 43 |INC EBX
004BE66C |. FE4D FB |DEC BYTE PTR SS:[EBP-5]
004BE66F |.^75 BA \JNZ SHORT ChessCom.004BE62B



Il doit pas tout y avoir là mais voilà ce que j'ai compris (si je rentre en sérial : 1234-5678-9012-3456)

PREND LE 1ER CARA
PREND LA VALEUR 0x485
ON FAIT SUR CETTE VALEUR UN SHIFT RIGHT D'UNE VALEUR DE 8
0x485 DEVIENT 4

ON PREND VALEUR HEXA 1ER CARA.(31)
on additionne a cette valeur 0x485.(3B6)
ON MULTIPLIE CETTE NOUVELLE VALEUR PAR 353(3B6*353=FA902)
on place 0x2CF dans le registre ECX
ON DIVISE LA NEW VALEUR (FA902) PAR LA VALEUR DANS ECX (FA902/2CF=593)(et dans EDX IL RESTE UN RESULTAT : 125???)


PREND LA VALEUR 0x125 (qui restait dans EDX)
ON FAIT SUR CETTE VALEUR UN SHIFT RIGHT D'UNE VALEUR DE 8
0x125 DEVIENT 1
etc...

Alors en fait au point où j'en suis j'ai 2 questions à vous poser :

1- Quelle est cette valeur (0x125) qui reste dans EDX après le IDIV (on a le bon résultat dans EAX, mais je ne vois pas ce que C dans EDX... ???)

2- Pkoi quand je lance le programme en mode débug que ce soit avec wdasm ou bien ollydbg, en plein cours d'éxecution j'ai des messages genre :

Code:

EXCEPTION XXXXXXXX - use Shift+F7/F8/F9 to pass exception to program (sous olly)... Quand je presse SHIFT+F9 c ok ...



Merci de vos réponses !!!
profil | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 08-01-2005 12:34

Youp, cet algo que tu as trouvé, c'est que j'ai appelé dans mon message au-dessus l'algo de 1ere modif Je pensais que tu l'avais déjà vu celui là en fait. Mais oui tu as pigé le principe pour transformer le serial en nouvelle chaine, et c'est sur cette nouvelle chaine que se feront les tests.

Pour ta question, dans edx,tu as le modulo en fait. Eax contient le résultat de la division, et Edx le modulo. C'est Edx qui est récupéré à chaque fois.

Et pour ta 2eme question : parce que le prog a quelques plantes, je crois qu'il y a un problème de rétablissement de pile. Bref c'est un peu codé avec les pieds :>

_________________________


[ Ce Message a été édité par: elooo le 2005-01-08 12:35 ]
profil | mail | Website | edit | quote
TaIPaN666
Inscrit le 06-01-2005
Posté le 14-01-2005 19:54

bon ben impossible, il est trop fort pour moi.

Ben merci de m'avoir éclairé elooo et burnze...

@bientot...
profil | edit | quote
martinus
Inscrit le 24-09-2008
Posté le 24-09-2008 16:12

Bonjour !

C'est très amusant de vous voir chercher à cracker la protection que j'ai mise au point, il y a plus de 10 ans pour un autre logiciel, à peu près sans connaissances théoriques du sujet.

Je suis bien content de vous avoir fait rire...

Allez, encore un effort les gars !

PS : Passez par le site mrit.com si vous voulez me contacter.
profil | edit | quote
ganza
Inscrit le 10-02-2007
Avatar
Posté le 24-09-2008 19:52

en même temps, tu deterres un post de 2005 alors.. peutêtre qu'ils ont reussis ou abandonné depuis !
Mais cela démontre bien un principe clef des protections logicielles: rien n'est incrackable, mais plus c'est chiant, plus il faut que le prog en vaille la peine. C'est toujours un ratio difficulté/interêt.
Si ton soft est chiant à cracker et si en plus il est pas cher, bcp renonceront et prefereront l'acheter..
(et puis on change avec le temps: j'ai plus de fric maintenant donc j'achete donc plus de logiciels. Mais ce n'est quand même qu'une fraction de tout ce que j'utilise, et que je ne pourrais jamais me payer).

EDIT: je viens de faire un tour sur ton site, 9€ c'est trés raisonnable ! Faut vraiment être fauché comme les blés pour pas les payer si on se sert régulièrement de ton outils..


_________________________
“Time you enjoy wasting, was not wasted at all.” - John Lennon

[ Ce Message a été édité par: ganza le 2008-09-24 17:55 ]
profil | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 24-09-2008 22:13

Quote:

Le 08-01-2005 11:24, TaIPaN666 a écrit :
___________________________________________________
ON DIVISE LA NEW VALEUR (FA902) PAR LA VALEUR DANS ECX (FA902/2CF=593)(et dans EDX IL RESTE UN RESULTAT : 125???)

1- Quelle est cette valeur (0x125) qui reste dans EDX après le IDIV (on a le bon résultat dans EAX, mais je ne vois pas ce que C dans EDX... ???)



Et bien justement, la valeur qui reste dans EDX c'est le reste de la division

0xFA902 / 0x2CF = 0x593 reste 0x125
autrement dit: 0xFA902 = 0x2CF * 0x593 + 0x125

EAX contient le quotient et EDX le reste de la division. On retrouve d'ailleurs le stockage du reste de la division sur d'autres type d'architecture de micro-processeurs (MC680x0, ...).
profil | edit | quote
Newtopic | Reply

Online : amihewikusut, anisefepahawe, axagedueja, DannyBow, epajonopot, eposihimwit, iaafucqowu, ibiusziyode, ifideclulvf, igebevmijiy, ijelopihema, Josephliada, ocelixahuragi, orevepe, oseheuk, sutieglo, utieakxa et 52 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page