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


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


  • ANNUAIRE
  • [EN] social-engineer
    Site dédié au Social Engineering en général.
    Hacking
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [EN] wechall
    Pour les gens n'étant pas familiers avec les sites de challenges, un site de challenges est un site propos...
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [FR] Zmaster
    Articles sur l'informatique, le hacking, le P2P, les divx, les astuces windows XP, les GSM, Emule, la cryptograph...
    Hacking

  • 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!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Résolution greedy_fly keygenme_v1.6
29-08-2013, 22h14 (Modification du message : 29-08-2013, 22h17 par MLT.)
Message : #1
MLT Hors ligne
MauriceLeTendu
*



Messages : 40
Sujets : 10
Points: 26
Inscription : Dec 2012
Résolution greedy_fly keygenme_v1.6
(Apparemment j'ai pas les droits pour poster dans la section appropriée, donc libre à vous de déplacer le topic.... et me donner les droits pour une éventuelle prochaine fois) Angel

Kengenme: téléchargable ici http://crackmes.de/users/greedy_fly/keygenme_v1.6/

Difficulté: très facile Wink

Tous d'abord on remarque le même schéma qui revient GetDlgItem puis SendMessageA.

On breakpoint sur les GetDlgItem >> ctrl+n >> clic droit sur GetDlgItem puis clique sur "Set Breakpoint on every reference".

Voici la table des breakpoints:
[Image: gredidi_1.png]

On lance l'exécution avec F9. Rien d'intéressant n'est observé sur le 1er breakpoint, on l'enlève ainsi que celui sur le JMP. Huh

On relance, le kengenme demande un serial, pour une lecture plus facile nous mettons aaaaaa - bbbbbb - cccccc - dddddd

On avance pas à pas avec la touche F8

[Image: gredidi_2.png]

Quand nous arrivons en 00401272, on remarque l'apparition de cccccc dans la Fenêtre mémoire ( en bas à gauche).

Ensuite nous voyons un Call en 00401274, nous entrons dans ce call avec F7:

Code :
004014A9              INC EBX     ; EBX longueur du 3eme champ
004014AA          SHL EBX,4          ; ebx = ebx <<4
004014AD   MOV ESI,40      ; esi = 40
004014B2 LEA EDI,DWORD PTR DS:[EBX+ESI] ; edi = ebx + esi ;
004014B5   IMUL EBX,EDI,182 ; ebx = edi * 182
004014BB  XOR ESI,ESI  ; esi = 0
004014BD  XCHG EBX,ESI   ; esi = ebx
004014BF  SUB EBX,EBX   ebx = 0
004014C1   RETN

Quand on sort du call, on compare le résultat (esi) avec 0x10960.

En fait le call vérifie que le longueur du 3eme champ est égale à 6 ( comparaison en 00401279)

Si la longueur est 6 alors le résultat de l'algo sera égale à 0x10960

Voici l'équivalent en C:
Code :
int longueur()
{
    int ebx = 0x6 , edi = 0x0, esi = 0x40;
ebx = ebx + 0x1;
    ebx = ebx << 0x4 ;
    //printf("%x" , ebx);
    edi = ebx + esi ;
    printf("edi int : %x\n", edi);
    ebx = edi * 0x182 ;
    printf("ebx int : %x\n" , ebx);
    esi = 0 ;
    esi = ebx;
    ebx = 0;
printf("ebx : %x\n" , ebx);
printf("edi : %x\n", edi);
printf("esi : %x\n", esi);

Bon nous passons puisque notre champ3 "cccccc" a une longueur de 6. Shy

Ensuite en 004012AE ( voir screen 2), on teste la longueur de notre champ1, qui s'est affiché dans notre fenêtre de mémoire. Nous passons car égale à 6.

En xxxxx, nous entrons dans un call qui mène à une boucle:
[Image: gredidi_3.png]

En fait, j'ai mis pas mal de temps à comprendre que cet algo, convertis la valeur décimale de notre champ4 en valeur hexa.

Voici l'équivalent en C:
Code :
int main()
{
char chaine[6] = "123456";
for (count = 0 ; count != 6 ; count++)
  {
       valeur = chaine[count];
printf("valeur : %x", valeur);
     valeur = valeur - 0x30 ;
     printf(": %x\n", valeur);
     total = total + total * 0x4 ;
       printf("total: %x :", total);
      total = valeur + total *0x2 ;
        printf("total: %x :", total);
      printf("total: %x\n", total);
  }

   return 0;

}

en 004012F0, nous voyons qu'il compare le résultat avec 0x7A1E8. Si on est inférieur on passe sinon c'est le programme s'arrête. Avec nos lettres on ne passe pas. Nous mettons 123456 à la place de nos dddddd.

Nous passons, nous arrivons ensuite en 004012FC
Code :
004012FC CMP BYTE PTR DS:[4030A3],32

Il faut que notre 4ème caractère du 4ème champ soit égale à 0x32 soit 2.
2 lignes plus loin en 0040130A, nous voyons que notre 6eme caractère de notre 4eme champ doit être égale à 0x30 soit 0.

Ensuite:
[Image: gredidi_4.png]

De 00401377 à 0040138F, le code teste nos caractères pour savoir si sont compris entre 0x30 et 0x39, autrement il faut que se soit des chiffres.

Ensuite en 0040139F, on compare le 2eme caractère du 1er champ avec 0x39 soit 9.
Ensuite en 004013AD, on compare le 5eme caractère du 1er champ avec 0x37 soit 7.
Ensuite en 004013BB, on compare le 1eme caractère du 2er champ avec 0x38 soit 8.

(J'ai galéré pour savoir à quoi correspondait les tests, je me suis aidé de la fenêtre mémoire mais si quelqu'un a une idée plus rapide...).

Ensuite en 004013CD, le 1er champ est passé dans l'algo de "conversion hexa", puis la valeur de sortie est comparé à 0x7A057.

En 004013DB, le résulat de l'algo pour le 1er champ est passé mis dans esi.
En 004013E2, le 4eme champ est re-passé dans l'algo de conversion et le résultat est mis dans edi en 004013E7.

Les résultats du champ1 et du champ 4 soit additionné en 004013E9 et le résultat est mis dans esi.

Ensuite en 0040F0, nous voyons que le champ3 est passé aussi dans l'algo de conversion et son résultat est comparé à esi et donc à la somme (champ1 + champ4).

C'est fini

Les conditions sont donc:
- Le sérial doit être constitué de nombre
- Il doit être sous forme : x9x7xX-8XXXXX-XXXXXX-XXX2X0
- Le champ 4 doit avoir une valeur inférieure à 0x7A1E8 soit 500200 en décimal
- Le champ 1 doit avoir une valeur inférieure à 0x7A057 soit 499799 en décimal.
- Et champ1 + champ4 = champ3

Mon kengen en pièce jointe et merci à poupou9779 du site du zero pour sa fonction "changerrang" Angel


Pièces jointes
.txt   kengen.txt (Taille : 1.76 Ko / Téléchargements : 9)
+1 (4) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Résolution Synok's CrackMe 2 in 1 MLT 10 3,011 18-10-2013, 23h26
Dernier message: Ark
  Résolution LaFarges crackme #2 MLT 0 741 28-09-2013, 14h23
Dernier message: MLT

Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut