들어가며
안티리버싱 테크닉을 이용해 안티치트솔루션 (게임가드 같은)을 만드는 걸 간단히 다뤄보겠습니다.
유저모드 (ring3) 위주이며 커널모드 (ring0)의 드라이버등은 다루지 않습니다.
리버싱
Reverse Engineering 을 줄여 Reversing으로 흔히 말하며, RE, 역공학, RCE 등으로 불리기도 합니다.
뜻대로 역으로 분석하는걸 칭하며, 대상으로는 exe, dll, sys 파일 등이 있습니다.
이러한 실행파일들을 대상으로 코드를 분석해 프로그램이 어떤 기능을 하는지 함수는 어떤 역할인지를
알아내는 작업하며, 프로그래밍 언어가 하나가 아닌만큼 여러 언어로 만들어졌을테니 어셈블리어를 알아두어야 합니다.
안티리버싱
말 그대로 리버싱을 어렵게 만드는 작업입니다. 난독화, 가상화하여 코드 읽기의 난이도를 올리거나 안티디버깅 테크닉을 사용해 디버깅을 어렵게 만들수 있습니다. 보통 온라인게임, DRM이 적용된 영상, 노래, 문서 그리고 악성코드 등에 사용되며 분석을 최대한 어렵게 하여 최대한 방지하는 목적으로 이용됩니다.
요즘 세상에서는 대부분의 기법들이 잘 알려져 있으며 학습하기 좋은 세상입니다.
창과 방패의 싸움이지만, 창이 유리한건 사실입니다. 마치 총알과 방탄유리 같은 셈이며, 결국 언젠간 뚫리기 때문에
최대한 내구성이 좋게 만드는 것과 비슷하다고 보면 됩니다.
우선 보호할 프로그램을 만들어주겠습니다.
클라이언트
만들어갈 AnticCheat.dll 을 불러오는 프로그램입니다.
FindWindow
해당 함수를 통해서도 안티 디버깅을 구현가능합니다.
디버거의 클래스명과 윈도우명을 감지해 디버거를 감지하는 방법입니다.
우회법도 너무나 쉽고, 해커에게 일말의 귀찮음 정도는 줄 수 있겠네요
ProcessName
클래스명고 윈도우명이 변경되어 우회됐다면 프로세스명으로 감지해야겠군요.
이런식으로 취약점을 하나씩 막아나가는게 보안솔루션의 숙명이 아닐까 싶습니다.
CRC Check
CRC를 통해 파일변조가 일어났는지 체크해보겠습니다. 우선
CRC란 Cyclic Redundancy Check의 약자로, 무결성을 체크하는 방법중 하나이며, 원본 데이터가 멀쩡하다는걸 증명하기 위해 사용됩니다. 그 과정에서, 여러 종류의 다항식이 쓰이며, 여기선 널리 사용되는 CRC다항식인 CRC-32 를 사용합니다. CRC 32 다항식(Polynomial) 은 아래와 같습니다.
다항식을 16진수로 표현하려면 위 표처럼 x의 차수에 해당하는 비트에 1을 쓰고 나머지는 0을 써주면 됩니다.
그럼 바이너리로 나오고 위의 주황색 표처럼 되는데 31번째 비트부터 읽게되면 0x4c11db7이 나오고
역으로 0번째 비트부터 읽게되면 0xedb88320이 나옵니다.
보호할 클라이언트의 CRC32값을 구해 넣어주고, 파일에 변조가 일어난다면 CRC32 값이 바뀌며 변조를 감지합니다.
외출이 있어 여기서 끊고 다음편에서 이어가겠습니다.
https://imoracle.tistory.com/53
'Reverse Engineering > GAMEHACK' 카테고리의 다른 글
[Anti - Reversing] 보안솔루션 직접 제작하기 - 3 - (0) | 2024.07.06 |
---|---|
[Anti - Reversing] 보안솔루션 직접 제작하기 - 2 - (0) | 2024.07.05 |
[Game] 지뢰찾기 월핵 제작 - 2 - (1) | 2024.07.04 |
[Game] 지뢰찾기 월핵 제작 - 1 - (0) | 2024.07.04 |
[Assaultcube] FPS게임 분석 및 핵 제작 - 2 - (0) | 2024.07.04 |