Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CallObfuscator — Obfusquer des API Windows spécifiques avec différentes API | Kitploit
Outils/GitHubGitHub/d35ha/callobfuscator
Outils DéfensifsAnalyse StatiqueAnalyse Dynamique (Sandboxing)Évasion IDS/IPSRétro-ingénierieAnalyse de MalwareAnalyse de Binaires
GitHubd35ha/callobfuscator

CallObfuscator

Obfusquer des API Windows spécifiques avec différentes API

Voir le dépôt
1.0k174il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CallObfuscator

Obfusquer (cacher) les importations PE des outils d'analyse statique/dynamique.

Théorie

C'est assez simple, disons que j'ai utilisé VirtualProtect et que je veux l'obfusquer avec Sleep, l'outil manipulera l'IAT de sorte que le thunk qui pointe vers VirtualProtect pointe plutôt vers Sleep. Lors de l'exécution du fichier, le chargeur Windows chargera Sleep au lieu de VirtualProtect, et déplacera l'exécution vers le point d'entrée. À partir de là, l'exécution sera redirigée vers le shellcode, que l'outil a placé auparavant, pour trouver l'adresse de VirtualProtect et l'utiliser pour remplacer l'adresse de Sleep qui a été assignée précédemment par le chargeur.

Comment utiliser

  • Il peut être inclus directement en tant que bibliothèque, voir l'extrait suivant (basé sur l'exemple), vous pouvez aussi jeter un œil à cli.cpp.
root@kitploit:~
#include <cobf.hpp>

int main() {
	cobf obf_file = cobf("sample.exe");
	obf_file.load_pe();
	obf_file.obf_sym("kernel32.dll", "SetLastError", "Beep");
	obf_file.obf_sym("kernel32.dll", "GetLastError", "GetACP");
	obf_file.generate("sample_obfuscated.exe");
	obf_file.unload_pe();
	return 0;
};
  • Peut également être utilisé comme outil en ligne de commande en fournissant le chemin du PE d'entrée, le chemin du PE de sortie et optionnellement le chemin du fichier de configuration (par défaut config.ini).
    cobf.exe <input file> <out file> [config file]
    Le fichier de configuration contient les obfuscations nécessaires (dlls, symboles, ...).
    Voici un modèle pour le contenu du fichier de configuration
root@kitploit:~
; Template for the config file:
; 	* Sections can be written as:
; 		[dll_name]
; 		old_sym=new_sym
;	* The dll name is case insensitive, but 
;	the old and the new symbols are not.
; 	* You can use the wildcard on both the
; 	dll name and the old symbol.
; 	* You can use '#' at the start of
; 	the old or the new symbol to flag 
; 	an ordinal.
;	* The new symbol should be exported
;	by the dll so the windows loader can resolve it.
; For example:
; 	* Obfuscating all of the symbols
;	imported from user32.dll with ordinal 1600.
[user32.dll]
*=#1600
;	* Obfuscating symbols imported from both
;	kernel32.dll and kernelbase.dll with Sleep.
[kernel*.dll]
*=Sleep
;	* Obfuscating fprintf with exit.
[*]
fprintf=exit

Exemple

Compilez cet exemple de code

root@kitploit:~
#include <windows.h>
#include <stdio.h>

int main() {
	SetLastError(5);
	printf("Last error is %d\n", GetLastError());
	return 0;
};

Après l'avoir compilé, voici à quoi ressemblent les importations kernel32

pic1

Maintenant, obfusquons à la fois SetLastError et GetLastError avec Beep et GetACP (en fait, n'importe quelle API de kernel32 fera l'affaire, même si elle n'est pas importée du tout).
Les configurations utilisées sont

root@kitploit:~
[kernel32.dll]
SetLastError=Beep
GetLastError=GetACP

Voici le résultat (vous pouvez aussi utiliser la bibliothèque directement comme montré ci-dessus).

pic2

Regardons à nouveau les importations kernel32

pic3

Il n'y a aucune trace de SetLastError ou GetLastError
Une confirmation que les deux fichiers fonctionneront correctement

pic4

Impact

IDA HexRays Decompiler

pic5

IDA Debugger

pic6

Ghidra

pic7

ApiMonitor

pic8

C'est parce que tous les outils d'analyse statique dépendent du nom de l'API écrit dans l'IAT, qui peut être manipulé comme montré.
Pour ApiMonitor, à cause de l'utilisation du hooking IAT, le même problème existe.

D'un autre côté, pour des outils comme x64dbg, les noms d'API affichés ne dépendront que de ce qui est réellement appelé (pas de ce qui est écrit dans l'IAT).

pic9

Supplément

  • Extraire le PE obfusqué de la mémoire ne le désobfusquera pas, car l'IAT manipulé restera le même.
  • Le but principal de cet outil est de perturber le processus d'analyse (le ralentir).
  • On peut obfusquer n'importe quel symbole importé (par nom ou par ordinal) avec un autre symbole (nom ou ordinal).
  • Le shellcode est exécuté comme le premier callback TLS pour traiter les symboles obfusqués nécessaires aux autres callbacks TLS avant que le point d'entrée ne soit exécuté.
  • Le shellcode est fourni sous forme de code C, généré lors de la compilation de l'outil pour en faciliter l'édition.
  • Les noms des symboles obfusqués sont résolus par hachage et non directement par nom.
  • L'outil désactive les relocalisations et supprime tous les symboles de débogage.
  • L'outil crée une nouvelle section rwx nommée .cobf pour contenir le shellcode et les autres données nécessaires.
  • Il peut être utilisé plusieurs fois sur le même PE obfusqué.
  • Testé uniquement sur Windows 10 x64.
  • Obtenez le code source avec git clone https://github.com/d35ha/CallObfuscator.
  • Téléchargez les binaires depuis la Section des versions.

TODO

  • Obfuscation du shellcode (probablement avec obfusion).
  • Prise en charge des symboles à chargement différé.
  • Minimiser la taille de la section créée.
  • Hachage au moment de la compilation.
  • Meilleurs tests.
Télécharger l’outil