https://saevo.online/  

해외(?)에서 디스코드 서버로 운영하고 있는 서든어택인데 생각보다 잘만들어서 분석을 해봤다.

별도의 anticheat도 존재했으며 Themida 패킹, 코드 가상화 기법까지 사용했음

 

anticheat의 로직은 nexon의 blackcipher와 유사도가 있었음.

다른 게임의 anticheat들도 이와 같은 방식이거나 다른 방식으로 무력화 시킬 수 있다.

 

 

1. 별도 launcher와 clinet가 존재함 >> discord_game_sdk를 사용해 token을 얻어 unique값으로 활용함

discord 연동

 

 

2. launcher에서는 현재 파일들을 hash, size를 검사해 무결성 검사를 한다. 변조가 되었을 시 해당 서버에서 받아옴. 

   Themida 패킹을 해놓았기 때문에 동적으로 무력화를 해야함.

launcher 로직1
launcher 로직2

 

3. anticheat는 2개의 파일이 존재하며 로그, 설정파일은 암호화시켜 작성 후 서버로 전송시킴.

anticheat file
Themida

 

4.  AHT_Main.dll의 export 함수 중 "Ordinal2"는 실제 행위를 하는 주소이며, VirtualAlloc을 통해 임의의 주소값으로 CRC 행위를 수행한다.

AHT_Main.dll_Ordinal2 Thread

5.  AntiHackTool.dll은 AHT_Main과 같이 VirtualAlloc을 사용해 임의의 주소값으로 AHT_Main의 CRC 검사를 진행한다.

AntiHackTool.dll Thread

6.  Clinet 내부의 anticheat, cshell.dll, d3d, 등 code의 변조를 실시간 감지함.

CRC

7. anticheat들의 return back trace를 살펴보면 호출 흐름을 파악 가능하다. esp trick을 이용해 무력화를 진행한다.

   Sleep 함수 호출 전 esp의 값은 return address가 담기는데 해당 주소를 수행하지 못하게 변경해주는 것이다.

 

# 참고로 Win7이후 kernel32의 API를 호출 시 Kernel32.dll!Sleep > KernelBase.dll!Sleep으로 jmp 후 호출한다.

esp trick

 

8. 위의 방식을 토대로 Code Injection을 해주면 된다. 간단한 Cheat Engine Script로 제작했는데 dll으로 제작해봐야겠당

 

   # 이전에 CRC를 통해 변조를 감지한다고 설명 했었는데 CRC는 내부 모듈의 대해서만 검사를 하므로 system 내의 있      는 모듈의 대해서는 검사를 못한다.

 

이것저것 하는게 너무 재밌어서 이제 악분도 다시 해야겠음..

궁금하신게 있거나 틀린점이 있으면 지적해주십쇼!

'Develop > C, CheatEngine' 카테고리의 다른 글

Five M Cheat Engine Bypass  (4) 2021.09.29
debugge, debugger  (0) 2021.09.28

+ Recent posts