
악성코드에 포함된 해시를 처리하는 작은 유틸리티입니다.
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 도움말 메시지 출력 후 종료
--algo ALGO 해싱 알고리즘
--apis API의 해시 계산
--keywords 키워드의 해시 계산
--list LIST 사용자 단어 목록의 해시 계산
--script SCRIPT 사용자 정의 해싱 알고리즘을 포함한 스크립트 파일
--search SEARCH 해시가 단어에 매핑된 JSON 파일 검색
--hashes HASHES 검색할 해시 목록이 포함된 파일
--idaidc IDA Pro에서 해시 값을 주석 처리하는 IDC 스크립트 생성
--idapython IDA Pro에서 해시 값을 주석 처리하는 IDAPython 스크립트 생성
--ghidra 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로 불려야 하며, 해시를 계산할 값을 나타내는 바이트 문자열을 하나의 인자로 받고 반환값은 16진수 형식이어야 함 (examples/custom_algo.txt 참조)
--search: 검색할 파일은 JSON 형식이어야 함 (examples/searchme.txt 참조)
--hashes: 해시 값은 개행으로 구분되며 16진수 형식이어야 함 (examples/myhashes.txt 참조)
자세한 내용은 examples 폴더를 참조하세요.
실제 악성코드 계열을 예로 들어 보겠습니다. 이 경우 **BuerLoader**는 해시 값을 사용하여 API를 동적으로 임포트하며 사용자 정의 해싱 알고리즘을 사용합니다.
먼저 파이썬으로 해싱 알고리즘을 구현해야 합니다:
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에 해시 주석을 추가합니다:
