나는 최근 프로그래머들이 Game Dev Tycoon 의 제작자와 같은 해적으로부터 게임을 보호하는 영리한 방법에 관한 기사를 읽고있었습니다 . 게임 호의 사본이 실제로 기술 수준에서 불법 복제 된 버전이라는 것을 어떻게 감지합니까? 내가 조사한 가장 가까운 대답은 SNES 카트리지가 해적인지 여부를 어떻게 감지 할 수 있 었는가하는 것이지만 그 전략은 PC에는 적용되지 않습니다.
나는 최근 프로그래머들이 Game Dev Tycoon 의 제작자와 같은 해적으로부터 게임을 보호하는 영리한 방법에 관한 기사를 읽고있었습니다 . 게임 호의 사본이 실제로 기술 수준에서 불법 복제 된 버전이라는 것을 어떻게 감지합니까? 내가 조사한 가장 가까운 대답은 SNES 카트리지가 해적인지 여부를 어떻게 감지 할 수 있 었는가하는 것이지만 그 전략은 PC에는 적용되지 않습니다.
답변:
가장 먼저해야 할 일은 컴퓨터가 파일의 불법 복제 여부를 알 수있는 방법이 없다는 것입니다. 불법 복제는 법적 / 도덕적 용어이므로 파일에는 의미가 없으며 1과 0으로 만 구성됩니다.
즉, 불법 복제 방지 및 대책은 일반적으로 사용자가 게임의 사본을 구매 한 경우에만 얻을 수있는 물건 (일반적으로 물건)이 있는지 여부를 알아내는 데 중점을 두어 복제하기가 어렵습니다. 이 작업을 수행하는 방법에는 여러 가지가 있으며 각 방법에는 단점과 단점이 있습니다. 나는 몇 가지를 언급 할 것이다 :
초기 게임은 사용자에게 게임 상자에서 단어를 입력하도록 요구했습니다. 복사기 나 스캐너는이 기술을 쉽게 물리칩니다.
최근에는 미디어 검사가 더 일반적입니다. 게임을 실행하려면 게임 CD가 드라이브에 있어야합니다. 이를 구현하기 위해 예를 들어 게임을 실행할 수없는 CD에서 중요한 데이터 파일에 액세스하거나 CD에 파일이 있는지 간단히 확인할 수 있습니다. 이것은 CD를 복제하기 어려울 때 잘 작동했지만 CD 복사기 및 최근에는 드라이브 에뮬레이터를 사용하여 이러한 기술을 쉽게 물리 칠 수 있습니다.
그러나 CD 사본은 완벽하지 않으므로 다른 많은 기술은 CD가 원본 압축 CD인지 또는 사본인지 감지하는 데 중점을 둡니다. 이를 구현하기 위해 게임에서 프레스 타임 동안 게임 디스크에 삽입 된 비표준 요소 를 확인할 수 있지만 CD 버너를 통해 CD-R에서 쉽고 안정적으로 복제 할 수는 없습니다. 이를 수행하는 몇 가지 일반적인 방법은 다음과 같습니다.
CD 파일 시스템에서 액세스 할 수 없지만 존재하는 파일을 찾을 수있는 마스터 링 중에 CD에 더미 "고스트"파일을 작성합니다. 이 데이터는 파일 별 디스크 사본에 없습니다. 전체 디스크 이미지를 복사하면이 파일들이 복사됩니다.
또 다른 방법은 디스크에 의도적으로 오류를 삽입하는 것입니다. CD에는 오류 수정 코드가 포함되어 있습니다. 디스크 리더로 투명하게 수정할 수있는 데이터에 오류를 삽입하면 디스크는 정상적으로 작동하지만 오류는 CD-R에 복사되지 않습니다. 이러한 의도적 인 오류를 찾아서 게임은 CD를 원본 압축 사본으로 간주 할 수 있습니다. RAW 디스크 이미지 복사는이 방법을 능가합니다.
주소는 같지만 데이터가 다른 트윈 섹터를 삽입하면 데이터를 앞뒤로 검색 할 때 다른 결과가 나타납니다. 이것의 존재를 확인하는 것이 가능하며,이 트윈 섹터로 CD를 복제하는 것은 매우 어렵습니다.
CD에서 구덩이의 실제 위치를 측정 합니다. 다시 한번, 같은 위치에 구덩이로 CD를 복제하는 것은 매우 어렵습니다.
그러나 Daemon Tools 또는 Alcohol 120 % 와 같은 많은 CD 에뮬레이터 가 실제로 이러한 기능을 에뮬레이션 할 수 있습니다. 이 때문에 많은 게시자가 CD 에뮬레이터 감지 단계를 포함하고 에뮬레이터가 감지되면 게임이 실행되지 않도록합니다. 에뮬레이터 감지기의 구현은이 답변의 범위를 벗어납니다.
게임은 실제 CD를 확인하는 대신 또는 제품 키 와 같은 일부 데이터를 입력하도록 사용자에게 요청할 수 있습니다 . 제품 키를 사용하는 몇 가지 방법은 다음과 같습니다.
키의 수학적 특징 확인. 그러나 이것이 키 복제를 방해하지는 않으며 검사 알고리즘이 발견되거나 리버스 엔지니어링 된 경우 해적은 마음대로 게임에 합법적 인 것으로 보이는 새 키를 만들 수 있습니다. 원하는대로 키를 생성하는 소프트웨어를 " keygens "라고합니다.
사용자 하드웨어를 기반으로 해시를 생성하고이 해시와 제품 키 (일반적으로 "설치 키"라고하는 조합)를 게임 회사 소유의 서버로 보내고 해시와 시리얼을 기반으로 활성화 키를 만듭니다 . 모듈 식 산술 또는 타원 곡선이있는 일부 방법과 같은 단방향 숫자 방법을 사용하면 게임에서 활성화 키가 해시 및 직렬 코드와 일치하는지 확인하고 일치하는 경우에만 실행할 수 있습니다. 이 기술을 "활성화"라고합니다.
활성화시 서버는 동일한 직렬 코드를 가진 여러 하드웨어 해시에 활성화 키를 제공하지 않을 수 있습니다. 이로 인해 시리얼 코드와 활성화 키가 복사 되더라도 활성화 키가 일치하지 않고 다른 컴퓨터에서 게임이 실행되지 않습니다.
이러한 모든 조치는 사용자가 구매 한 게임 사본을 소유하는지 여부를 찾기위한 것입니다. 그러나이를 구현하려면이를 확인하는 프로그램 코드가 필요합니다. 해적 은 복제 방지 메커니즘 자체를 공격하는 대신 게임 코드를 수정 하여 검사 를 비활성화하거나 무시할 수 있습니다. 불법 복제 방지 검사를 제거하기 위해 게임 바이너리를 수정하는 행위를 "크래킹"이라고합니다.
크래킹은 단순히 게임 실행 파일을 분해하고 관련 검사가 이루어지는 장소를 찾거나 검사를 비활성화하도록 수정하거나 결과를 무시하고 다시 조립하는 것으로 구성 될 수 있습니다. 크래킹을 방지하는 몇 가지 방법은 다음과 같습니다.
해시로 바이너리를 확인 중입니다. 그러나 해시를 검사하는 프로그램이 있어야합니다.
프로그램 또는 단순히 점검 루틴을 암호화하고 런타임에 해독합니다. 하나 이상의 추가 암호 해독 단계가 포함되므로 분해가 더 어려워집니다. 암호 해독 키가 프로그램에 포함 된 경우 (해당 암호가 없으면 게임 암호를 해독 할 수 없기 때문에) 해적은 암호 해독을 역 엔지니어링하고 루틴을 찾고 복제 방지 기능을 수행 할 수 있습니다.
이 때문에 게임 게시자는 키를 최대한 찾기 어렵게하고 선택적으로 해독 알고리즘을 이해하기 어렵게 만들고 싶습니다. 키를 찾기 어려운 몇 가지 방법은 다음과 같습니다.
이상한 방식으로 작성하여 모호하게하십시오. 이것은 단순히 크래킹 프로세스를 느리게합니다.
위에서 언급 한 직렬 보호와 유사한 머신 별 마스터 키를 작성하십시오.
그러나 키를 만드는 데 사용하는 방법에 관계없이 암호 해독이 진행되는 동안 키 자체는 메모리에 저장됩니다. 메모리 검사기, 디버거 및 에뮬레이터는 메모리에있는 동안 해적이 키를 찾아 복사하는 데 도움을 줄 수 있습니다. 메모리 엿보기는 여러 가지 방법으로 공격 할 수 있습니다.
지정된 지역에서 메모리 액세스를 감지하고 다른 곳으로 주소를 리디렉션하는 권한있는 서비스가 있습니다. 이를 위해서는 링 0 액세스가 필요하며이를 수행하는 프로그램은 합법적이지 않은 목적 으로 더 일반적으로 사용 되므로 바이러스 백신 소프트웨어는 일반적으로 차단합니다. (많은 게임 및 기타 소프트웨어가 실행 중 바이러스 방지 기능을 해제하도록 요청하는 이유). 이를 올바르게 수행하는 소프트웨어를 작성하는 것은 매우 어렵고 호스트 OS의 안정성과 보안을 쉽게 손상시킬 수 있습니다. XCP 스캔들 이 방법 사라 잘못의 구현의 좋은 예입니다.
최신 하드웨어 및 운영 체제는 메모리 커튼 , 보안 미디어 경로 및 TP 모듈 과 같은 일부 도구를 제공 하여 메모리 검사에 저항하면서 데이터를 해독하는 프로그램을보다 쉽게 만들 수 있습니다.
사소한 것에서부터 난해한 것에 이르기까지 불법 복제를 공격하는 더 많은 기술이 있습니다. 불행히도, 이러한 모든 기술이 실제 사본을 인식하지 못할 수 있으며 일반적으로 오 탐지율이 높은 공격적인 기술입니다.
게임 게시자는 일반적으로 구현 비용, 예상 크래킹 시간 및 오 탐지 비율이 예상과 일치하는 기술 세트를 선택하려고합니다.
불법 복제 방지가 완전히 깨지지 않는 것은 일반적인 오해입니다. 대부분의 게임 판매는 출시 후 처음 몇 개월 동안 이루어 지므로 불법 복제 방지 체계는이를 깨뜨리기 전에 게임 게시자가 중단되기 전에 많은 양의 수익을 모을 수있는 충분한 시간을 소비하는 경우 일반적으로 효과적인 것으로 간주됩니다.
Game Dev Tycoon과 관련하여 불법 복제 방지 기술을 사용하지 않았습니다. 그들은 단순히 "깨진"빌드를 만들어 언급 한 기사의 시작 부분에 언급 된 것처럼 BitTorrent에 배포했습니다.
자신의 실행 파일에서 MD5 또는 SHA256을 실행하면 최종 릴리스를 빌드 한 후 바이너리로 하드 코딩 된 것에서 서명이 변경된 것을 감지하면 분명 누군가가 실행 파일을 해킹 한 것입니다. 그런 다음 대부분의 회사는 더 이상 PE가 깨 졌거나 바이러스가 발견되었다고 말하는 팝업을 더 이상 표시하지 않고 게임을 종료합니다. 해커는 매우 빠르게 반열됩니다. 대화 상자의 메시지 루프에서 게임이 일시 중지되었으므로 대화 상자가 표시된 분기로 인해 즉시 확인하고 조건 확인시 코드를 변경하여 분기를 우회하십시오.
오늘날 기업들은 게임 플레이를 매우 미묘하게 변경하여 몬스터의 수명을 곱하여 게임을 플레이 할 수 없게 만들거나이 관리 게임에 엄청나게 영리하게 통합하여 게임 회사를 운영하고 너무 많은 플레이어가 게임을 해적하고 있기 때문에 결국 느슨해집니다. 이 경우에 좋은 mise en abyme. 때때로 그것은 단지 회사 서버에 업로드 된 적기를 가져오고 지원을 위해 전화를 걸 때 연설을하거나 신원을 밝히는 데 갇혀 있습니다.
그러나 이것은 모든 주제이며 기술은 해싱입니다. 이 검사는 바이너리의 여러 곳에서 실행될 수 있으므로 해커가 하나를 찾아 지우면 충분하지 않습니다.
편집 : 게임을 그대로 복사하면 게임에 불법 복제 방지 조치가 전혀 없다면 효과가있을 수 있습니다. CD 버너 시대 이전의 아주 오래된 게임으로 작업하고있었습니다. 그렇기 때문에, 대부분의 경우, 복사 된 설치 폴더 만이 아니라 게임이 실행되도록 설치되어야합니다. 여기에는 시스템의 모든 곳에 숨겨진 파일과 레지스트리 키가 있습니다. 게임은 이러한 것들이 있는지 확인합니다. 설치 프로그램 만 만들 수 있습니다. 또한 설치 프로그램은 CD에서만 실행할 수 있으며 디스크의 첫 번째 바이트에서 오류 수정 코드 시스템을 준수하지 않는 불규칙한 비트로 인해 복사 할 수 없으므로 대부분의 CD 플레이어 드라이버가 종료됩니다. 알코올의 nero와 같은 일부 복사 소프트웨어는 오류를 무시하도록 제안하지만 오류가 발생한 것이 수정 된 복사 본인 경우 설치 관리자가이를 감지하여 다시 이동합니다.
EDIT2 :
질문 : 파일을 해시 한 다음 해시를 변경하는 파일에 해시를 삽입하는 방법은 무엇입니까?
@ Byte56 : 젠장 우리는 여기에 지능형 의견을 얻고 있습니다 :) 그렇습니다. 역설이며 해결할 수 없습니다. 따라서 해시는 해시를 포함하지 않는 바이너리 부분에서 만들어야합니다. 그리고 자체 검사로 해싱 할 때 해당 영역을 제외하려면 검사 코드가이를 알아야합니다. ~~ #### [put hash here] #### ~~와 같은 태그를 사용하여 해시를 묶고 제외하는 사람들을 보았습니다. 그러나 해커가 쉽게 발견 할 수 없다는 결점이 있기 때문에 해시가 뒤섞여 여러 위치에 흩어져 있어야합니다. 암호화되지 않은 이유조차도 동일한 위장 작업으로 개인 키를 저장합니다.
그들은 단지 맥 게임에서 확장 파티션을 넣을 수 없다
맥은 ext를 읽을 수 없습니다