[Résolu] Challenge CrackMe en dotnet

Vous avez un problème pour cracker ou vous souhaitez parler de reversing en général...

[Résolu] Challenge CrackMe en dotnet

Messagepar Akiro » 05 Octobre 2015, 16:26

Bonjour,

Je suis tombé par hasard sur ce site hxxp://www.leblogduhacker.fr/, je reconnais que le titre est un peu "m'as-tu-vu".

Peu importe, il y a une section challenge ici --> hxxp://www.leblogduhacker.fr/challenges ... hKNHFOKbyk et j'ai donc pris le premier CrackMe.

J'ai checké avec ProtectionID (malgré les deux indices) :

Image

Donc, bien compilé en .NET.

Je suis passé par Reflector pour décompiler le CrackMe et après quelques minutes de recherches je suis tombé sur ceci :

Image

Jusque-là, ça va plus ou moins.

On remarque que le vrai mot de passe est encodé en base 64 :

Code: Tout sélectionner
  If (Convert.ToBase64String(encoding.GetBytes(s)) = "TG0wVnZUQmQ3bndWdlRCVU15MGl2NEJSOG5OVjZ6NWdNS05rNno1ZzhtVmQ4c2hW") Then
            Interaction.MsgBox("Vous êtes bien loggué, bienvenue", MsgBoxStyle.ApplicationModal, Nothing)


Mais il y a aussi ceci juste avant :

Code: Tout sélectionner
 Dim s As String = Me.ESAB46_Encode(Me.TextBox2.Text)


Si je clique sur la ligne ci-dessus, j'arrive ici :

Image

Et une autre fonction qui s'appelle elle "ESAB64.Decode" :

Image

Et depuis là, je ne comprends plus rien. Il me reste qu'à décoder le vrai mot de passe, mais je ne sais pas du tout comment procéder...

Avez-vous un indice pour me permettre d'avancer ?

Merci d'avance et bonne fin de journée !

Cordialement,
Akiro.
Dernière édition par Akiro le 06 Octobre 2015, 09:25, édité 1 fois.
Avatar de l’utilisateur
Akiro
Visiteur
Visiteur
 
Messages: 19
Inscription: 29 Novembre 2014, 22:27

Re: Challenge CrackMe en dotnet

Messagepar warsoft » 05 Octobre 2015, 18:54

Donc, si je ne me trompe pas, tu décode le base64 et le résultat est en ESAB46 que tu dois décoder aussi, mais ce mot de passe est simple.

;)
warsoft
Elève
Elève
 
Messages: 42
Inscription: 18 Novembre 2007, 10:26

Re: Challenge CrackMe en dotnet

Messagepar dionosis » 05 Octobre 2015, 19:54

Salut Akiro,

Comme je ne suis pas certain d'avoir compris à quel stade tu bloques je vais essayer de t'expliquer le cheminement.

L'opération de vérification est la suivante :
A = ESAB46_Encode(nom)
B = BASE64_Decode("TG0wVnZUQmQ3bndWdlRCVU15MGl2NEJSOG5OVjZ6NWdNS05rNno1ZzhtVmQ4c2hW")
Ensuite si A == B alors gooboy.

Donc déjà tu sais que A == B soit "Lm0VvTBd7nwVvTBUMy0iv4BR8nNV6z5gMKNk6z5g8mVd8shV".
Or A == ESAB46_Encode(nom), il ne te reste donc qu'à faire un ESAB46_Decode(A) pour retrouver 'nom'.

En jetant un oeil aux fonctions ESAB46_X(), tu dois reprérer trois choses :
- Les décalages correspondent à ceux d'une base64
- L'alphabet contient 64+1 caractères
- ESAB46 c'est BASE64 dans le désordre

Ce qu'il faut en conclure c'est que ESAB46 n'est qu'une BASE64 avec un alphabet custom :
"ABCDqrs456tuvNOPwxyz012KLM3789=+QRSTUVWXYZabcdefghijklmnopEFGHIJ/"
contre habituellement
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

Ne te reste donc qu'à employer le code déjà gentiment laissé par l'auteur, ou bien à décoder cette base64 custom par tes propres moyens.

++
Dernière édition par dionosis le 06 Octobre 2015, 08:22, édité 1 fois.
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: Challenge CrackMe en dotnet

Messagepar Akiro » 06 Octobre 2015, 00:11

Hello,

dionosis a écrit:Salut Akiro,

Comme je ne suis pas certain d'avoir compris à quel stade tu bloques je vais essayer de t'expliquer le cheminement.

L'opération de vérification est la suivante :
A = ESAB46_Encode(nom)
B = BASE64_Decode("TG0wVnZUQmQ3bndWdlRCVU15MGl2NEJSOG5OVjZ6NWdNS05rNno1ZzhtVmQ4c2hW")
Ensuite si A == B alors gooboy.

Donc déjà tu sais que A == B soit "Lm0VvTBd7nwVvTBUMy0iv4BR8nNV6z5gMKNk6z5g8mVd8shV".
Or A == ESAB46_Encode(nom), il ne te reste donc qu'à faire un ESAB46_Decode(A) pour retrouver 'nom'.

En jetant un oeil aux fonctions ESAB46_X(), tu dois reprérer trois choses :
- Les décalages correspondent à ceux d'une base64
- L'alphabet contient 64+1 caractères
- ESAB46 c'est BASE64 dans le désordre

Ce qu'il faut en conclure c'est que ESAB46 n'est qu'une BASE64 avec un alphabet custom :
"ABCDqrs456tuvNOPwxyz012KLM3789=+QRSTUVWXYZabcdefghijklmnopEFGHIJ/"
contre habituellement
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

Ne te reste donc qu'à employer le code déjà gentiment laisser par l'auteur, ou bien à décoder cette base64 custom par tes propres moyens.

++


Merci de m'avoir éclairci sur le fonctionnement de l'encodage.

Par contre, comment je peux utiliser le code décodage laissé par l'auteur ? Je dois juste comprendre le code et décoder manuellement ? Ou il y a un moyen de faire un script en recopiant ?

Je ne connais pas grand chose en .NET.... ;)

Merci de votre aide et bonne soirée/nuit.

Akiro.
Avatar de l’utilisateur
Akiro
Visiteur
Visiteur
 
Messages: 19
Inscription: 29 Novembre 2014, 22:27

Re: Challenge CrackMe en dotnet

Messagepar dionosis » 06 Octobre 2015, 08:25

Salut,

La base64 est un grand grand classique dont tu trouveras des implémentations dans à peu près tous les langages, y compris celui que tu affectionnes.
Fais juste attention à employer une source standard qui uilise un alphabet que tu prendras soin de remplacer par celui de ton problème.

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: Challenge CrackMe en dotnet

Messagepar Akiro » 06 Octobre 2015, 09:24

Hello,

Comme toujours, j'ai été très idiot.

J'ai trouvé mon bonheur sur le site avec SND Reverse Tool où j'ai pu faire le décodage nécessaire... :arf:

Merci @dionosis pour ton aide. :)

C'est parti pour un autre !

P-S : @warsoft : Je comprends toute l'étendu de ta phrase maintenant. Merci pour le fou rire. :lol:

Akiro.
Avatar de l’utilisateur
Akiro
Visiteur
Visiteur
 
Messages: 19
Inscription: 29 Novembre 2014, 22:27

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar dionosis » 06 Octobre 2015, 11:48

Salut,

Akiro a écrit:Merci @dionosis pour ton aide. :)

Content d'avoir pu t'orienter. :D

J'espère que tu as compris ce que tu as fait parce que, sans mauvais jeu de mot, c'est vraiment la base.
Mon conseil si tu veux progresser c'est de vraiment désosser tous les challenges reverse que tu feras. La plupart ont vocation à être didactiques (nb: ceux de ton site spécifiquement je ne sais pas) et il est important de se demander systématiquement si le concept qui y était exposé a été assimilé ou tout du moins bien compris.

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar Akiro » 07 Octobre 2015, 13:04

Hello,

Au niveau des étapes que j'ai effectué, si c'est de cela que tu parles, j'ai totalement compris ce que j'ai fait et pourquoi je l'ai fait.

Après, je suis resté bloqué justement sur le décodage du mot de passe crypté car je ne savais pas comment faire, mais à présent j'ai bien compris cette étape. :)

Donc, je peux dire que oui, j'ai bien assimilé le concept de ce challenge. :mrgreen:

Akiro.
Avatar de l’utilisateur
Akiro
Visiteur
Visiteur
 
Messages: 19
Inscription: 29 Novembre 2014, 22:27

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar dionosis » 08 Octobre 2015, 12:08

Salut Akiro,

Ok super :)
Bon courage pour la suite alors !

++
Avatar de l’utilisateur
dionosis
Maître des ténèbres
Maître des ténèbres
 
Messages: 507
Inscription: 09 Octobre 2009, 21:43

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar Todd » 11 Octobre 2015, 22:35

Salut,

J'aurais tendance à dire qu'il suffit de faire :
Code: Tout sélectionner
MotDePasse = ESAB64.Decode("TG0wVnZUQmQ3bndWdlRCVU15MGl2NEJSOG5OVjZ6NWdNS05rNno1ZzhtVmQ4c2hW")

Pour récupérer le mot de passe. :wink:

Il a bien fallu encoder cette chaine de caractères et j'ai l'impression qu'ils ont laissé leur fonction dans le programme. :?

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar Gastounu » 31 Octobre 2017, 17:39

J'avais exactement la même question, et effectivement avec sdn reverser tool, une fois compris son fonctionnement, c'est très simple à décoder. Mais il semble que le post est éculé (2009) j'ai encore un paquet de chemin à faire :roll:
Gastounu
 
Messages: 2
Inscription: 31 Octobre 2017, 17:20

Re: [Résolu] Challenge CrackMe en dotnet

Messagepar etherlord » 02 Novembre 2017, 09:38

Il faut pas négliger l'histoire dans le reverse-engineering, les devs qui implémentent des protections font malheureusement souvent l'erreur de négliger l'historique, et de fait on se retrouve des fois avec des vulnérabilités qui existaient il y q 20 ans, ont étés corrigées, et reviennent dans les nouveaux codes, sans parler des erreurs d'implémentations.

C'est de l'expérience plus utile qu'il n'y paraît au premier abord.

etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2547
Inscription: 22 Mars 2004, 16:12


Retourner vers Reversing

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 9 invités