
Una piccola utility per gestire hash incorporati nel malware.
Uchihash è un piccolo strumento che può far risparmiare tempo agli analisti malware nella gestione di valori hash incorporati utilizzati per varie cose come:
$ 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 Algoritmo di hash
--apis Calcola hash delle API
--keywords Calcola hash delle parole chiave
--list LIST Calcola hash della propria lista di parole
--script SCRIPT File script contenente il proprio algoritmo di hash personalizzato
--search SEARCH Cerca un file JSON contenente hash mappati a parole
--hashes HASHES File contenente una lista di hash da cercare
--idaidc Genera uno script IDC per annotare valori hash in IDA Pro
--idapython Genera uno script IDAPython per annotare valori hash in IDA Pro
--ghidra Genera uno script Python per annotare valori hash 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: Uno degli algoritmi di hash disponibili
--apis: Genera hash di una vasta lista di API di Windows (vedi data/apis_list.txt)
--keywords: Genera hash di una lista di parole chiave comuni utilizzate da famiglie di malware come strumenti di analisi e artefatti di VM/Antivirus/EDR (vedi data/keywords_list.txt)
--list : Le parole sono separate da un newline (vedi examples/mywords.txt)
--script: La funzione di hash deve chiamarsi hashme e accetta un argomento che è una stringa di byte che rappresenta il valore di cui vogliamo calcolare l'hash, e il valore di ritorno deve essere in formato esadecimale (vedi examples/custom_algo.txt)
--search: Il file da cercare deve essere in formato JSON (vedi examples/searchme.txt)
--hashes: I valori hash sono separati da un newline e devono essere in formato esadecimale (vedi examples/myhashes.txt)
vedi la cartella examples per maggiori chiarimenti
Prendiamo un esempio con una famiglia di malware reale, in questo caso abbiamo BuerLoader che utilizza valori hash per importare dinamicamente API e utilizza un algoritmo di hash personalizzato.
Per prima cosa dobbiamo implementare l'algoritmo di hash in 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)
Poi calcoliamo gli hash di tutte le API usando il seguente comando:
$ python uchihash.py --script custom_algo.py --apis --idapython
Questo comando genererà due file, il primo è "output/search_hashmap.txt" che mappa i valori hash ai nomi delle API corrispondenti come segue:
{
"0x8a8b468c": "LoadLibraryW",
"0x302ebe1c": "VirtualAlloc",
"0x1803b7e3": "VirtualProtect",
"0xe183277b": "VirtualFree",
"0x24e2968d": "GetComputerNameW",
"0xab489125": "GetNativeSystemInfo",
.......
}
Il secondo file è "output/idapython_script.py" che puoi eseguire in IDA Pro e lo script aggiungerà i commenti hash al tuo IDB come visto sotto:
