프로젝트 소개
dearxan은 Arxan(현재 GuardIT)이 바이너리에 삽입하는 검사를 정적 및 런타임 분석하고 패치하기 위한 라이브러리입니다. README에 따르면, Arxan을 사용하는 FromSoftware 게임에서 Arxan을 완전히 무력화할 수 있습니다: 패치가 적용되면 Arxan 코드(안티디버그 및 무결성 검사 등)가 실행되지 않고 암호화된 함수는 복호화된 상태로 유지됩니다.
README는 한 가지 주의 사항을 언급합니다: Arxan 엔트리 포인트 스텁은 여전히 실행되어야 합니다. 이러한 스텁은 안티디버그 검사를 수행하지 않지만, 일부 게임(예: 다크 소울 리마스터드)에서는 무결성 검사를 수행하며 수정 사항이 감지되면 게임이 충돌할 수 있습니다. 이는 neuter_arxan에 전달된 콜백에 훅을 배치하여 완화할 수 있습니다. 저자는 엔트리 포인트 스텁이 완전히 리버스 엔지니어링되면 더 이상 필요하지 않을 것이라고 밝혔습니다.
README에 나열된 테스트된 게임:
- 다크 소울 리마스터드
- 다크 소울 II SOTFS
- 다크 소울 III
- 엘든 링
- 아머드 코어 VI
- 엘든 링: 나이트레인
이 크레이트는 이러한 FromSoftware 게임의 최신 버전에 있는 Arxan 변형에 대해서만 테스트되었으며, 다른 개발자가 사용하는 Arxan 구성에서는 작동하지 않을 수 있습니다. 기여는 환영합니다.
설명된 사용 옵션:
- disabler 기능을 사용한 Rust에서: Cargo.toml에 dearxan을 추가하고 게임의 엔트리 포인트가 실행되기 전에 dearxan::disabler::neuter_arxan을 한 번 호출합니다. 콜백이 결과를 수신하며 훅을 설치하기에 권장되는 위치입니다.
- C++에서: Releases에서 정적 라이브러리를 다운로드하고 포함된 Windows 임포트 라이브러리와 링크하고 include/dearxan.h를 포함한 후 dearxan::neuter_arxan을 호출합니다. 최소 지원 표준은 C++14이며 C++17 이상을 권장합니다.
- C에서: 동일한 라이브러리와 헤더를 사용하고 콜백과 함께 dearxan_neuter_arxan을 호출합니다.
- 다른 언어에서: include/dearxan.h에서 C 바인딩을 생성하고 dearxan_neuter_arxan을 호출합니다.
README는 많은 DLL 인젝터나 모드 런처가 프로세스를 생성 시 일시 중단하지 않거나 게임 엔트리 포인트 전에 코드를 실행하지 않는다고 경고합니다. 크레이트는 이러한 로더를 최선의 방식으로 지원하지만, 엔트리 포인트 전에 모드를 로드하는 로더를 사용하는 것이 강력히 권장됩니다. me3와 호환되는 소울 게임의 경우, 크레이트는 disable_arxan 프로필 옵션을 통해 이미 해당 모드 로더에 통합되어 있으며, 모드가 이미 me3에 의존하는 경우 이를 사용하는 것이 권장됩니다.
커스텀 패처를 작성하는 경우(예: 디스크의 실행 파일을 패치하기 위해), README는 dearxan::analysis::analyze_all_stubs 또는 동등한 API로 Arxan 스텁을 분석하고 결과 StubInfo 값을 dearxan::patch::ArxanPatch::build_from_stubs에 전달한 후 패치를 수동으로 적용해야 한다고 말합니다. 일부 게임에는 첫 번째 분석 패스에서 발견되지 않은 암호화된 스텁이 있으므로 새 스텁이 발견되지 않을 때까지 이 과정을 반복해야 합니다. 라이브 실행 이미지의 경우 Arxan 엔트리 포인트 스텁이 호출된 것이 중요합니다. FromSoftware 바이너리는 SteamStub으로 래핑될 수도 있습니다.
README는 명령어 변형 및 제어 흐름 난독화, 실행 시 복호화되는 민감 함수의 저장 시 암호화, 안티디버그 검사, 버퍼에 플래그를 쓰거나 스택 또는 제어 흐름 손상을 통해 게임을 충돌시키거나 함수 코드를 복구할 수 있는 무결성 검사 등 Arxan 기능을 설명합니다. Arxan 로직은 임의의 게임 함수에 삽입된 스텁에 포함되어 있습니다. 이 스텁은 컨텍스트를 저장하고, Arxan 로직을 실행하고, 컨텍스트를 복원한 후 점프하여 돌아갑니다.
크레이트는 이러한 스텁을 찾아 제어 흐름 그래프를 방문하여 Arxan을 비활성화합니다. 부분 명령어 에뮬레이션을 사용하고 분기에서 프로그램 상태를 포크하여 제어 흐름 난독화를 처리한 다음 스텁 구조를 분석하여 패치를 추출합니다. 이는 일반적으로 스텁의 스택을 수정하는 트램펄린으로의 점프 훅이며, 때로는 복호화된 코드 영역을 추출하여 해당 내용을 직접 쓰는 것도 포함됩니다.
기능 플래그:
- disabler (기본값): neuter_arxan을 통해 Arxan을 완전히 비활성화하는 패처를 제공합니다.
- rayon (기본값): rayon을 사용하여 스텁 분석을 병렬화합니다.
- ffi: C 함수 dearxan_neuter_arxan을 내보냅니다.
- instrument_stubs: disabler를 기반으로 각 스텁을 계측하여 처음 호출될 때 메시지를 기록합니다. README는 레지스터 클로버링으로 인해 다크 소울 리마스터드 이외의 게임에서는 현재 충돌한다고 경고합니다.
- internal_api: dearxan::analysis::internal을 통해 대부분의 내부 바이너리 분석 API를 노출합니다. 이는 안정화되지 않았으며 부 버전 간에 변경될 수 있습니다.
크레딧에는 neuter_arxan의 전역 동기화, Arxan이 복호화할 메모리 영역을 저장하는 방식의 리버스 엔지니어링 지원, 암호화 알고리즘(32라운드 TEA) 발견에 대한 dasaav의 기여가 언급되어 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.