보안을 우회하려면 보안이 어떻게 돌아가는지를 알아야...
말 그대로 지피지기면 백전백승이라는 말이랑 같습니다. 앞으로 무엇을 하시든 간에
대부분의 프로그램에는 그에 걸맞는 보안 체계가 있는 경우가 태반일겁니다.
그 프로그램에서 변조나 데이터 정보를 얻고 싶다면 그 보안을 우회를 하든 구멍을 살짝
내서라도 틈을 봐야 안에 내용을 잠깐이라도 보든가 하겠죠?
언젠가 잠깐 짚고 넘어간 적이 있습니다. 게임 보안으로 가장 많이 만나게 되는게
Xigncode와 NGS(Nexon Game Security), 타 플랫폼에서는 배틀아이와 EAC 정도겠죠.
이 보안들은 저희가 당연하게 켰었던 치트엔진 같은건 기본적으로 다 감지를 합니다.
세부적으론 감지 방식에서 차이는 있겠지만 큰 틀은 벗어나지는 않습니다. 보안 개발자도
결국 무에서 유를 창조하는게 아니라 있는 API 함수들을 활용하여 만들기 때문이죠.
이들 중 NGS를 제외한 나머지 게임 보안 프로그램들은 기본적으로 메모리에 액세스를
하지 못하게끔 차단이 돼있습니다. 즉 치트엔진을 키더라도 어셈 명령어들이나 이러한
데이터들이 안 보인다는 것이죠. 어떻게 이것이 가능할까요?
이런식으로 게임 실행이 되기 전 보안이 먼저 실행이 됩니다. 보안이 실행되고 난 이후 치트엔진을
켜보면 치트엔진이 계속 최소화 되면서 메모리는 보이지 않는 현상을 볼 수 있습니다.
프로세스를 어태치 했지만 메모리는 보이지 않는 상태이고 얼마 뒤에 게임이 꺼지고 메박이 뜹니다.
우선 메모리를 볼 수 있어야 게임 내부를 쳐다보든지 말든지를 할 수 있겠죠.
일단 당장 제일 쉬운 방법은 보안이 실행 되는 것을 막는 행위입니다. 그러면 볼 수는 있죠.
하지만 이 Xigncode 3의 경우 보안이 제대로 동작하고 있는지에 대한 검증 방식의 일종인
하트비트라는게 있습니다. 하트비트라는게 뜻대로 보면 심장 박동이라는 뜻인데요.
사람이 심장박동이 멎으면 죽는거죠? 게임 서버에서도 이 보안 프로그램이 살아서
잘 작동중인지를 검증을 하는거죠. 신호가 안 오면 죽었다고 판단하고 게임 서버를
끊어버리는 식으로 작동을 할 것입니다. 안하는 게임의 경우는 Thanks 하고 외치면 되고..
물론 이 하트비트마저도 구현을 해서 정상적으로 동작중이라고 뻥카를 치는 방법도
존재합니다만 여기서 다룰 부분은 아니기에 일단은 넘어가겠습니다.
그러면 이렇게 메모리를 못 보게 보호하는 방법이 뭔지를 알아봐야 하는데 이 예시의 경우
xhunter1.sys라는 드라이버를 이용하여 메모리에 액세스를 못하게 차단하는 것입니다.
ObregisterCallbacks라는 콜백함수를 사용하여 차단하는 방식입니다. 직접 설명하기엔
잘 설명된 곳이 좀 있어서 링크로 첨부하도록 하겠습니다.
위의 형식을 토대로 응용을 했다고 보시면 되겠죠. 그러면 우리가 생각해볼 수 있는건 뭐인가..
똑같이 드라이버를 만들어서 xhunter1.sys가 ObregisterCallbacks 후킹을 해둔 곳을 Restore 해줘야하나..
아니요, 그럴 필요는 없습니다. 다음으로 해볼건 xhunter1.sys라는 드라이버가 로드되지 못하게끔
막아버리는 형식이 있겠죠. 이 경우엔 예전에는 먹혔는데 지금은 막았을지 모르겠습니다.
일단 막힌건 둘째 치더라도 메모리를 볼 수 있음에는 변함이 없긴 하니까요.
그러면 sys 같은 드라이버를 로드할 때 사용하는 API 함수가 뭔지를 알아봐야겠죠.
OpenServiceA, OpenSerivceW 이렇게 2개가 있겠습니다. 한 번 잠깐 보도록 하죠.
걸리고 난 뒤에 ESI 부분을 보니까 xhunter1인걸 봐서 드라이버 로드 하려는 상황에 걸린거 같습니다.
간단하게 걸린 채로 드라이버를 로드 못하게끔 리턴을 시켜보고 진행해봅니다.
치트엔진 감지하는 곳은 그대로 살아있기 때문에 꺼지긴 했습니다만.. 메모리 액세스는 가능해졌습니다.
이런식으로 메모리를 액세스 못하게 차단하는 건 드라이버를 올려서 하는 행위다 < 라는 것만
기억해두시면 좋을거 같습니다.
그러면 치트엔진이라는걸 감지하는 방법엔 뭐가 있을까요?
대표적으로 떠올릴 수 있는건 캡션명과 PID일것입니다. 이를 읽는 API 함수들도 다 있기 때문에
그런 API들을 하나씩 디버깅 해보면서 하나씩 우회해가는 과정이 보안 우회라고 볼 수 있습니다.
사실 여기에서 볼 수 있는 모든 문구가 표적이 될 수 있습니다. 실제로 거의 모든 문구를 감지하는 보안도
존재를 하니까요.. 이 모든 감지를 다 없앨수가 없어서 치트엔진을 개조하는 경우가 더러 있습니다.
개조한 엔진들은 일반적인 엔진 형태는 갖추고 있지만 문구라든지 이런건 전부 랜덤화이거나 이렇거든요.
우회라는 건 다 떠먹여줄 수 있는 영역이 아니기 때문에 직접 해봐야하고 직접 하게 되면 엄청난 시간을
소비하는 과정을 거칠겁니다. 핵을 찾고픈게 있다고 하면 시간 투자를 할 각오를 하시는게 좋겠습니다.
'Reversing & Cheat Engine' 카테고리의 다른 글
37. 하드 밴이 무엇인가 (0) | 2024.04.10 |
---|---|
35. Cheat Engine Tutorial 8 (0) | 2024.03.20 |
34. Cheat Engine Tutorial 7 (0) | 2024.03.19 |
33. Cheat Engine Tutorial 6 (0) | 2024.03.18 |
31. Cheat Engine Tutorial 4 (0) | 2024.03.16 |