Post Populaire





Qu'est-ce qu'un offset ?

Bonne question... L'offset, c'est l'adresse hexadecimale d'un byte...






C'est quoi un byte ?


Bon, ben un byte, c'est une valeur hexadecimale de 2 chiffres...
Pour etre plus concret, on a vu que JE =75 en hexa...Eh ben 75, c'est 1 byte ;)






Pourquoi a-t-on besoin de l'offset ?


Il se trouve que dans un programme, il y a plusieurs fois le même byte... vous n'avez qu'à rechercher 75 dans le code Hexadecimal de StartClean... Il y en a une bonne centaine !! Pourtant, chacun de ces 75 n'a qu'une seule et unique adresse : l'offset !

Souvenez vous du dernier cours...on a fait une recherche sur 85C0742E8D84 alors qu'on voulait juste trouver le code 742E...Si on avait utilisé l'offset, on aurait pu aller directement a l'endroit voulu, sans taper des ribambelles de code hexa...

C'est cool, mais ou on le trouve cet offset ?

Regardez la petite capture



Vous voyez ou c'est ?! Dans la barre d'état...
(NB: Agrandissez votre fenêtre Wdasm si vous ne voyez pas de barre d'etat...)

Bon, maintenant il faut que je vous explique comment on se sert de l'offset :
Prenons une ligne en exemple... :



Vous pouvez voir que l'offset donné par WinDasm est 00002F65h
Le petit h a coté de l'offset, ca ne vous sert a rien, vous l'oubliez :)
Et tous les zéros avant le premier chiffre, vous pouvez les oublier aussi :)
On se retrouve donc avec un offset qui est 2F65

A quoi correspond cet offset ?

Est-ce l'adresse hexa de 0F8478010000 ?
NON ! Je vous ai dit que l'offset est l'adresse hexadecimal d'un byte !

Mais alors c'est quoi cet offset ?

Eh ben, c'est l'adresse hexadecimale du premier byte de l'instruction 0F8478010000...En clair, c'est l'adresse hexadecimale de 0F... ET SEULEMENT DE 0F !
Donc 2F65 est l'offset de 0F


Ok! Mais alors, les autres byte de la ligne, c'est quoi leur adresse ?

C'est là qu'il faut apprendre a compter en Hexadecimal... :
En decimale, on compte de 0 a 9 (0 1 2 3 4 5 6 7 8 9), d'ou decimale : il y a dix chiffres...
En Hexa, on compte de 0 a F (0 1 2 3 4 5 6 7 8 9 A B C D E F), donc seize chiffres...
Maintenant, on va determiner les offsets de chaque byte de la ligne 0F8478010000 :
0F = 2F65 (ca, on l'a expliquer juste avant...) 84 = 2F66 (vous voyer la difference... ;) 78 = 2F67 (ben vi, on ajoute 1 a chaque fois..) 01 = 2F68 00 = 2F69
00 = 2F6A (OUBLIEZ PAS QU'ON COMPTE EN HEXADECIMALE...)

Voila, c'est pas bien compliqué non ? La seule difficulté, c'est de compter en hexa...
Tiens, un truc pour verifier que vous ne vous êtes pas trompé : regardez la ligne suivante :



Vous voyer l'offset ? c'est bien 2F6B, la suite logique de 2F6A !!
Bon, maintenant que vous savez ce qu'est un Offset, vous aller pouvoir vous en servir !

J'en fais quoi de cet offset ?

Dans l'editeur Hexadecimal, vous pouvez rentrer directement l'offset du byte a modifier...
Comme ca, ca vous évite de taper plein de valeurs Hexadecimales...
Voici les menus concernés pour 2 éditeurs :
HEdit : Edit =>> Go to...
Apres, tapez 0x avant l'offset... (0x2F65 par exemple)

WinHex : Position =>> Go To Offset...
Vous pouvez tapez directement l'offset (2F65 par exemple...)

Malheureusement, je ne peux pas vous faire une liste exhaustive, mais c'est a peu près le même principe pour tous les éditeur hexadecimal...

Et si je veux connaitre l'offset d'un byte depuis l'editeur Hexa, je fais comment ?

Bon, la encore je ne peux pas faire une liste complète, mais de facon générale, l'offset apparait dans la barre d'état de votre éditeur hexadecimal...Voici l'exemple de Hedit (en haut) et de WinHex (en bas)





Et cet "Offset", ca sert qu'a trouver un byte en hexa ?

Ben non ! Sinon, je nevous aurais pas pris la tête avec !!
Donc, la principale utilité de rechercher l'offset, c'est de faire un crack grâce à notre petit code :)
Et notre code source, il est expliqué dans le 5eme Tutorial 

Peut-on annuler un saut conditionnel autrement que par plein de 90 ?Si je pose la question, la réponse est forcement oui ! :))

Bon, alors comment on fait ?

Vous savez qu'on peut annuler un nombre par son inverse ?
Par exemple, si on prend 34, on peut l'annuler avec -34
Facile, non ? Eh bien, pour un saut conditionnel, c'est le meme principe !
Ainsi, un JE est annulé par un JNE...
De meme, un JNE est annulé par un JE !

Comment ca se traduit en hexadecimal ?

C'est tres simple :)
Pour annuler un 74, on va mettre un 75 ! (RAPPEL: 74=JE et 75=JNE)
Pour annuler un 0F84xxxxxx, on va mettre un 0F85xxxxxx (RAPPEL: 0F84=JE et 0F85=JNE)

Réciproquement, pour annuler un 75, on va mettre un 74...
Et pour annuler un 0F85xxxxxx, on va mettre un 0F84xxxxxx !

Normalement, vous devriez comprendre sans problème... ;)

Ok! Mais pourquoi "annuler" au lieu de "nopper" ?

L'utilité est de changer changer un minimum de byte... Par exemple, au lieu de changer un 0F8480000000 en 909090909090, on peut ne changer que le 85...ce qui donnera 0F8580000000 !
Ca fait quand même plus propre, non ? Et puis surtout, vous verrez que quand vous allez écrire la source du crack, ca sera moins fastidieux : 1 ligne au lieu de 6.

Y'a t-il encore d'autre maniere de "cracker" un programme ?Bien sur que oui !! Je dirais meme que chaque crack est "différent" d'un autre !
Et même un programme peut etre cracker de plusieurs manières... !
Il existe d'ailleurs d'autres manières de cracker un StartClean...On en a vu 2, mais j'en compte encore au moins 2 autres...(que l'on verra dans le prochain numero, avec SoftIce)

Tout dépend du raisonnement qu'on adopte...C'est pour cela qu'il est tres dur de faire un cours qui permette rééllement d'apprendre à cracker... Je fais mon possible, mais n'oubliez pas :

"C'est en forgeant qu'on devient Forgeron"

Comment faire sauter un nag-screen ?

oOo...on peut pas vraiment faire un cours universel la dessus, mais il y a quand meme une méthode qui peut marcher... : si le Nag-Screen contient du texte ou une barre de titre, vous pouvez essayer de retrouver ces chaines de caractères dans le code hexadecimal du programme de façon a l'effacer...

Bon, on va plutot faire un peu de pratique, ca sera plus simple...
Prenons une fois encore StartClean...Lorsque vous le lancez, le nag-screen apparait...
Relevez des lors le nom de la fenêtre : "Register!"


NB: Si il n'y a pas de barre de titre, faite une recherche sur le texte contenu dans le nag...

Bon, maintenant, je vous explique brievement le principe :

Si on efface le nom de la fenetre dans le code hexadecimal, elle n'apparaitra plus au lancement du programme...tout simplement...Donc plus de nag-screen... Comment je retrouve le "Register!" en hexadecimal ?
Dans votre editeur hexadecimal, il suffit de faire une recherche sur ce mot !



Maintenant faites OK...le programme va vous renvoyer "Data not Found!" ou un truc comme ca.

Ben alors ?? Pourquoi ca marche pas ?

En fait, c'est du au fait que le programme est en 32bit....
Et alors? allez vous me dire...ben en 32 bit, vous devez sépare chaque byte de lettre par un byte "00"...
Ohlala ! c'est quoi ca ?! Rassurez-vous, vous allez comprendre en regardant l'écran suivant :



Vous comprenez toujours pas ?? Bon, regardez la premiere recherche...
On a fait une recherche sur le mot "Register!", ce qui donne en 16bit :
52 65 67 69 73 74 65 72
Et bien en 32 bit, il faut ecrire ce meme code hexadecimal, mais entrelacé de "00", ce qui donnera :
52 00 65 00 67 00 69 00 73 00 74 00 65 00 72

NB: Certains programmes, comme WinHex, peuvent faire la recherche de texte en 32bit, simplement en activant l'option "Unicode"...Là encore, il faut faire selon l'éditeur Hexadecimal que vous utilisez...

Donc maintenant, en appuyant sur OK, vous allez tomber sur la phrase qui nous intéresse :)

Et a l'avenir, comment je pourrais savoir qu'un programme est en 16bits ou en 32bits ?

Et bien c'est simple : en general, les programmes windows 9x sont tous en 32bits, sauf quelque uns...
Si c'est un programme Windows 3.x ou DOS, c'est forcement du 16bits...
Au pire des cas, si vous savez pas, ben vous essayer les deux méthodes ! Compris ?...

Ok! Je fais quoi maintenant ?
Eh bien maintenant, il faut remplacer les valeurs hexadecimales des lettres par des zéros...
Si vous comprenez pas, regardez les deux ecran ci-dessous :





Normalement, vous devriez reussir a faire ca sans probleme...
Maintenant, lancer StartClean...La fenêtre a bel et bien disparu :)

NB: Pour certains programmes, vous verrez toujours la fenetre, mais la barre de titre sera vide...
_______
Dans ce cas, il faut voir si il n'y aurait pas juste au dessus (dans le code hexa) une occurance du style "Shareware.Frm","Form.Shareware" ou un truc qui y ressemble...(bien sur, j'ai mis "Form.Shareware" parceque c'est le cas de notre exemple, mais ca correspond en fait a ce qu'il y a d'ecrit dans la barre de titre...vous pouvez aussi chercher un truc du genre "Form.Nag" ou "Form.Splash" ou un autre truc qui vous parait suspect...) Si vous trouvez, essayez de le supprimer (avec des "00") et voyer si ca fonctionne...
Si ca marche pas ou que vous ne trouvez pas, laissez tomber...

OK! ca marche, mais la fenetre principal du programme, pourquoi elle n'apparait plus ?

Ah...ca c'est le petit inconvénient de la technique...rappelez-vous :
Quand on lance StartClean, il faut cliquez sur "OK" dans le Nag-screen avant de pouvoir accéder a la fenêtre principale... Mais nous, on a viré le nag, donc on ne peut plus appuyer sur "OK", donc le programme ne se lance plus...logique !

Alors quel interet de nous faire un cours sur un truc qui ne marche pas !
Du calme !! Qui a dit que ca ne marchait pas ? On a bien virer la fenetre non ? En fait, ce qui nous gêne, c'est juste qu'on peut pas appuyer sur le bouton "OK"... D'ou la caracteristique suivante : Cette technique n'est valable que si le Nag-Screen ne requiert aucune action pour activer le programme...

Donc dans le cas ou le nag-screen est "au dessus" du programme deja lancé, cette technique marche parfaitement... ;) Par contre, n'abusez pas de cette methode car elle n'est pas tres "fine"...C'est même plutot bourin... Personnellement je ne l'utilise que dans les cas ou toutes mes autres tentatives ont echouées...

Pourquoi certains programmes n'ont pas de "Data String References" ?

Arff ! Avez vous deja programmé en VisualBasic ? Et bien dans ce language, tres pratique au demeurant, toutes les fonctions de création de fenetre, de comparaison de chaines de caracteres, etc... sont prise en charge par les fameuse DLL qu'il nous manque tout le temps quand on recupère un programme sur Internet.
Vous savez, les VBRUN300.DLL et autres MSVBVM50.DLL...Et c'est pour ca que quand vous allez decompiler le programme vous allez rien voir dans les "Data String References"...

Il y a aussi d'autres programmes qui ne possèdent pas de Data String (bien qu'il ne soit pas programmer en VisualBasic). Dans ce cas, essayez de voir si le code n'est pas contenu dans un fichier DLL annexe...
Sinon, considerez qu'il n'y a rien a faire (ca serait bien trop dur a expliquer a votre stade actuel).
Nous aborderons le sujet dans un prochain numero...

Ceci dit, si vous etes confronter a un nag-screen, vous pouvez toujours essayer la technique décrite précédemment ! Avec un peu de chance, ça peut marcher :)

C'est quoi SoftIce ?

SoftIce est un "Débuggeur"...Il trace un programme pendant l'execution...
Cet utilitaire est tres pratique dans certains cas, mais comme il n'est pas si simple a utiliser, nous aborderons son utilisation dans le prochain numero... Patience...

Je crois que nous avons vu le plus important pour l'instant...
Maintenant, à vous de vous faire les dents sur des sharewares...
Commencez par des petites production, parceque sinon, vous risquez de désesperer rapidement !
En effet, les grand logiciels (ACDSee, Paint Shop Pro ....) sont très difficile à cracker pour un debutant.
En fait, je dirais meme que vous n'y parviendrez pas avant un bon bout de temps...
Mais tout arrive avec le temps ;) Donc patience... Et surtout bonne chance !
Mais avant de vous lancer dans l'aventure, passez par le dernier cours !
Vous y apprendrez comment faire vos propres crack a l'aide d'un code source qu'on vous fournit :)

Source : http://jul.lemaire.free.fr

- sebdelkil 2009-2015 - Aucun droit réservé -