CSCODEP
Loading...
CSCODEP.COM

CS2 Source 2 엔진 분석: 치트 개발 관점

치트 개발을 위한 CS2의 Source 2 엔진(엔티티 구조, 네트워크 동기화, 오프셋 안정성, VAC에 대한 PX8.2의 위치 지정)을 검사합니다.

엔터티-구성 요소 시스템 및 데이터 스키마

CS2에서 Source 2는 맵의 각 플레이어, 무기 및 개체를 별도의 개체로 유지합니다. 이러한 엔터티는 스키마 기반 클래스 계층 구조에 저장됩니다. C_CSPlayerPawn과 같은 클래스에는 체력, 위치, 원근감, 뼈대 매트릭스와 같은 데이터가 멤버 변수로 포함되어 있습니다. ESP 및 wallhack과 같은 기능은 실제로 이 엔터티 목록을 스캔하고 각 개체의 m_vecOrigin 및 m_iHealth 값을 읽습니다. 뼈 데이터는 뼈대 ESP에 플레이어 실루엣을 그리는 데 사용됩니다. 이 구조를 이해하면 어떤 데이터가 얼마나 자주 업데이트되고 어떤 오프셋이 업데이트에서 가장 많이 변경될지 예측하기가 더 쉬워집니다.

틱 속도, 스냅샷 네트워크 및 보간 지연

CS2 서버는 기본적으로 64틱으로 작동하며 플레이어 위치는 각 틱마다 스냅샷으로 클라이언트에 전송됩니다. 클라이언트 측에서는 이러한 스냅샷이 보간 버퍼에 보관되고 그 사이의 프레임이 계산되어 채워져 화면에서 부드러운 움직임을 구현합니다. 이러한 지연은 aimbot 및 Triggerbot을 개발할 때 매우 중요합니다. 실제 타겟의 순간 위치와 화면에 나타나는 보간 위치 사이에는 수 밀리초의 차이가 있을 수 있습니다. 이러한 차이를 보상하기 위해 PX8.2는 보간 레이어와 독립적으로 서버에서 원시 스냅샷 데이터를 읽어 조준 계산을 통해 실제 위치에 더 가까운 결과를 제공합니다.

메모리 읽기 방법 및 오프셋 안정성

업데이트 후 가장 문제가 되는 것은 하드 코딩된 메모리 오프셋입니다. Valve는 각 패치마다 클래스의 메모리 레이아웃을 변경할 수 있습니다. 이것이 정적 오프셋을 사용하는 치트가 업데이트 후 몇 시간 동안 작동을 멈추는 이유입니다. 보다 강력한 접근 방식은 서명 검색입니다. 함수 및 변수 주소는 코드 메모리에서 변경할 수 없는 바이트 시퀀스를 검색하여 각 실행 시 동적으로 발견됩니다. 이 방법은 Valve가 기능 논리를 완전히 변경하는 경우가 거의 없고 일반적으로 메모리 순서만 변경하기 때문에 패치에 훨씬 더 강합니다. PX8.2 아키텍처에서는 대부분의 오프셋이 이런 방식으로 자동으로 다시 계산됩니다.

PX8.2 아키텍처와 엔진 레이어의 상호 작용

PX8.2는 프로세스 메모리 내부에 상주하며 게임 프로세스 내에서 직접 실행됩니다. ESP 드로잉의 경우 그래픽 엔진의 드로잉 주기(현재 호출)에 레이어를 추가하고, 레이더 및 스켈레톤의 경우 모든 프레임에서 엔터티 목록을 검색하며 aimbot의 경우 사용자 명령(CUserCmd)이 생성되기 직전 단계에 개입합니다. 이 세 가지 계층은 서로 독립적으로 작동하도록 설계되었습니다. 하나가 비활성화되어도 다른 것들은 영향을 받지 않습니다. Triggerbot 및 레이더와 같은 기능은 별도의 스레드에서 처리되므로 기본 게임 루프의 성능에 영향을 미치지 않으므로 FPS 손실이 낮습니다. 이 모듈식 설계 덕분에 새로운 기능을 추가하려고 할 때 기존 레이어를 다시 작성할 필요가 없으며 관련 모듈만 시운전하고 테스트하면 됩니다.

VAC 및 안전 설계에 따른 포인트

VAC는 알려진 치트 서명, 의심스러운 메모리 영역 및 일반적으로 후크되는 API 호출을 정기적으로 검사합니다. 많은 저품질 치트는 악명 높은 DirectX 후크 포인트를 사용하기 때문에 쉽게 잡을 수 있습니다. 대신 PX8.2 아키텍처는 덜 모니터링되는 내부 호출 지점을 선택하고 각 릴리스마다 메모리 서명을 변경합니다. 이 접근 방식은 CSCodep이 3년 넘게 VAC에서 감지되지 않은 이유에 대한 기술적 기반을 형성합니다. 물론 어떤 소프트웨어도 100% 보증을 제공할 수는 없습니다. 따라서 업데이트 후 대기 기간을 준수하고 HWID Spoofer와 같은 추가 레이어를 활성 상태로 유지하는 것은 위험 관리의 일부입니다.

undefined

undefined