
VMProtect2 디난독화 도구
이 저장소는 VMProtect 2로 보호된 바이너리를 다루기 위한 레거시 도구 모음입니다.
이 도구들은 VMProtect 2로 보호된 소프트웨어의 언패킹, 분석, 실험적인 가상화 해제(devirtualization) 를 가능하게 합니다. 이 모음의 핵심은 vmprofiler 유틸리티 라이브러리로, 다른 모든 도구에서 사용하는 기초 로직을 제공합니다. 이 라이브러리는 VM 핸들러, 핸들러 테이블, 변환(transform) 등 VMProtect 2의 주요 구성 요소를 식별하는 역할을 담당합니다.
이 4년 이상 된 프로젝트에서 얻은 교훈은 가상화 해제에 관심이 있는 분들에게 전달되어야 합니다.
이 프로젝트는 개별 VM 핸들러를 식별하려고 시도합니다. 이 방식은 깨지기 쉽고 확장성이 없으며, 가상 머신 아키텍처 변경(여러 핸들러 상호 연결, 복잡한 핸들러 등)으로 무력화될 수 있습니다. 대신 저는 최소한의 VM 특정 난독화 해제 로직으로 점진적인 리프팅(lifting) 및 제어 흐름 복구(control-flow recovery) 전략을 지지합니다. Saturn, Colton의 Dna, Triton, Mergen과 같은 도구들은 VM 특정 핸들러 식별을 거의 또는 전혀 사용하지 않고 VMProtect 난독화를 성공적으로 해제했습니다. 이 저장소는 VMProtect 2의 아키텍처를 문서화하고, 가상 머신 특정 핸들러에 크게 의존하는 가상화 해제 도구를 구축하지 말라는 경고의 메모 역할을 합니다.
VMProtect 가상화 해제에 대한 반-일반적 접근 방식은 load/store 전파, 섹션 상수 전파, DCE 및 몇 가지 다른 간단한 최적화를 지원하는 강력한 프레임워크가 필요합니다. 많은 사람들이 LLVM을 사용하여 기본 코드로 다시 컴파일하려고 시도하지만, 저는 이 접근 방식이 항상 만족스럽지 못한 결과를 낳을 것이라고 생각합니다. 저희는 자체 프레임워크인 blare2를 보유하고 있으며, 이는 난독화 해제 목적으로 활용하는 깔끔한 1:1 리프트 및 로워링(lowering) 기능을 제공합니다. 난독화 해제를 위한 컨설팅 서비스에 관심이 있으시다면 일정이 허락하는 경우 제공해 드릴 수 있습니다.
vmemu
Unicorn Engine 기반의 가상 머신 탐색 도구입니다.
지정된 vmenter 내에서 보호된 프로그램을 언패킹하고 제어 흐름을 분석할 수 있습니다.
이 도구는 주어진 VM 진입점의 제어 흐름 그래프를 포함하는 .vmp2 파일을 생성합니다.
생성된 .vmp2 파일은 vmdevirt 에 전달되어 함수를 다시 기본 x86으로 재컴파일하고 원래 바이너리에 재통합할 수 있습니다. 참고로 이 도구는 단순히 함수의 단일 경로만 발견하는 단순 트레이서가 아니라, 실제로 가상 jcc를 식별하고 모든 가상화된 제어 흐름을 탐색합니다.
vmdevirt
.vmp2 파일을 위한 실험적인 LLVM 기반 재컴파일러입니다.
기능적으로는 작동하지만 매우 실험적이고 불안정한 것으로 간주되며, 이 접근 방식은 일반적으로 권장되지 않습니다.
vmassembler
사용자 정의 가상 머신 연산을 인코딩하기 위한 실험적인 어셈블러입니다.
이 프로젝트는 VMProtect 2 가상 머신 아키텍처에 대한 깊은 기술적 이해를 보여줍니다.
vmhook
런타임에 VMProtect 2 가상 머신에 훅을 설치하여 개별 VM 핸들러에 대한 상세한 내부 관찰을 가능하게 하는 도구입니다.
vmprofiler
다른 모든 도구를 구동하는 핵심 유틸리티 라이브러리입니다.
VM 핸들러 패턴 매칭, 핸들러 테이블 추출, 데드 코드 제거(DCE) 및 기타 필수 분석 루틴을 포함합니다.
vmprofiler-cli
vmprofiler의 명령줄 인터페이스로, 추출된 정보를 텍스트 형식으로 표시하고 검사할 수 있습니다.
vmprofiler-qt
VMProtect 2 바이트코드를 위한 Qt 기반 그래픽 디스어셈블러로, 가상화된 코드의 대화형 시각적 탐색을 제공합니다.
이 페이지의 지침을 따라주세요.
vmhook용 Visual Studio 2022vmassembler, vmemu, vmprofiler, vmprofiler-cli 설정:
cmake -B build
cmake --build build
vmdevirt 포함 (LLVM을 다운로드하여 빌드합니다!):
cmake -B build -DBUILD_VMDEVIRT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
vmprofiler-qt 포함:
cmake -B build -DBUILD_VMPROFILER_QT=ON
cmake --build build
두 선택 모듈 모두 포함:
cmake -B build -DBUILD_VMDEVIRT=ON -DBUILD_VMPROFILER_QT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
이 도구들은 교육 및 연구 목적으로만 제공됩니다. 불법 활동, 무단 접근, DMCA 또는 기타 법률 위반에 사용해서는 안 됩니다. 도구 자체는 DMCA 규정을 위반하지 않습니다. 모든 작업은 저의 독창적인 창작물이며, 사용자의 행동은 전적으로 사용자의 책임이며 저자의 행동이나 의도를 반영하지 않습니다.