Dans cet article, les 5 premières tâches, nous apprendrons les bases du démontage, résoudrons les problèmes du niveau inverse initial et décompilerons également l'application dotNet.
Information organisationnelleSurtout pour ceux qui veulent apprendre quelque chose de nouveau et se développer dans l'un des domaines de l'information et de la sécurité informatique, j'écrirai et parlerai des catégories suivantes:
- PWN;
- cryptographie (Crypto);
- technologies de réseau (réseau);
- reverse (Reverse Engineering);
- stéganographie (Stegano);
- recherche et exploitation des vulnérabilités WEB.
En plus de cela, je partagerai mon expérience en criminalistique informatique, analyse de logiciels malveillants et micrologiciels, attaques sur les réseaux sans fil et réseaux locaux, réalisation de pentests et écriture d'exploits.
Afin que vous puissiez vous renseigner sur les nouveaux articles, logiciels et autres informations, j'ai créé une
chaîne dans Telegram et un
groupe pour discuter de tout problème dans le domaine de l'ICD. Aussi, je considérerai personnellement vos demandes, questions, suggestions et recommandations
personnelles et répondrai à tout le monde .
Toutes les informations sont fournies à des fins éducatives uniquement. L'auteur de ce document n'assume aucune responsabilité pour tout dommage causé à quelqu'un du fait de l'utilisation des connaissances et des méthodes obtenues à la suite de l'étude de ce document.
C, GCC32
Prenons le cas le plus simple. Ceci est la première quête inversée.

Dans les tâches de ce type, lorsque le mot de passe est stocké sous forme de chaîne, il peut être trouvé sans utiliser d'outils spéciaux. Exécutons le programme et voyons ce qu'il affiche.

Super. Nous avons une invitation et un message sur le mauvais mot de passe. Nous regardons les lignes du fichier programme, et nous trouvons parmi elles une invitation et un message sur le mauvais mot de passe. Il devrait y avoir un mot de passe à proximité.

Ainsi, des lignes côte à côte, il y en a une qui ressemble à un mot de passe. Essayons.

La tâche est terminée. Nous donnons le mot de passe, nous obtenons 5 points.

ELFx86, Basic
On nous demande de trouver un mot de passe.

Nous chargeons le programme dans le débogueur IDA Pro (j'utilise la version 7.0) et appuyons sur F5 pour décompiler le programme.

Ainsi, le nom entré est comparé à la chaîne john et le mot de passe est comparé à l'extracteur.

Ainsi, nous avons correctement résolu la tâche et obtenu notre mot de passe. Nous le louons et gagnons 5 points supplémentaires.

PEx86, 0 protection
Cette fois, on nous donne un exe-shnik.

Téléchargez-le dans IDA Pro.

Le programme n'enregistre pas les informations de débogage, donc nous ne voyons pas les noms de fonction habituels comme main. Regardons les lignes du programme, pour cette presse + F12.

Nous voyons des messages sur la saisie des mots de passe corrects et incorrects. Maintenant, nous pouvons trouver le bloc avec cette ligne dans le code et voir quelle condition le précède. Double-cliquez sur la ligne.

Nous sommes situés dans la section rdata. Trouvons tous les liens dans le code de cette adresse. Pour ce faire, appuyez sur X.

Ainsi, dans le code du programme, il n'y a qu'un seul appel vers notre ligne. Nous double-cliquons et passons au code.

Nous sommes dans le code de programme principal. Nous décompilons.

Ici, une vérification d'un certain nombre a2 et d'une ligne a1 a lieu. Traduisons un numérique en un caractère.

Pour ce faire, appuyez sur R. sur le numéro. Et notre code a changé.

Nous connaissons maintenant la ligne, il reste à savoir quel est le nombre a2. Voyons tous les liens vers cette fonction.

Il n'est appelé qu'une seule fois.

Comme vous pouvez le voir, la longueur de la chaîne est transmise comme deuxième paramètre. Vérifiez le mot de passe trouvé.

Nous cédons et obtenons 5 points.

ELF-C ++, 0 protection
On nous propose de résoudre un programme en C ++.

Nous ouvrons dans IDA Pro et nous passons à l'endroit d'un appel du message sur le mot de passe correct. Colorons-le en vert.

Rendons le graphique plus petit.

Nous devons donc passer par deux conditions. Analysons-les. Dans la première condition, le nombre d'arguments est comparé à 1. Autrement dit, le programme doit avoir plusieurs arguments (le premier est le nom du programme).

Nous analysons la deuxième condition.

La chaîne que nous avons entrée est comparée à la chaîne transmise en paramètre à la fonction plouf. Nous le décompilons.

Analysez le code. En fait, a2 - est une chaîne. Ainsi, le cycle va de i = 0, jusqu'à ce que le i-ème élément de la ligne a2 soit 0 (c'est-à-dire jusqu'à ce qu'il atteigne la fin de la ligne).
V3 = a2 [i]
V5 = longueur (a3)
V6 = a3 [i% v5]
Autrement dit, la ligne à l'adresse a1 sera égale aux deux lignes proxy a2 et a3. Revenons à la fonction principale et trouvons ces lignes.

Nous devons donc définir les paramètres var_C et var_10. Nous les trouverons un peu plus haut. Ce sont les chaînes unk_8048BC4 et unk_8048DCC, respectivement.

Trouvez la valeur des chaînes.

Eh bien, nous allons écrire un code pour les proxy.

Nous obtenons le mot de passe.

PE-DotNet, 0 protection
Dans cette mission, il nous est proposé d'inverser l'application .NET.

Vous pouvez le déterminer à l'aide de l'utilitaire de fichier.

C # est un langage décompilé, nous pouvons donc obtenir le projet d'origine. Cela peut être
fait en utilisant
dnSpy .

Ouvrons le projet CrackMe et trouvons des fonctions et des méthodes.

La méthode Button1_Click vérifie le mot de passe au clic d'un bouton.

Dans le code source, nous trouvons le mot de passe. Vérifiez-le.

Nous le remettons.

C'est tout pour l'instant. À suivre ... Vous pouvez nous rejoindre sur
Telegram . Là, vous pouvez proposer vos propres sujets et voter sur le choix des sujets pour les articles suivants.