
Небольшая утилита для работы с встроенными хешами вредоносных программ.
Uchihash — это небольшая утилита, которая экономит время аналитиков вредоносного ПО при работе со встроенными хеш-значениями, используемыми для различных целей, таких как:
$ 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: Один из доступных алгоритмов хеширования
--apis: Хеширует огромный список Windows API (см. data/apis_list.txt)
--keywords: Хеширует список распространённых ключевых слов, используемых семействами вредоносных программ, таких как инструменты анализа и артефакты VM/Антивирус/EDR (см. data/keywords_list.txt)
--list: Слова разделяются новой строкой (см. examples/mywords.txt)
--script: Функция хеширования должна называться hashme и принимать один аргумент — байтовую строку, представляющую значение, для которого нужно вычислить хеш; возвращаемое значение должно быть в шестнадцатеричном формате (см. examples/custom_algo.txt)
--search: Файл для поиска должен быть в формате JSON (см. examples/searchme.txt)
--hashes: Хеш-значения разделяются новой строкой и должны быть в шестнадцатеричном формате (см. examples/myhashes.txt)
Дополнительные примеры смотрите в папке examples.
Рассмотрим пример с реальным семейством вредоносных программ. В данном случае у нас есть BuerLoader, который использует хеш-значения для динамического импорта API и применяет пользовательский алгоритм хеширования.
Сначала нам нужно реализовать алгоритм хеширования на 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)
Затем вычисляем хеши всех API с помощью следующей команды:
$ python uchihash.py --script custom_algo.py --apis --idapython
Эта команда создаст два файла. Первый — "output/search_hashmap.txt", который сопоставляет хеш-значения с соответствующими именами API следующим образом:
{
"0x8a8b468c": "LoadLibraryW",
"0x302ebe1c": "VirtualAlloc",
"0x1803b7e3": "VirtualProtect",
"0xe183277b": "VirtualFree",
"0x24e2968d": "GetComputerNameW",
"0xab489125": "GetNativeSystemInfo",
.......
}
Второй файл — "output/idapython_script.py", который можно запустить в IDA Pro; скрипт добавит комментарии с хешами в вашу IDB, как показано ниже:
