sogen - 고성능 Windows & Linux 유저스페이스 에뮬레이터
요약
sogen은 syscall 수준에서 동작하는 고성능 Windows 및 Linux 유저스페이스 에뮬레이터입니다. C++로 작성되어 Unicorn Engine 등을 백엔드로 활용하며, 보안 연구 및 멀웨어 분석을 위한 정밀한 프로세스 제어 기능을 제공합니다.
핵심 포인트
- syscall 레벨 동작으로 기존 시스템 DLL을 그대로 활용 가능
- 보안 연구, 멀웨어 분석, DRM 리버싱에 최적화된 설계
- Unicorn, Hyper-V 등 다양한 백엔드 지원 및 Python 자동화 가능
- JIT 기술을 통한 빠른 에뮬레이션 속도 확보
- GDB 프로토콜 지원으로 IDA Pro, VS Code 등과 연동 가능
시스템콜(syscall) 수준 에서 동작하는 고성능 윈도우/리눅스 유저스페이스 에뮬레이터로, 포괄적인 후킹을 통해 프로세스 실행 전반을 제어
보안 연구, 멀웨어 분석, DRM 연구 등 프로세스 실행에 대한 세밀한 제어가 필요한 작업에 적합
- Windows API를 재구현하지 않고
syscall 레벨에서 동작해 기존 시스템 DLL을 그대로 활용 가능
C++ 로 작성되었으며 원하는 백엔드로 구동 가능: Unicorn Engine, icicle-emu, Hyper-V(WHP)
고급 메모리 관리: Unicorn의 메모리 관리 위에 구축되어 reserved·committed 등 Windows 고유 메모리 타입 지원
완전한 PE 로딩 지원: 실행 파일 및 DLL 로딩 처리, 적절한 메모리 매핑, 재배치(relocations), TLS 지원
예외 처리: Windows 구조적 예외 처리(SEH) 구현, 예외 디스패처 및 언와인딩 지원
쓰레딩 지원: 라운드 로빈(round-robin) 방식의 스케줄링 스레딩 모델 제공
State 관리: 전체 상태 직렬화와 빠른 인메모리 스냅샷 모두 지원
디버깅 인터페이스: GDB 시리얼 프로토콜 구현으로 IDA Pro, GDB, LLDB, VS Code 등과 연동 가능 - 멀웨어 분석 시에 호스트 격리가 완벽하지 않을 수 있어,
브라우저 샌드박스 기반 웹 버전 사용 을 권장 - Python 으로 자동화 가능
pip install sogen
으로 설치
- 에뮬레이터 실행, 콜백 등록, WinAPI 콜 인터셉트를 파이썬 안에서 바로 처리 가능
Windows User Space Emulation이란?
-
프로세스를
에뮬레이터 안에서 실행하고, 그 아래의 OS와 커널을 시뮬레이션하는 기법 -
일반적인 에뮬레이션이 코드를 가상 CPU에서 돌리고 하드웨어를 시뮬레이션하는 것이라면, 유저스페이스 에뮬레이션은 그 위에서 OS·커널 계층까지 흉내내는 방식
-
이게 주는 핵심 가치는
실행되는 코드에 대한 완전한 제어 — 에뮬레이터가 모든 실행 단계에 개입할 수 있음 -
제어는
후킹 포인트(hooking points) 를 통해 이뤄짐
메모리 접근 후킹 — read, write, execute 단위로 가로채기
명령어 실행 후킹 — syscall, cpuid, rdtsc 같은 특정 명령어 실행 시점 포착
새 코드 경로(new code path) 실행 후킹 — 처음 실행되는 코드 경로 감지 -
이 후킹 능력 덕분에 외부 통신 가로채기, 실행 흐름 추적, 코드 커버리지 측정 등이 가능해,
DRM 분석·멀웨어 분석·취약점 분석·보안 연구의 기반이 됨 -
발표자는
DRM 개발자로 Steam CEG, Arxan, Denuvo 등 다수 DRM을 리버싱 및 우회한 경력이 있음 -
윈도우용 게임들이 많이 쓰는
Denuvo DRM 분석에 에뮬레이션이 핵심 수단이었음 -
현대 DRM은 난독화/안티 탬퍼링/안티 디버깅으로 정적 및 동적 분석이 종종 불가능하기 때문
-
에뮬레이터를
취약점 분석(퍼징) 에 활용: 에뮬레이터 내부ㅠ에서 입력을 무작위화하고, 후킹으로 코드 커버리지 피드백을 받으며, 실행이 예측 가능하고 반복도 가능 -
기존 솔루션의 한계가 개발 동기
-
Qiling·Speakeasy·Dumpulator는
Python이라 후킹이 많은 DRM 분석에서 극도로 느림 -
Binee·Unicorn PE는
API 레벨 재구현이라 불완전하고 버그 발생 가능 -
syscall 규모: ntdll.dll 일반 syscall
409개, win32u.dll UI syscall 1474개 -
빠른 에뮬레이션 속도는
JIT 덕분
댓글과 토론
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기