HANCITOR 악성 문서에 대한 동작 과정은 https://reversingnewbie.tistory.com/35 에서 확인할 수 있습니다.
목차
- 1. 개요
1.1) 분석 환경 - 2. 정적 분석
2.1) Virustotal 확인
2.2) 엔트로피 확인
2.3) IAT 확인 - 3. 동적 분석
3.1) 압축 메모리 해제 과정
3.2) DllMain - 4. 결론

1. 개요
HANCITOR는 주로 코발트 스트라이크(Cobalt Strike) 비콘, 정보 탈취형 악성코드, 추가 악성 셸코드를 다운로드하고 실행하는 다운로더 계열 악성코드로 알려져 있다. 메인 로더는 감염 과정에서 가장 먼저 실행되는 컴포넌트로 시스템 환경을 점검하고 네트워크 연결을 구성하며 최종 페이로드를 다운로드하고 실행하는 핵심 역할을 수행한다. 이번 글에서는 HANCITOR 악성코드의 메인 로더에 대한 행위 내용을 다룰 예정이다.
1.1) 분석 환경
| OS | Windows 10 22H2 (build 19045.5965) - VMware |
| Tool | xpeviewer, x64dbg, hxd, pestudio, ida |
2. 정적 분석
| File name | gelfor.dap |
| MD5 | 32799a01c72148ab003af600f8eb40dc |
| SHA-256 | b9bafe8645a4dba7b7a9bd5132b696c0a419998d4f65fe897bb6912c2e019a7b |
| File type | Win32 DLL |
| File size | 267.50 KB (273920 bytes) |
| Creation Time | 2016-09-23 14:38:58 UTC |
2.1) Virustotal 확인

2.2) 엔트로피 확인

HANCITOR 문서 파일에서 실행되는 DLL은 압축된 형태의 DLL로 확인된다. (그림 1)과 같이 파일의 엔트로피(entropy)가 비교적 높게 나타나는데 이는 일반적인 PE 파일보다 데이터가 무작위적으로 분포되어 있음을 의미한다. 이러한 특성은 압축이나 단순한 데이터 난독화 기법이 적용되었을 가능성을 보여주는 지표로 활용될 수 있다.
즉, 첫 번째 실행 단계에서 나타나는 압축된 DLL → 메인 로더 구조에는 압축/해제된 추가 페이로드를 불러오기 위한 과정이 있음을 생각해볼 수 있다.
정적 분석 도구인 XPEViewer를 사용하여 확인한 결과 해당 바이너리는 패킹(Packing)되었을 확률이 약 82%로 나타났다.
2.3) IAT 확인

바이너리가 패킹되어 있기 때문에 Import Table에서는 실제 악성 행위에 사용되는 네트워크 관련 API (C2 서버와의 통신에 활용되는 함수)들은 직접적으로 노출되지 않지만, VirtualProtectEx, VirtualAlloc, VirtualFree와 같은 메모리 관련 API들이 호출되는 패턴이 관찰된다. 이러한 메모리 관련 함수들은 압축 해제 또는 셀프 언패킹(Self-Unpacking)에서 주로 사용되며 로더가 실행 중에 자신의 코드 일부를 복호화하여 메모리에 적재하는 행위로 해석할 수 있다.
3. 동적 분석
3.1) 압축 메모리 해제 과정

코드 크기가 상당히 크기 때문에 VirtualAlloc 함수에서 브레이크포인트에 도달하기까지 약 30초 정도의 시간이 소요된다.

VirtualAlloc 호출을 추적하던 중, 세 번째 호출 시점의 할당된 메모리 영역에서 MZ 헤더(Signature)를 나타나는 data가 복사 된 걸 확인할 수 있었다.

메모리 맵(Memory Map)에서 확인해 보면 권한 플래그가 ERW-- (Execute, Read, Write)로 설정되어 있는 것을 알 수 있다.
이는 단순히 데이터 저장용 메모리가 아니라 실행 가능한 코드가 적재된 영역임을 의미한다.

이 메모리 영역을 자세히 조사하기 위해 아래쪽으로 스크롤해 보면 특정 구간이 전혀 압축되지 않았음을 확인할 수 있다. 특히, 오프셋 0x4389 지점에서는 명확한 MZ 헤더(Signature)가 드러나며 압축 해제된 실제 페이로드의 시작 지점임을 의미한다.

앞서 확인한 메모리 영역을 덤프(Dump)한 뒤, 헥스 편집 도구를 사용하여 0x4389 바이트(offset)까지의 불필요한 데이터를 잘라내면 Runnable(실행) 가능한 Pure PE 파일을 추출할 수 있다.

이후 추출한 바이너리를 확인해보면 네트워크 활동에 사용되는 주요 API들이 Import Table에 노출되어 있는 것을 확인할 수 있다.
3.2) DllMain


일반적으로 DllMain(DllEntryPoint) 함수는 DLL 파일의 진입점으로 DLL이 로드될 때 초기화 작업이나 주요 기능을 수행하는 역할을 한다. 하지만 HANCITOR의 경우 DllEntryPoint는 단순히 1을 반환하는 것 외에는 아무 동작도 수행하지 않는다. 즉 DLL이 단순히 로드되는 것만으로는 행위가 발생하지 않으며 rundll32.exe 같은 프로세스를 통해 특정 Export 이름 (BNJAFSRSQIX)을 실행인수로 호출될 때에만 트리거가 발동 된다.
4. 결론
분석 결과, HANCITOR 메인 로더는 단순히 DLL을 로드하는 것만으로 전체 기능을 수행하지 않으며 DllMain은 거의 아무 동작을 하지 않고 실제 악성 행위는 Export 함수(BNJAFSRSQIX)를 통해 실행되는 구조임을 확인할 수 있었다.
또한 패커로 인해 압축되어 숨겨져 있었으나 압축 해제 과정을 통해 압축된 페이로드가 복원됨을 관찰하였다.
추출한 DLL의 행위에 대한 분석은 차후 게시물에서 작성할 예정입니다.
'Reversing > Malware Analysis' 카테고리의 다른 글
| [Lumma Stealer] Heaven's Gate 기법을 활용한 악성코드(2) (1) | 2025.11.08 |
|---|---|
| [Lumma Stealer] clickfix 기법을 활용한 악성코드 유포(1) (1) | 2025.10.04 |
| [BPFDoor] 악성코드 분석 - 패킷 필터를 악용하는 악성코드 (0) | 2025.09.19 |
| [HANCITOR] 악성코드 분석(3) - C2 통신 페이로드 과정 분석 (0) | 2025.09.10 |
| [HANCITOR] 악성코드 분석(1) - 악성 문서 형식으로 유포되는 악성코드 (0) | 2025.09.05 |