• Mon objectif : craquer Unreal no-cd

     

    1/ Les logiciels utiles pour ce cours


    -> Un désassembleur               :  W32dasm 8.93
    -> Un éditeur hexadécimal       :  Winhex 10.2

     

    2/ Présentation

    Unreal a été, en son temps, un jeux magnifique, super beau, super jouable, avec une bande-son superbe aussi. Malheuresement, pour en profiter pleinement, il faut l'installer complètement sinon ses temps de chargement CD sont beaucoup trops longs.

    Une fois UNREAL installé complètement, à chaque fois que je démarre le jeux, il me demande ce CD. Comme je suis de nature assez bordélique, et que j'égare souvent mes CD dans le foutoir qu'est my bedroom, j'ai décidé de faire un crack pour jouer sans CD.

    Dans ce tutorial, je vais donc vous expliquer mon raisonnement... Ca n'a pas été évident du fait que j'ai dû tout détailler alors que ce crack ne m'a pris que 5 minute. Hééé oui, c'est certainement un des cracks que j'ai fait le plus rapidement, c'est donc pas forcément parcequ'on s'attaque à une grosse boîte, que le crack sera dur.

     

    2/ Le crack

    Au début, on serait tenté de désassembler le fichier Unreal.exe, hophophop! Pas du tout! Quand on démarre UNREAL sans CD la boîte de dialogue qui réclament le CD vient du fichier Window.dll.

    NdSmeita: de facon generale, quand vous trouvez rien d'interressant dans le fichier '.exe' et qu'il existe des Dlls qui accompagne le programme, il ne coute rien de desassembler ces Dlls, histoire de voir si c'est pas dedans que ca se passe :)

    -> Il faut donc désassembler le fichier window.dll. (après avoir fait une copie de sauvegarde...).
    -> Lancez une recherche sur la String Reference " Cd Required". On tombe alors sur cette partie:

     


    :10B1C3D5 A114B7B310     mov eax,dword ptr [10B3B414]
    :10B1C3DA 833800         cmp dword ptr [eax], 00000000    //Regarde si eax=0
    :10B1C3DD 75E3           jne 10B1C41D
    :10B1C3DF 8D8DE49FFFF    lea ecx, dword ptr[ebp+FFFFFF9E4]
    :10B1C3E5 51             puch ecx
    :10B1C3E6 FFD3           call ebx
    :10B1C3E8 83C404         add esp, 00000004
    :10B1C3EB 85C0           test eax, eax        //Test 
    :10B1C3ED 7F2E           jg 10B1C41D		//même saut qu'en 10B1C3DD...
    :10B1C3EF 680120000      push 00002001
    
    
    *Possible StringData Ref from Data Obj - >"Cd Required"
    :10B1C3f4 68089DB310        push 10B39D08
    
    
    *Possible StringData Ref from Data Obj - > "Please insert CD-Rom in drive"
    

     

    -> En 10B1C3DD on effectue un saut. On remarque qu'il atterit juste après le "ExitProcess" (donc juste après les messages d'erreur) ce qui signifie que la procédure de fermeture n'est pas prise en compte si le registre eax vaut 1.

      [Message Pifoman] En effet l'instruction cmp dans l'instruction cmp dword ptr [eax], 00000000 (comme dans toute instruction cmp) effectue le calcul [eax] - 00000000 en mettant l'indicateur ZF (Zero Flag) à 0 puisque la soustraction du contenu du registre EAX qui vaut 1 à 0 donne 1 (1-0=1). L'indicateur ZF est ensuite utilisé par le jne 10B1C41D. Si ZF=0 (ce qui est le cas ici) le jne (jump if not equal to zero) saute vers l'adresse qui suit le jne à savoir 10B1C41D.

    -> Il suffit de remplacer le 'jne' par un 'jmp', saut qui s'effectue quoi qu'il arrive ! (saut inconditionnel !!)

    -> C'est à ce moment là qui faut ouvrir window.dll avec votre éditeur hexadécimal préféré à savoir winhex.exe et de faire la modif' suivante ;-)). Faites CTRL ALT F dans winhex et

    Cherchez     -------> 75 E3 8D 8D
    Remplacez par  -->
    EB E3 8D 8D

     

    Conclusion:

    Les programmeurs de ce jeux sont pas cons du tout, car ils ont enfin compris qu'il était inutile de se faire ch??? en faisant des protection anti crack qui de toute façon se font largués les jours qui suivent.

    PS : pour ceux que ça interresse, la valeur hexadécimale A114B7B30 (qu'on peut retrouver à l'addresse 10B1C3D5) est en rapport avec le type de securité appelé Realloc@...

     


    votre commentaire
  • Mon objectif : craquer winRescue95 version 8.01

     

    1/ Les logiciels utiles pour ce cours

    -> Le programme à craquer     :  winRescue95
    -> Un désassembleur               :  W32dasm 8.93
    -> Un éditeur hexadécimal       :  Winhex 10.2

     

    2/ Les protections

    -> Limitation dans le temps (30 jours)
    -> Registration par code
    -> Certaines options bridées
    -> Un Nagscreen au lancement + 9 secondes d'attente (pas une protection c'est juste chiant)

     

    3/ Installation

    Commencez par installer Winrescue dans le répertoire de votre choix sur votre disque dur.
    Cela fait, au boulot !! (faut arrêter de glander de temps en temps...).

     

    4/ Relevé des messages d'erreurs

    On note d'abord les messages d'erreurs :
    On lance Rescue95 on mais un code au hasard, et là un message nous informe :
    "
    WARNING - Incorrect Key Entered".

    Sachant que le logiciel est limité dans le temps on change la date en 2002 et on relance le programme.
    Ainsi, lorsque l'on veut accéder à certaines options un message nous dit "
    Trial Period Expired".

    De plus certaines options sont en temps normal bridées cela nous donne un message du genre :
    "
    RegPack Disabled. Please register."

     

    5/ Désassemblage et craquage

    Voici la liste des actions que l'on va exécuter avant de commencer à craquer le logiciel :

    -> Faire une copie de Rescue95.exe et renommez la 1.exe.
    -> Lancez Wdasm32 et désassemblez Rescue95.exe dans w32dasm 8.93 .

    On constate qu'il n'y a pas de réference au menu (Menu Ref) ni aux boîtes de dialogues (DLG Ref). Par contre on constate qu'il y a quelque chose en "String Refs". On recherche donc dans la liste des "string data references" s'il n'y a rien qui pourrait nous intéresser. C'est cool ! On trouve tous les messages d'erreurs !! On pourrait s'amuser à enlever toutes les protections une après l'autre si on le voulait ... Mais autant essayer de s'enregistrer directement cela a le même effet.

    -> On clique donc dans la liste des "string data references" sur "WARNING - Incorrect Key Entered".
        Et cela nous donne quelque chose comme cela :

     

    -------------------------------------------------------------- Listing de désassemblage de Rescue95.exe -------------------------------------------------------------

     * Possible StringData Ref from Code Obj -> "msR3I8aUi9y2E84L"  (=> msR3I8aUi9y2E84L c'est le bon code)
     :004681BC    B89824600                mov eax, 00468290
     :004681C1    E8EEBDF9FF               call 00403FB4
     :004681C6    85C0                     test eax, eax
     :004681C8    7420                     je 004681EA  => si mauvaise réponse, aller à 004681EA
    
     * Possible StringData Ref from Code Obj -> "Registration Key Accepted"
     :004681CA    B8AC824600               mov eax, 004682AC
     :004681CF    E8104D4DFF               call 0043CEE4
     :004681D4    A1B0EA4700               mov eax, dword ptr [0047EAB0]
     :004681D9    8B00                     mov eax, dword ptr [eax]
     :004681DB    8B80F0010000             mov eax, dword ptr [eax+000001F0]
     :004681E1    C7400C64000000           mov eax, dword ptr [eax+0C], 00000064
     :004681E8    EB16                     jmp 00468200
    
     * Referenced by a (U)nconditional or (C)onditional Jump at Address :
     :004681C8 (C)  (=>le (C) veut dire que c'est un saut conditionnel en 004681C8 qui nous a amené ici)
    
     * Possible StringData Ref from Code Obj -> "WARNING - Incorrect Key Entered" 
    

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    -> Arrivé à "Registration Key Accepted" il faut enlever le "je " qui fait effectuer un saut jusqu'à "Warning Incorrect Key Entered".

    Pour cela on peut tout simplement enlever la ligne 004681C8 et remplacer 7420 par 9090
    Rappel : 90 = nop = No Operation

    Donc maintenant, quand le programme arrive à la ligne 004681C6 même si le code est mauvais il va directement sur "Registration Key Accepted " puisqu'il n'y a plus de saut conditionnel !

    -> On peut éditer maintenant 1.exe. On va à l'offset 675C8 (car cela correspond à la ligne 004681C8 ) et on remplace 7420 par 9090.

    -> On relance 1.exe, on entre n'importe quel code et BRAVO , RESCUE95 EST CRACKE !!!

     

    Winrescue98 a exactement le même schéma de protection, sauf que le serial n'est pas le même. Pour conclure on peut simplement dire que ce logiciel est vraiment super simple à cracker, et que la protection est vraiment simpliste puisqu'il n'y a même pas une vérification du code ...

     

    [interlude de Smeita...]
    Bon, la c'est vraiment le cas le plus simple qu'il existe !! Ya pas plus facile !!
    Disons que c'etait juste pour vous rememorer le principe de base :)

    Le prochain cours de cracking s'occupe de Unreal, le celebre Doom-Like ! Vous verrez que c'est aussi facile que WinRescue :) Notez que tout ces cours de cracking à partir de celui-ci ne sont pas la pour vous apprendre de nouveau truc, mais simplement vous montrer leur mise en pratique.... Inutile donc de vous etonnez et de trouver ca trop simple :) On le sait que c'est hyper simple !! Le plus dur reste a venir, et si on insiste sur les bases, c'est pour etre sur que dans le MemenTo 3 on puisse accelerer un peu plus.... Allez, si vous voulez un truc un tout petit peu plus "dur", (ou tout petit peu moins facile...) allez directement au cours de cracking n° 12. il s'agit de mIRC 5.5...
    [...Fin d'interlude...]

     

    6/ Supplément

    ------------------------------------------------ Listing de désassemblage de Rescue95.exe ( version 10.08.25 ) --------------------------------------------

    :004C3A84    E8A317F4FF               call 0040522C
    :004C3A89    85C0                     test eax, eax
    :004C3A8B    742D                     je 004C3ABA     => si mauvaise réponse, aller à 004681EA
    :004C3A8D    33D2                     xor edx, edx
    :004C3A8F    8B8304030000             mov eax, dword ptr [ebx+00000304]
    :004C3A95    E8CAB4F8FF               call 0044EF64
    
    * Possible StringData Ref from Code Obj ->"Registration Key Accepted"
    :004C3A9A    B82C3C4C00               mov eax, 004C3C2C
    :004C3A9F    E86CEDF7FF               call 00442810
    :004C3AA4    A1788B5200               mov eax, dword ptr [00528B78]
    :004C3AA9    8B00                     mov eax, dword ptr [eax]
    :004C3AAB    8B8020030000             mov eax, dword ptr [eax+00000320]
    :004C3AB1    C7400C64000000           mov [eax+0C], 00000064
    :004C3AB8    EB16                     jmp 004C3AD0
    
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:004C3A8B(C)
    
    * Possible StringData Ref from Code Obj ->"WARNING - Incorrect Key Entered"
    :004C3ABA    B86C3C4C00               mov eax, 004C3C6C
    

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

     -> Au dessus du message "Registration Key Accepted" on voit un je 004C3ABA .qui saute vers l'adresse 004C3ABA. Il faut donc annuler ce saut pour que le programme continue vers "Registration Key Accepted".

    Pour cela on peut tout simplement remplacer à l'adresse 004C3A8B le code hexadécimal 742D par 7400. Cela revient à remplacer l'instruction assembleur  je 004C3ABA par je 004C3A8D.Ici au lieu de nopper comme smeita l'avait fait dans l'exemple précédent on annule simplement le saut en sautant juste après l'instruction qui suit l'adresse 004C3A8B.

    Donc maintenant, quand le programme arrive à la ligne 004C3A8B même si le code est mauvais il continue vers "Registration Key Accepted" puisqu'il n'y a plus de saut conditionnel !

    -> On peut éditer maintenant 1.exe dans winhex.exe.On va à l'offset C2E8B (regardez la barre de statut de w32dasm quand vous sélectionnez la ligne d'adresse 004C3A8B là où il y a marqué @offset). Pour cela dans winhex.exe on fait ALT G -> C2E8B et on remplace 742D par 7400.

    -> On relance le 1.exe, on entre n'importe quel code par exmple pifoman/123456 et BRAVO , RESCUE95 EST CRACKE !!!


    votre commentaire
  • Mon objectif : savoir comment craquer avec un éditeur hexadécimal

     

    1/ Les logiciels utiles pour ce cours

    -> Le programme à craquer     :  1toX
    -> L'éditeur hexadécimal          :  Winhex 10.2

     

    2/ Le logiciel 1toX

    [interlude de Smeita...]
    Attention les amis !! J'avais deja essayé d'expliquer comment virer un nagscreen dans un éditeur hexadécimal mais c'était un peu flou, bourrin et moyennement efficace... Heureusement, Static Revenge est là pour amener sa touche de professionalisme à cette technique étonnante ;) Bon, en tous cas, si vous avez un peu de mal avec votre éditeur hexa, je vous invite a relire le [cour 4 - 'Comment faire sauter un nag ?']...
    [...Fin d'interlude...]

    Dans ce cours, nous allons voir un exemple extrèmement simple sur "comment cracker un prog rien qu' avec un editeur héxa":). Pour cela, vous aurez bien sur besoin de votre editeur héxa préfére et du prog 1toX

    Donc voilà, une fois 1ToX installé,il faut le démarrer (beu...ça peut servir) puis que voit-on, un '(non enregistré)'du plus mauvais effet... Ensuite, après avoir bien fait tourner le prog, vous verrez qu'il est bien pratique et puissant, mais dès que vous le quittez un nag très embêtant apparait. alors là c' est trop, il va falloir virer tout ça...

    Pour cela, rappellez-vous, un '(non enregistré)'est présent dans la barre de présentation. En premier lieu, nous allons nous occuper de lui. Alors voilà, avant tout

    -> faites une sauvegarde du fichier 1toX.exe

    -> ouvrez-le avec votre éditeur héxa.

    Bon, ok, ça parait bordélique, mais vous allez voir, c'est très simple.
    NB: pour pouvoir ecrire sur le fichier, il faut avoir quitter le prog.

    Avant de commencer, une p'tite intro-vite-fait sur l' héxadécimal s'impose:

    Heu...Bé en décimale on compte jusqu' à 15 comme ça => 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
    Et en héxa, on compte aussi jusqu'a 15, mais comme ça => 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f.

    Attention, on part sur une base de 0, ce qui fait un total de 16 adresses sur une ligne 32-bits, celles que vous verez avec n' importe quel éditeur héxadécimal :) (Smeita: Si vous comprenez pas, c'est pas important...)

     

     

    3/ Craquer 1toX : 1 ière méthode

     

    Virer le '(non enregistré)':

    Bon, une fois que tout est prêt.

    -> lancez une recherche en mode ASCII sur (non enregistré).Pour ce faire, recherchez le de cette façon (ca donne ça en general sous un editeur hexa...).(Smeita: Dans certains editeurs (HEdit par exemple), l'equivalent est une recherche en 'Text'...).

     

    <script type="text/javascript">document.write("")</script>

     

    Là, vous allez forcément tomber dessus et deux solutions s' offrent à vous pour l' éffacer:

    -> Celle du cracker bourrin (méthode moyenne) qui va remplacer tout ça en appuyent sur [Espace] (ndSmeita: un [espace] correspond au code ASCII '20'). Cela donne:

     

    <script type="text/javascript">document.write("")</script>

     

    -> Et celle du cracker qui y va tranquille et qui va faire ça bien proprement en plaçant un octect bien precis, ici 00. Cela donne:

     

    <script type="text/javascript">document.write("")</script>

     

    Si l'on doit mettre un 00, c' est parce qu' une fonction du programme va dire de lire le '(non enregistré)' d' une adresse à une autre, ici de ( ... à ... ) -->les parenthèses de mot 'non enregistré. Et c'est avec un simple 00 que l'on va faire comprendre au PC que le texte s'arrête juste après le X de 1toX. Et comme 00 n' est pas une instruction, il indique juste une zone dite vide qui ne sert à rien et que la machine va interpréter comme un stop sur le texte si l' on peut dire ainsi.

     

     

    Virer le nag-screen:

    Pour ce qui suit, laissez tomber 2 minutes WinDasm et les autres désassembleurs...

    Alors, pour virer un nag, il faut d' abord lire ce qu' il comporte et y chercher un mot qui y est utilisé parceque cela permet de repérer plus vite le coin intéressant. Sur ce nag, on peut voir ça:

    'Cette version est une version d' évaluation pleinement fonctionnelle.
    Vous pouvez tester 1toX pendant une duré de 30 jours.'

    Bon, prenez par exemple le mot 'pleinement' et lancez une recherche mais ce coup-ci en mode héxa décimal. Bé ça alors! On peut pas entrer ce mot dans la cellule de recherche! Normal, car rappelez vous, on compte en héxa. Il faut donc trouver ce mot en mode héxa. Pour ce faire, recherchez le de cette façon (ca donne ça en general sous un editeur hexa):

     

    <script type="text/javascript">document.write("")</script>

     

    Soit "pleinement" donne en héxa: 70 00 6C 00 65 00 69 00 6E 00 65 00 6D 00 65 00 6E 00 74
    NB: Inutile de tout entrer.

    Et là, nous avons de la "chance", car ce mot n'est present qu' une fois dans le prog.
    On peut à cet endroit reconnaître sans problème l' ensemble du message :)

    Alors bien sûr, comme un prog se lit et va être executé par la machine de haut-en-bas il faut remonter pour voir qu' est ce qui va faire que ce message va s' afficher. Nous pouvons voir qu'une certaine chaîne d'octects est presente de très près juste au dessus, la voici:

     

    <script type="text/javascript">document.write("")</script>

     

    Alors pourquoi cette chaîne? En fait, ça ne fonctionne pas tout le temps si l' on prend toujours la chaîne la plus proche du texte du nag. Parfois un telle chaîne peut se trouver bien plus haut avec des messages qui ne correspondent pas au nag, mais c' est assez rare. Il est vrai qu' il n' y à pas mal de chaînes de ce type dans ce prog mais c' est celle-ci qui va determiner si le nag va s' affiché ou non. Ici c' est grâce (et dans la plupart des cas) au 82.

    Dans ce cas, il faut remplacer 82 par 7E.

     

    <script type="text/javascript">document.write("")</script>

     

    Que veux dire 7E? Et bien cela vient du compilateur C++. Cette modif' n' a aucune signification en assembleur. De plus, il est très difficle de trouver une telle chaîne avec un désassembleur. Cette modification va donc virer le nag automatiquement. Le 7E (comme un 7C) montre d' après plusieurs experiences qu' il peut servir à aussi bien à virer entièrement des fenêtres que des boutons de commande ;))

    Vala, ce prog n'à été cracké rien qu' avec un editeur héxa.
    Cette méthode est valables pour pas mal de progs :)

     

     

    4/ Craquer 1toX : 2 ième méthode

     

    Ici, je prends en compte le fait que vous ayez deja lu la premiere méthode. Je vous ai montré la méthode precèdente en premier parce qu'elle fonctionne plus souvent que celle qui suit.

    Alors voila, là nous allons toujours utilisé un éditeur héxa. Pour virer le '(non enregistré)', c' est la même chose qu' au début du cours dans la rubrique Virer le (non enregistré). Pour le nag, c'est presque la même chose.

    Alors pour le virer, lancez un recherche sur en mode héxadecimal sur " 70 00 6C 00 65 00 69 00 6E 00 65 00 6D 00 65 00 6E 00 74 " qui correspond comme nous avons pus le voir au mot "pleinement".

    Une fois arrivé à cet endroit, juste un octect va nous intéresser.
    D'ailleur, il se trouve juste après la fameuse chaîne de la première méthode:

     

    <script type="text/javascript">document.write("")</script>

     

    Alors pourquoi cet octet? Car il correspond à la lettre "C" de la phrase "Cette version est une version d' évaluation..." (Smeita: pour ceux qu'on pas pas compris, c'est la premiere lettre de la phrase...)

    Souvenez vous, pour virer le (non enregistré), nous avions mis un 00 au début de la phrase, et bien là c' est la même chose, il faut remplacer le 43 par 00 :))

    Et oui, car le prog va croire qu' aucun texte n' est présent dans cette fenêtre alors il ne va pas l' afficher du tout, c' est t'y pas cool?

    Cette méthode fonctionne bien sur les progs programmés et compilés de façon simple sans reverse-engenering itout. (Smeita : enfin bref, ça fonctionne plutôt bien :)).

     


    1 commentaire
  •  

    Mon objectif : récupérer le serial de winzip 7.0

     

    1/ Les logiciels utiles pour ce cours

    -> Le programme à craquer     :  Start Clean v1.2
    -> Le débugger                           :   Winzip 7.0

     

    2/ Récupérer le serial

    Dans ce cours nous allons expliquer comment cracker Winzip 7.0, programme de compression très utilisé et quasi indispensable surtout sur le net. Nous allons utiliser dans ce cours la méthode qui permet de trouver un serial qui corresponde à notre nom.

    -> Lancez Winzip et tout de suite si vous avez une version shareware, un beau nag-screen s'affiche avec les boutons "Quit", "I Agree", "Ordering Info", "View Evaluation Licence" et "Enter Registration Code"... Il s'agit du dernier qui nous intéresse, quand vous cliquez dessus la boite de dialogue permettant de s'enregistrer s'affiche. Il y a deux champs , l'un pour le nom et l'autre pour le code.

    -> Mettez votre nom, pour moi ThE CrAzY SquirreL et un serial bidon, 12345 et cliquez sur OK et une boite de dialogue s'affiche avec le message 'Incomplete or incorrect information'. Donc le programme a comparé notre code par rapport au bon code et nous informe que 12345 n'est pas le bon code pour notre nom.

    Nous allons donc essayer de choper le bon serial en interrompant l'éxécution du programme lorsqu'il lit notre nom/serial. Pour cela il faut poser un breakpoint sous SoftIce, les deux fonctions les plus couramment utilisées dans la lecture d'un champs sont GetWindowTextA et GetDlgItemTextA.

    -> Donc allez sous SoftIce (à l'aide de Ctrl-D) tapez bpx GetDlgItemTextA puis bpx GetWindowTextA.
    -> Quittez SoftIce toujours avec Ctrl-D, et mettez un nom (ThE CrAzY SquirreL) et un serial bidon (12345).
    -> Ensuite appuyez sur Ok.

    Et là on se retrouve immédiatement sous SoftIce.

    -> Faites F12 pour sortir de la fonction pour voir si Winzip lit notre nom et effectivement on voit EAX=12.

    Mais qu'est que ca pourrais bien être ? Il faut savoir que les valeur des registres sont héxadécimales et non décimals, donc 12=18 en décimal... Et il se trouve que 18 est longueur de mon nom! Et la ligne sur laquelle nous emène SoftIce est PUSH EBX...
    Faites donc "
    d EBX" et dans la fenêtre Data on apercoit notre nom !

    -> Faites F12 pour que SoftIce continue son éxécution et lise notre serial (car pour l'instant, on est dans la routine qui lit la zone de saisie contenant notre nom...).

    Là, EAX=5 c'est à dire la longueur de notre code.Et la ligne sur laquelle on se trouve est PUSH ESI...Ainsi, comme précédemment, faites "d esi" et on voit notre serial bidon. 

    Et maintenant qu'est qu'on fait ?...On peut supposer que Winzip va générer le serial valide et le comparer au notre et s'il sont différents nous envoie la boite de dialogue 'Incomplete or ...'On peut donc supposer qu'il va comparer à un moment ou à un autre notre serial (12345) au bon...

    -> On va donc poser un bpm (arrêt sur une zone de la mémoire) sur 12345.Pour cela il nous faut l'adresse à laquelle se trouve le serial, donc quand Winzip lit notre serial et que vous faites d esi notez l'adresse à laquelle il se trouve. [Smeita: je rappelle que pour trouver l'adresse, il suffit de regarder sur la meme ligne que 12345, mais tout a gauche...(la ou il y a xxx:xxxxx sur mon beau dessin :))...].Dans mon cas, j'ai 47D958. La commande à taper est donc bpm 47D958 (notez que cette adresse n'est pas forcement la meme chez vous !!).

    -> Ensuite faites F5 (pareil que Ctrl+D...) pour que Winzip continue son éxécution jusqu'à ce qu'il éxécute notre bpm. Winzip fais plusieurs fois référence à cette zone de la mémoire, en effet il est entrain de créer le bon serial par rapport à notre nom.

    -> On fait plusieurs fois F5 (ou Ctrl+D...), cinq fois éxactement et là nous arrivons sur des lignes de code interressantes...:

     

    MOV AL, [ESI] => met ESI dans AL
    INC ESI
    MOV AH, [EDI] => met EDI dans AH
    INC EDI
    CMP AH,AL     => compare AL et AH...(c'est pour ca que c'est intéressant...)

     

    Faites d esi et vous on voit notre serial bidon dans la fenêtre des données.
    On peut donc supposer que EDI contient le bon serial, faites
    d edi et vous voyez A24A388C :))

    On peut constater que si on continue à faire F5 (ou Ctrl+D, c'est pareil...), on tombe de nouveau sur les mêmes lignes que précédemment mais que le serial est différent mais également valide. Peut être qu'il d'agit d'un sérial d'une version antérieur...(on obtient 21645132)

    Donc pour ThE CrAzY SquirreL le serial est A24A388C ou 21645132 !!

    -> Quittez SoftIce en enlevant d'abord les breakpoints (en faisant bc * puis F5) et rentrez les informations obtenues (c'est a dire le serial...) dans Winzip...

    Maintenant Winzip est enregistré !

     

    [interlude de Smeita...]
    Bon, vous avez vu ?? C'est pas si dur !! En plus, ce qu'est cool avec
    SoftIce, c'est qu'y a pas de modif' en hexa ! ;). Maintenant, entrainez vous un peu avec des sharewares a deux balles, et puis vous deviendrez vite un virtuose de SoftIce :))...Quand aux prochains cours (les 'Flash Tuts'), il vont reprendre notre bon vieux WinDASM, histoire de compléter vos connaissances...Il sera peut être plus difficile de les mettre en pratique, car vous ne disposerez pas des logiciels sous la main...mais bon, lisez les quand même, il finiront peut-être de vous eclaircir sur l'utilisation de WinDASm :)
    PS: Au fait, pour ceux qu'on toujours pas compris, Ctrl+D c'est pareil que F5 :)
    [...Fin d'interlude...]


    votre commentaire
  • Mon objectif : récupérer le serial de  startClean 1.2 avec softice

     

    1/ Les logiciels utiles pour ce cours

    -> Le programme à craquer     :  Start Clean v1.2
    -> Le débugger                           :   Softice 4.05

     

    2/ Les protections

    -> Registration par code
    -> Un Nagscreen au lancement

     

    3/ Récupérer le serial

    -> Commencez par installer Start Clean (et ouais ca aide si on veut le cracker non ? ).

    Vous allez voir que choper un serial pour StartClean est très, mais très facile... Mais cela constitue, tout de même, une bonne introduction à l'utilisation de SoftIce. Commencons...

    -> Lancez Start Clean
    -> Lorsque le nag apparaît, cliquez sur Register...
    -> Renseignez les champs : mettez votre nom (par exmple CrAzY SquirreL) et un serial bidon 12345.
    -> Appuyez sur Ok

    Une boite de dialogue apparait avec 'Incorrect code!'. Et oui, on ne chope pas un serial valable avec la chance, vous croyez quoi !

    -> Appuyez sur Ok dans la boîte de dialogue "Incorrect code!".
    -> Maintenant allez sous SoftIce en tapant CTRL D
    -> En bas de la fenêtre de Softice tapez dans la zone de saisie bpx Getdlgitemtexta (Smeita: cette commande de SoftIce permet de poser un point d'arret sur les "objets" de la fenêtre où vous rentrez le nom et le numéro de série.. . Comme ca, dès que StarClean va regarder ce que vous avez rentré comme serial, on va arriver dans SoftIce et on pourra suivre les opération pas-a-pas :)
    -> Sortez de SoftIce par CTRL D
    -> Appuyez sur OK.

    Voilà vous êtes sous SoftIce (Smeita: grâce au bpx !).Si ce n'est pas le cas enlevez le ; devant  EXP=\SystemRoot\System32\user32.dll dans le fichier de configuration de softice C:\WINDOWS\system32\drivers\winice.dat et redémarrez votre machine (cette action vous autorise à poser un point d'arrêt sur l'APi user32.dll qui contient la fonction Getdlgitemtexta).

    -> Faites ensuite F12 pour sortir du call (la fonction appelée) et revenir à la fonction appelante.
    -> Là, regardez dans la fenêtre des registres (tout en haut...), et plus spécialement là où il y a marqué "EAX".
    (Smeita: dans la fenêtre des registres, vous pouvez voir les valeur de tout les registres memoire à un instant donné. Tous les registres sont intéressant à observer. En fait, il est très utile de les regarder à chaque pas que l'on effectue sous SoftIce.C'est indispensable pour trouver un serial...Et n'oubliez pas que les registres sont en hexadécimal !!).

    La valeur de EAX est de 0000000E. Tiens, bizarre ca ne serait pas la longueur de notre nom ? Et oui 0E en décimal ca donne 14 (y'a 14 lettre dans CrAzY SquirreL !!). Si vous voulez convertir une valeur hexadécimale en décimale tapez ? valeur_hexa ou ? nom_du_registre.

     

    [interlude de Smeita / Pifoman]
    La fenêtre des données est la partie de SoftIce où il y a des trucs du style de ce qu'on peut voir dans un editeur hexadecimal et d nom_du_registre affiche les infos contenu a l'adresse du registre. C'est souvent grâce a cette commande qu'on peut trouver un serial.)

    La zone de saisie que l'on trace pour l'instant semble être celui où l'on a rentré notre nom. En effet, chaque zone de saisie est traitée l'une apres l'autre. De façon générale, l'ordre dans lequel elles sont traitées coïncide souvent avec l'ordre qu'elles ont dans la fenêtre de haut en bas. Par exemple, dans StarClean, on a d'abord le nom et ensuite le code. Donc il est fort probable que l'on attérisse d'abord sur la première zone (le nom) puis sur la seconde (le serial). Je rappelle que bpx getdlgitemtexta permet d'arriver sur SoftIce dès que StartClean appelle une zone de saisie en particulier dès que le fonction GetDlgItemTextA est invoquée par le programme.
    [Fin de l'interlude]

     

    Tout le reste du cours du cours je l'ai complètement réécrit moi pifoman.Il y a avait plein de lignes de code qui ne correspondait pas à la réalité du code affiché dans softice.En plus certaines parties paraissaient assez flou voire enigmatiques au niveau des explications.

     

    -> On fait F5 pour continuer l'exécution du programme. Aussitôt Softice resurgit. StartClean traite cette fois-ci le serial que l'on a entré tout à l'heure dans la 2ième zone de texte de la boîte d'enregistrement.On relève en effet dans softice la valeur du registre EAX qui vaut cette fois-ci 00000005.Le code 05 doit vous faire penser à la longueur du serial entré qui est je le rappelle est 12345. Voici le code assembleur que vous voyez à ce moment là dans softice :

    001B:004011C5          FFD6                           call       esi
    001B:004011C7          6830604000              push    00406030
    001B:004011CC         6830614000              push    00406130

     

    Si on fait d 00406030 dans la fenêtre de saisie de Softice on voit apparaître le bon serial dans la zone de données de softice(en haut en dessous de la 1ière ligne verte). Il vaut 2730-26346-1673-333. Si vous faites d 00406130 vous voyez apparaître dans cette même zone de données le nom entré initialement à savoir CrAzY SquirreL.Plus précisément l'adresse 00406130 contient le C de CrAzY SquirreL, 00406131 contient le r de CrAzY SquirreL et ainsi de suite jusqu'à la fin du nom.Voici le contenu de la zone de données une fois tapé la commande d 00406030 (suivi de entrée)

     0023:0040630        32 37 33 30 2D 32 36 33 - 34 36 2D 31 36 37 33 2D       2730-26346-1673-
     0023:0040640        33 33 33 30 00 00  00 00 - 00 00 00 00 00 00 00 00        333 . . . . . . . . . . . . .

     

    [interlude de Pifoman]
    Il y en a qui doivent se dire "Comment on sait qu'il faut faire d 00406030 ou autre chose ?". Bon, dans ce genre de cas, après avoir appuyé sur F12, on arrive sur une instruction du style push adresse. Il suffit alors de faire d adresse avec adresse qui vaut dans notre exemple 00406030 ou bien 00406130.

    Certains doivent aussi se demander ce que signifie les couleurs employées.
    -> Le bleu ciel désigne une adresse.
    -> Le rouge du code hexadécimal.
    -> Le jaune désigne du texte
    -> Le orange désigne du code assembleur
    [Fin d'interlude]

     

    Bon a trouvé le serial.C'est ce q'uon voulait.On peut aller plus loin et analyser l'endroit où craquer le programme.

    On va poser un bpm ( breakpoint on memory access <=> un point d'arrêt sur une zone de la mémoire) sur l'adresse 00406030 (qui contient le vrai serial).Comme ça dès que le programme va comparer notre serial au bon on pourra essayer de voir comment il fait pour savoir s'il doit s'enregistrer ou non.Mais pour poser un bpm il faut une adresse (l'instruction bpm prend pour paramètre une adresse <=> bpm adresse. Onn prend donc l'adresse qui contient 2730-26346-1673-333 à savoir 00406030.

    Attention : l'adresse n'est pas la même tout le temps, ne vous étonnez pas si c'est different chez vous.

    -> On tape donc bpm 406030 (c'est pareil que bpm 00406030)
    -> On fait F5 ou CTRL D (pour laisser le programme continuer son éxécution).
    -> Sitôt sorti de SoftIce on y retourne, et on voit alors qu'on est dans user32!wvsprintfA (pas intéressant).
    -> On refait 5 fois F5 ou CTRL D.A chaque fois on tombe dans Kernel32!lstrcatA (pas intéressant).
    -> Si on refait une fois F5 on tombe dans Kernel32!CompareStringA (regardez la 2 ième ligne verte en partant du bas dans Softice).
    -> Comme la fonction compareStringA est généralement impliquée dans la comparaison de chaînes on fait F12 4 fois pour arriver dans Start Clean.

    A ce moment là vous avez le code suivant dans softice.Le cuseur d'exécution est alors positionné sur la prochaine instruction à exécuter qui se trouve à l'adresse 004011E9.

    :004011DD         50                                    push eax                                   => met le contenut de EAX = 12345 sur la pile
    :004011DE         6830604000                  push 00406030                      => met l'adresse de 2730-26346-1673-333 sur la pile 
    :004011E3          FF1520924000             Call KERNEL32!lstrcmp       => appelle la fonction de comparaison lstrcmp
    :004011E9          85C0                               test eax, eax                             => eax = 00000001 (12345 != 2730-26346-1673-333)
    :004011EB          0F8580000000             jne 00401271                         => comme les 2 serials sont différents saut 00401271

    Sur la ligne d'adresse 004011E9 si vous faites F10 pour exécuter cette ligne vous arrivez sur l'adresse 004011EB.

    -> Tapez r fl z (reverse flag zero) suivi de entrée pour inverser (ici annuler) le saut en 004011EB et faire croire à StartClean que les 2 chaînes 12345 et 2730-26346-1673-333 sont identiques.
    -> Tapez bc* (breakpoint clear) pour effacer tous les breakpoints posés.
    -> F5 pour repasser sous windows.

    Bravo ! StartClean est une nouvelle fois cracké !

     

    [interlude de Smeita...]

    Bon, maintenant, je crois qu'on a suffisament cracké StartClean :)) Les prochains cours ne s'attaqueront plus à ce logiciel en particulier :) Par exemple, dans le cours qui suit, vous allez apprendre a choper un serial pour Winzip 7.0 ! Comme ca, au moins, vous pourrez flamber devant les copains ;)


    [Fin d'interlude]

    votre commentaire