
🪅 Windows 및 Linux 사용자 공간 에뮬레이터
Sogen은 실제 운영 체제 없이 Windows 및 Linux 프로그램을 실행하며, 프로그램이 수행하는 모든 작업을 보고 제어할 수 있게 해줍니다.
수천 개의 OS API를 재구현하는 대신, Sogen은 CPU 및 시스템 콜 수준에서 바이너리를 에뮬레이션하고 실제 시스템 DLL을 실행하므로 동작이 실제 OS와 매우 유사합니다.
모든 명령어, 메모리 접근 및 API 호출을 후킹, 검사 또는 재작성할 수 있으며, 실행은 완전히 결정적이고, 에뮬레이터 전체 상태를 스냅샷으로 저장하고 복원할 수 있습니다.
C++로 작성되었으며, 선택한 CPU 백엔드로 구동됩니다:
직접 사용해 보세요: sogen.dev
IDA Pro 또는 GDB와 같이 이미 알고 있는 도구를 GDB 프로토콜을 통해 디버깅하거나, 내장된 브라우저 내 디버거를 사용하세요.
디버거는 프로세스 외부의 에뮬레이터 수준에서 실행되므로 안티디버깅 검사에 노출되지 않습니다.
네이티브 GUI 앱이 창, 대화 상자 및 컨트롤과 함께 정상적으로 실행됩니다.
GPU 반가상화를 통해 실제 GPU에서 3D 가속을 사용할 수 있으며, Hyper-V 백엔드는 CPU에서 코드를 네이티브로 실행합니다. 게임을 실행하기에 충분히 빠릅니다.
Direct3D 8/9/10/11 타이틀은 DXVK를 통해 실행되며, GPU 브리지 위에서 Direct3D를 Vulkan으로 변환합니다.
슬라이드는 여기를 클릭하세요.
설치 방법:
pip install sogen
Python 바인딩에는 에뮬레이션 루트가 필요합니다. 준비된 루트는 여기에서 다운로드하거나, 위키의 지침에 따라 직접 만들 수 있습니다.
예시:
import sogen
emu = sogen.windows.create_application("c:/test-sample.exe", emulation_root="./root")
def on_module_load(module):
if module.name.lower() == "test-sample.exe":
emu.hooks.memory_execution_at(module.entry_point, lambda address: print(f"hit entry point: 0x{address:x}"))
emu.callbacks.on_module_load = on_module_load
emu.start()
print(emu.process.exit_status)
설정 세부 사항과 더 큰 예시는 examples/python/README.md를 참조하세요.
Dart 바인딩은 별도 저장소에서 제공됩니다.
[!TIP]
Windows, Linux, macOS 등에서 에뮬레이터를 빌드하고 실행하는 방법에 대한 자세한 내용은 Wiki를 확인하세요.
1. 코드를 체크아웃합니다:
git clone --recurse-submodules https://github.com/momo5502/sogen.git
2. 복제된 디렉터리의 x64 개발 명령 프롬프트에서 다음 명령을 실행합니다:
cmake --preset=vs2022
3. build/vs2022/sogen.sln에 생성된 솔루션을 빌드합니다
4. grab-registry.bat을 관리자 권한으로 실행하여 레지스트리 덤프를 생성하고, analyzer.exe 옆의 artifacts 폴더에 배치합니다
5. 원하는 프로그램을 실행합니다:
analyzer.exe C:\example.exe