
Un petit utilitaire pour traiter les hachages intégrés aux logiciels malveillants.
Uchihash est un petit outil qui permet aux analystes de malwares de gagner du temps lorsqu'ils doivent traiter des valeurs de hachage intégrées utilisées pour diverses choses telles que :
$ git clone https://github.com/N1ght-W0lf/Uchihash.git
$ pip install -r requirements.txt
usage: uchihash.py [-h] [--algo ALGO] [--apis] [--keywords] [--list LIST] [--script SCRIPT] [--search SEARCH]
[--hashes HASHES] [--idaidc] [--idapython]
options:
-h, --help show this help message and exit
--algo ALGO Hashing algorithm
--apis Calculate hashes of APIs
--keywords Calculate hashes of keywords
--list LIST Calculate hashes of your own word list
--script SCRIPT Script file containing your custom hashing algorithm
--search SEARCH Search a JSON File containing hashes mapped to words
--hashes HASHES File containing list of hashes to search for
--idaidc Generate an IDC script to annotate hash values in IDA Pro
--idapython Generate an IDAPython script to annotate hash values in IDA Pro
--ghidra Generate a python script to annotate hash values in Ghidra
Examples:
* python uchihash.py --algo crc32 --apis
* python uchihash.py --algo murmur3 --list mywords.txt
* python uchihash.py --script myalgo.py --apis --idapython
* python uchihash.py --search hashmap.txt --hashes myhashes.txt
--algo : Un des algorithmes de hachage disponibles
--apis : Hache une énorme liste d'API Windows (voir data/apis_list.txt)
--keywords : Hache une liste de mots-clés courants utilisés par les familles de malwares tels que les outils d'analyse et les artefacts de VM/Antivirus/EDR (voir data/keywords_list.txt)
--list : Les mots sont séparés par une nouvelle ligne (voir examples/mywords.txt)
--script : La fonction de hachage doit s'appeler hashme et prend un argument qui est une chaîne d'octets représentant la valeur pour laquelle nous voulons calculer le hachage, et la valeur de retour doit être au format hexadécimal (voir examples/custom_algo.txt)
--search : Le fichier à rechercher doit être au format JSON (voir examples/searchme.txt)
: Les valeurs de hachage sont séparées par une nouvelle ligne et doivent être au format hexadécimal (voir )
voir le dossier examples pour plus de clarification
Prenons un exemple avec une famille de malwares réelle, dans ce cas nous avons BuerLoader qui utilise des valeurs de hachage pour importer dynamiquement des API et qui utilise un algorithme de hachage personnalisé.
D'abord, nous devons implémenter l'algorithme de hachage en python :
def ROR4(val, bits, bit_size=32):
return ((val & (2 ** bit_size - 1)) >> bits % bit_size) | \
(val << (bit_size - (bits % bit_size)) & (2 ** bit_size - 1))
def hashme(s):
res = 0
for c in s:
v3 = ROR4(res, 13)
v4 = c - 32
if c < 97:
v4 = c
res = v4 + v3
return hex(res)
Ensuite, nous calculons les hachages de toutes les API en utilisant la commande suivante :
$ python uchihash.py --script custom_algo.py --apis --idapython
Cette commande générera deux fichiers. Le premier est "output/search_hashmap.txt" qui fait correspondre les valeurs de hachage à leurs noms d'API correspondants comme suit :
{
"0x8a8b468c": "LoadLibraryW",
"0x302ebe1c": "VirtualAlloc",
"0x1803b7e3": "VirtualProtect",
"0xe183277b": "VirtualFree",
"0x24e2968d": "GetComputerNameW",
"0xab489125": "GetNativeSystemInfo",
.......
}
Le deuxième fichier est "output/idapython_script.py" que vous pouvez exécuter dans IDA Pro et le script ajoutera les commentaires de hachage à votre IDB comme illustré ci-dessous :

--hashes