> For the complete documentation index, see [llms.txt](https://writeups.ayweth20.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://writeups.ayweth20.com/2023/404ctf-2023/retro-ingenierie/le-divin-crackme.md).

# Le Divin Crackme

**Catégorie:** Retro Ingénierie - **Difficulté:** Intro

{% file src="/files/gDKV6ZdMWsgrZO1VKiW5" %}

**Description:**

<figure><img src="/files/xG5WG9vNYYXrrsP5EYLY" alt=""><figcaption></figcaption></figure>

**Solution:**

Pour ce challenge d'introduction au reverse, nous devons retrouver 3 infos : le compilateur qui a servi lors de la création du programme, la fonction permettant de vérifier le mot de passe et le fameux mot de passe.

Pour la première partie (le compilateur) il suffisait d'importer le fichier dans un décompileur tel que Ghidra.\
Dans la fenêtre d'informations, nous voyons toutes les infos concernant le fichier dont le "*Compilator ID*" :&#x20;

<figure><img src="/files/HR1XRHCn4BMbSZUgw8QU" alt=""><figcaption></figcaption></figure>

Le compilateur est donc **GCC**.

Maintenant nous allons passer à l'analyse du programme divin-crackme.\
Pour ce faire, nous allons regarder les fonctions référencées par Ghidra :&#x20;

<figure><img src="/files/FGhSNpyPZol0DtEKUKFP" alt=""><figcaption></figcaption></figure>

La fonction main est souvent la plus intéressante, car nous comprenons ce que le programme fait et lorsque les autres fonctions sont appellées. Voici donc la fonction main :&#x20;

<figure><img src="/files/Kuk60GwjKWvbmEq4RrUl" alt=""><figcaption></figcaption></figure>

Ici nous voyons que la fonction main demande le mot de passe à l'utilisateur. Nous voyons même la condition qui dit si le mot de passe entré est valide.

Avant de reconstituer le mot de passe, nous pouvons voir quelle fonction est utilisée pour vérifier ce fameux mot de passe. Il s'agit de la fonction **strncmp** (string compare) qui check si l'entrée utilisateur est égale à la partie du mot de passe associée (lignes 14 à 16).

Et maintenant il suffit de reconstituer le mot de passe avec les 3 parties. Ici nous avons de la chance et le mot de passe a du sens donc il est encore plus simple de le reconstituer : **L4\_pH1l0soPh13\_d4N5\_l3\_Cr4cKm3**.

Pour vérifier que le mot de passe est correct, nous pouvons directement lancé le programme et lui donner notre mot de passe pour vérifier :&#x20;

<figure><img src="/files/HFKTuKXtDMEHvWaayHsd" alt=""><figcaption></figcaption></figure>

Maintenant que nous avons les 3 parties du flag, il faut simplement les remettre dans l'ordre et envoyer le flag au format habituel.

<details>

<summary>🚩 FLAG</summary>

```
404CTF{gcc:strncmp:L4_pH1l0soPh13_d4N5_l3_Cr4cKm3}
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://writeups.ayweth20.com/2023/404ctf-2023/retro-ingenierie/le-divin-crackme.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
