• STATISTIQUES
  • Il y a eu un total de 1 membres et 15823 visiteurs sur le site dans les dernières 24h pour un total de 15 824 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 831
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster
    [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [FR] Kalkulators
    Ce projet a plusieurs buts, le premier étant l’étude de toutes formes cryptographiques, le cot&ea...
    Cryptographie
    [FR] PHP France
    Pour tout savoir sur le PHP, en français. Vous trouverez des tutoriels, des exemples, des astuces, toute la do...
    Hacking
    [EN] Rankk
    Site de challenge construit sur le principe d'une pyramide à 9 level. Level 1: 60,Level 2: 72,Level 3: 68,Lev...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Résolution Synok's CrackMe 2 in 1

Cette résolution est assez facile. En terme de difficulté, elle peut être placée entre les tutoriels de ArK et mes 2 précédentes résolution.


La différence majeure avec les 2 résolutions précédentes, c'est que celui-ci est codé en C++ et le password est donné dans un fichier.

Caractéristiques du crackme:

Lien du crackme: http://crackmes.de/users/synok/crackme_2_in_1/
Difficulty: 2 - Needs a little brain (or luck)
Platform: Windows
Language: C/C++

Résolution


Nous exécutons le programme, nous avons le message suivant:
Code :
License function not patched

Donc nous en déduisons qu'une fonction doit être modifiée. Tongue

Nous ouvrons ollyDBG, et nous faisons clic droit > Search for > All referenced text strings.
Ensuite clic droit sur ASCII "License function not patched"

Nous arrivons ici:
[Image: synok_1.png]

Après analyse, nous voyons le jnz en 001B10DA, il suffit de le changer en JE ou JMP pour patcher la fonction.

Pour ma part j'ai enregistré la modification pour simplifier l'analyse. Wink

Nous exécutons le programme avec la modification, il nous demande un login, ensuite il nous met (pour le name "maurice"):
Code :
1217117664License invalid!

Curieusement, il nous indique un numéro qui est la licence valide (Erreur de codage Huh )

Maintenant tout ce passe ici :
[Image: Synok_2.png]

D'abord, une boucle est présente, elle ne sert pas à grand chose, juste elle prend la longueur du pseudo est la multiplie par 0x29a. Cool

Code :
001B11AB  |. 69F6 9A020000  IMUL ESI,ESI,29A                         ;  on multiplie la valeur esi par 29a (qui est la lg multiplié par 29a)
001B11B1  |. 8D8D C0FEFFFF  LEA ECX,DWORD PTR SS:[EBP-140]
001B11B7  |. E8 34010000    CALL CrackMe2.001B12F0
001B11BC  |. 0FAFF0         IMUL ESI,EAX                             ;  esi multiplié par l du pseudo dans esi
001B11BF  |. 6BF6 1C        IMUL ESI,ESI,1C                          ;  esi multiplié par 1c
001B11C2  |. D1E6           SHL ESI,1                                ;  esi << 1


Avec la ligne IMUL ESI,ESI,29A, on multiplie la longueur du pseudo par 0x29a qui a dejà auparavent été multiplié par 0x29a.
Pour résumé: longueur du pseudo * 0x29a * 0x29a.

Ensuite on multiplié la valeur acquise par la longueur du pseudo (IMUL ESI,EAX). Puis on multiplie le tout par 0x1C (IMUL ESI,ESI,1C).

Pour finir on décale de un bit vers la gauche (SHL ESI,1).

Et voilà, la valeur décimale de ce résultat est la licence valide. Elle doit être mis dans le fichier licence.dat sous forme décimale.

Voici le keygen:

Code PHP :
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    
unsigned char login[20] ;
    
int lg_login licence;

    
printf("Name : ") ;
    
scanf("%s"login);
lg_login strlen(login);


licence lg_login 0x29a ;
licence licence 0x29a ;
licence lg_login licence ;
licence licence 0x1c ;
licence licence << ;
printf("La licence est : %d" ,licence);


17-10-2013, 19h34
Message : #1
MLT Hors ligne
MauriceLeTendu
*



Messages : 40
Sujets : 10
Points: 26
Inscription : Dec 2012
RE: Résolution Synok's CrackMe 2 in 1
J'ai oublié une phrase sur le tut, comme je ne peux pas éditer le message, je fais ma correction ici.

Après le screen 2, il y a un code copié. C'est ce code qui calcule la licence. Ce code est situé juste en dessous de la boucle qui calcule la longueur du pseudo.

Voilà
18-10-2013, 17h55
Message : #2
Horgh Hors ligne
Membre actif
*



Messages : 197
Sujets : 4
Points: 91
Inscription : Mar 2012
RE: Résolution Synok's CrackMe 2 in 1
Citation :Après analyse, nous voyons le jnz en 001B10DA, il suffit de le changer en JE ou JMP pour patcher la fonction.
C'est mal d'inverser les sauts, à chaque fois que quelqu'un fait ça un bébé phoque meurt poignardé sur la banquise.
18-10-2013, 18h01
Message : #3
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: Résolution Synok's CrackMe 2 in 1
Citation :à chaque fois que quelqu'un fait ça un bébé phoque meurt poignardé

c'était une erreur de donner des couverts aux pingouins, aujourd'hui on s'étonne que les ours aient des couteaux mais on sait pertinemment d'où viennent les armes...
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
18-10-2013, 19h45
Message : #4
MLT Hors ligne
MauriceLeTendu
*



Messages : 40
Sujets : 10
Points: 26
Inscription : Dec 2012
RE: Résolution Synok's CrackMe 2 in 1
Citation :C'est mal d'inverser les sauts

Qu'est ce que peut faire de mieux pour sauver les pingouins ? Undecided
18-10-2013, 20h12
Message : #5
Loup Hors ligne
Membre actif
*



Messages : 85
Sujets : 8
Points: 8
Inscription : Sep 2013
RE: Résolution Synok's CrackMe 2 in 1
@MLT

On leur balance 90 gilets de protections pour empêcher les vilain ours de les poignardés!
18-10-2013, 21h40
Message : #6
MLT Hors ligne
MauriceLeTendu
*



Messages : 40
Sujets : 10
Points: 26
Inscription : Dec 2012
RE: Résolution Synok's CrackMe 2 in 1
C'est à dire ? je peux pas le noper le saut ici.
18-10-2013, 22h23
Message : #7
Loup Hors ligne
Membre actif
*



Messages : 85
Sujets : 8
Points: 8
Inscription : Sep 2013
RE: Résolution Synok's CrackMe 2 in 1
Ah bah donc:
Citation :Qu'est ce que peut faire de mieux pour sauver les pingouins ?
Big Grin
18-10-2013, 22h26
Message : #8
MLT Hors ligne
MauriceLeTendu
*



Messages : 40
Sujets : 10
Points: 26
Inscription : Dec 2012
RE: Résolution Synok's CrackMe 2 in 1
tu parle de 90 donc j'ai traduit sa par "nop le saut" puisque 90 = nop :/
18-10-2013, 22h36
Message : #9
Loup Hors ligne
Membre actif
*



Messages : 85
Sujets : 8
Points: 8
Inscription : Sep 2013
RE: Résolution Synok's CrackMe 2 in 1
J'ai fait exprès! mais vu que "soit-disant" tu ne peux pas nopper:
Citation :Qu'est ce que peut faire de mieux pour sauver les pingouins ?

Mise à part, j'aime bien ta petite série de tuts, j'espère que tu vas continuer? Smile
Mais augmente un petit peu le niveau car là c'est plus de la révision, enfin pour bcp sur ce forum je pense?

En tout cas Merci,

Kis.. euh ciao!
18-10-2013, 23h26
Message : #10
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: Résolution Synok's CrackMe 2 in 1
@MLT, plutôt que d'inverser un saut, fait en sorte qu'il soit TOUJOURS pris.
donc en fonction du jump que c'est, soit tu nop, soit tu jmp.