{"id":18307746,"url":"https://github.com/debrunbaix/enkidu","last_synced_at":"2026-02-19T16:03:01.334Z","repository":{"id":225511687,"uuid":"766176348","full_name":"debrunbaix/Enkidu","owner":"debrunbaix","description":"Automated Pentesting Tool for Binary Analysis and Exploitation","archived":false,"fork":false,"pushed_at":"2025-01-10T13:13:09.000Z","size":424739,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-31T08:49:33.418Z","etag":null,"topics":["elf-binaries","enumeration","python","reverse-engineering","toolbox"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/debrunbaix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-02T14:49:05.000Z","updated_at":"2025-01-14T20:25:45.000Z","dependencies_parsed_at":"2024-06-26T19:31:14.024Z","dependency_job_id":"d6688388-d658-41ec-8568-f68f5392324a","html_url":"https://github.com/debrunbaix/Enkidu","commit_stats":null,"previous_names":["igaemas/enkidu","debrunbaix/enkidu"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/debrunbaix/Enkidu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debrunbaix%2FEnkidu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debrunbaix%2FEnkidu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debrunbaix%2FEnkidu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debrunbaix%2FEnkidu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/debrunbaix","download_url":"https://codeload.github.com/debrunbaix/Enkidu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debrunbaix%2FEnkidu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29621902,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T13:04:20.082Z","status":"ssl_error","status_checked_at":"2026-02-19T13:03:33.775Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elf-binaries","enumeration","python","reverse-engineering","toolbox"],"created_at":"2024-11-05T16:05:20.969Z","updated_at":"2026-02-19T16:03:01.285Z","avatar_url":"https://github.com/debrunbaix.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Enkidu\n\n![](/attachments/banner.png)\n\nEnkidu est un outil de pentest automatique spécialisé dans l'analyse et l'exploitation de binaires.\n\n---\n\n## Table des matières\n\n1. [Introduction](#introduction)\n\n2. [Fonctionnalités](#fonctionnalités)\n\n3. [Installation](#installation)\n\n4. [Utilisation](#utilisation)\n\n5. [Documentation](#documentation)\n\n6. [Contributions](#contributions)\n\n7. [Licence](#licence)\n\n---\n\n## Introduction\n\nEnkidu est un projet open-source développé dans le cadre d'un projet technique en master de cybersécurité. Ce projet vise à fournir un outil robuste et automatisé pour les tests de pénétration sur des binaires, permettant d'énumérer automatiquement des binaires et de découvrir et exploiter des vulnérabilités.\n\n### Information\n\nPour la partie enumération du binaire, Enkidu utilise la sortie des commandes :\n\n- `file`\n\n- `checksec`\n\n- `strings`\n\n- `ldd`\n\nEnsuite, Enkidu traite la sortie de chacune de ces commandes afin de l'unifier dans un json qui servira de base pour l'analyse.\n\nPour obtenir le code assembleur du binaire, Enkidu cherche dans le contenue des sections `.text`, `.rodata` etc.. grâce aux librairies `elftools` \u0026 `capstone`. \n\nPour l'obtention du pseudo code C, Enkidu utilise `Ghidra` et son scripts `AnalyseHeadless` afin d'executer Ghidra en ligne de commande avec mon script de decompilateur dans `/decompile_zone/script/decompiler.py`.\n\nAfin d'avoir un pseudo code C lisible avec des noms de fonctions et de variable compréhensibles, l'utilisateur peut choisir grâce à l'argument `-ai / --aiAssist` de modifier le pseudo code et d'obtenir un paragraphe explicatif du code grâce à l'API de `ChatGPT`.\n\nEn ce qui concerne la génération de rapports, Enkidu utilise :\n\n- `markdown` pour convertir le texte formaté en Markdown en HTML. Cela permet une flexibilité dans la rédaction du contenu du rapport, qui peut ensuite être facilement converti en un format web visualisable.\n\n- `WeasyPrint` pour convertir des documents HTML en PDF. Elle joue un rôle crucial dans report.py en transformant le contenu HTML généré à partir de Markdown en un document PDF final, permettant une distribution et un archivage faciles des rapports.\n---\n\n## Fonctionnalités\n\n- [x] Enumération d'information binaire :\n\n    - [x] Traitement de la commande `file`.\n\n    - [x] Traitement de la commande `checksec`.\n\n    - [x] Traitement de la commande `strings`:\n\n        - [x] Fonctions.\n\n        - [x] Messages d'erreur/succès.\n\n    - [x] Traitement de la commande `ldd`.\n\n    - [x] Récupération des sections du binaire.\n\n    - [x] Obtention du code assembleur.\n\n- [x] Obtention de pseudo code C.\n\n- [x] Analyse automatique des binaires pour identifier les vulnérabilités :\n\n    - [x] Déterminer les fonctions vulnérables.\n\n    - [x] Analyse des sécurités du binaire.\n\n- [x] Analyser les outputs grâce à ChatGPT.\n\n- [ ] Tentatives d'exploitation automatiques pour contourner les défenses des binaires.\n\n    - [x] Fuzztesting des entrées utilisateurs.\n\n        - [x] level 0 : Test avec les strings récupéré avant.\n\n        - [ ] level 1 : fuzztesting avancé. (annulé pour l'instant)\n\n    - [x] Tentative d'exploitation binaire.\n\n    - [ ] Tentative d'exploitation de format de chaine.\n\n- [x] Génération de rapport.\n\n    - [x] Rapport en `markdown` fait.\n\n    - [x] Rapport en `HTML/CSS` fait.\n\n    - [x] Rapport `PDF` fait.\n\n- [ ] Interface utilisateur intuitive pour faciliter l'utilisation et l'interprétation des résultats.\n\n- [ ] Prise en charge de différents types de binaires et architectures.\n\n---\n\n## Installation\n\nPour installer Enkidu, suivez les étapes suivantes :\n\n1. Clonez ce référentiel sur votre machine locale :\n\n```bash\n\ngit clone https://github.com/Igaemas/Enkidu.git\n\n```\n\n2. Accédez au répertoire Enkidu :\n\n```bash\n\ncd enkidu\n\n```\n\n3. Installer les dépendances et outils:\n\n```bash\nchmod +x setup.sh\n\n./setup.sh\n```\n\n4. Pour utiliser l'option IA, créé une clé api openai puis:\n\n```bash\necho \"OPENAI_API_KEY=\u003copenaiAPIkey\u003e\" \u003e app/ai_assist/.env #(si vous avec une clé API openai)\n```\n\n---\n\n## Utilisation\n\n### Execution\n\n```bash\nsource venv/bin/activate\npython3 -m app.main -t \u003cpath_to_binary\u003e\n``` \n#### Exemple avec analyse IA:\n\n![Usage Example](attachments/enkidu_test.gif)\n\n#### Exemple avec verbosité:\n\n![verbose Example](attachments/enkidu_verbose.gif)\n\n### Arguments\n\n```bash\npython3 -m app.main -h  \nusage: main.py [-h] -t TARGET [-v] [-ai]\n\nTarget File\n\noptions:\n  -h, --help            show this help message and exit\n  -t TARGET, --target TARGET\n                        Mettre un binaire en input\n  -v, --verbose         Affiche plus d\\'informations sur l\\'execution en cours\n  -ai, --aiAssist       Permet d\\'améliorer la compréhension des résultats grâce à l\\'API de ChatGPT.\n```\n\n---\n\n## Documentation\n\n### Arborescence\n\n```\nEnkidu/\n├── app/                            # Répertoire principal de l'application\n│   ├── ai_assist/                  # Scripts pour l'assistance AI\n│   │   ├── ai_analyse.py           # Script pour l'analyse AI\n│   │   └── __init__.py        \n|   |\n│   ├── analyse/                    # Contient des scripts pour l'analyse de binaire\n│   │   ├── analyse.py              # Script d'initialisation des analyses\n│   │   ├── assembly.py             # Script pour analyser le code assembleur\n│   │   ├── get_src_code.py         # Script pour obtenir le code source\n│   │   ├── sections.py             # Script pour analyser les sections du binaire\n│   │   └── __init__.py    \n|   |    \n│   ├── decompile_zone/             # Scripts pour la décompilation\n│   │   ├── function_filter.py      # Filtrage des fonctions\n│   │   ├── get_disassembly_code.py # Récupération du code désassemblé\n│   │   ├── projects/               # Projets de décompilation\n│   │   ├── script/                 # Scripts de décompilation\n│   │   └── __init__.py     \n|   |   \n│   ├── enumeration/                # Scripts pour l'énumération des binaires\n│   │   ├── enum_cmd.py             # Commandes pour l'énumération\n│   │   ├── enum.py                 # Script pour lancer l'énumération\n│   │   └── __init__.py        \n|   |\n│   ├── exploit_test/               # Scripts pour les tests d'exploitation\n│   │   ├── buffer_overflow.py      # Script pour tester les débordements de tampon\n│   │   ├── exploit_test.py         # Script principal pour lancer les tests d'exploitation\n│   │   └── __init__.py        \n│   │\n│   ├── __init__.py            \n│   ├── main.py                     # Point d'entrée principal du projet\n│   ├── output_functions.py         # Fonctions pour gérer les sorties (log, affichage)\n│   ├── fuzztesting.py              # Script pour le fuzz testing des binaires\n│   ├── report.py                   # Script pour générer les rapports Markdown, HTML/CSS, PDF\n│   ├── styles/                     # Dossier pour les fichiers CSS et autres ressources de style\n│   └── testFile/                   # Dossier contenant des fichiers de test ou exemples de binaires\n|           \n├── LICENSE                         # Fichier de licence pour le projet\n├── login_report_2024-06-11/        # Exemple de rapport généré\n│   ├── disassembly_code/           # Code désassemblé du binaire\n│   ├── login_report.html           # Rapport en format HTML\n│   ├── login_report.md             # Rapport en format Markdown\n│   └── login_report.pdf            # Rapport en format PDF\n|\n├── README.md                       # Fichier Markdown fournissant des informations sur le projet\n├── requirements.txt                # Liste des dépendances Python nécessaires\n└── venv/                           # Environnement virtuel Python\n```\n\n### Modules\n\n- [main.py](app/README.md)\n\n- [/enumeration](app/enumeration/README.md)\n\n- [/analyse](app/analyse/README.md)\n\n- [/decompiler](app/decompile_zone/README.md)\n\n- [/ai_assist](app/ai_assist/README.md)\n\n---\n\n## Contributions\n\nLes contributions sont les bienvenues ! Pour contribuer à Enkidu, veuillez suivre ces étapes :\n\n1. Fork le projet sur GitHub.\n\n2. Créez une nouvelle branche avec une fonctionnalité ou une correction de bug que vous souhaitez apporter.\n\n3. Faites vos modifications et testez-les.\n\n4. Soumettez une demande de tirage avec une description détaillée de vos modifications.\n\n---\n\n## Licence\n\nCe projet est sous licence [MIT](LICENSE).\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebrunbaix%2Fenkidu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdebrunbaix%2Fenkidu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebrunbaix%2Fenkidu/lists"}