스핵.. 충분히 맘만 먹으면 막을 수 있습니다.
원리는 컴퓨터 시간을 결정하는 Tick이 움직이는 주기가 있고, 이 Tick에 따라서 이벤트 틱 (설명하기 쉽도록) 이 한번씩 발생되는데, 이 Tick의 시간을 설정하거나, 혹은 이벤트 틱의 주기를 높게 만드는 (요즘 나오는 SpeederXP) 원리의 프로그램 입니다.
단순히 클라이언트상의 비교만으로는 체크하기 어렵지만, 서버와 동기화 한다면 충분히 가능합니다.
첫번째로, 서버에서 가는 시간과 클라이언트상에서 간 시간 (GetTickCount) 을 비교해서 클라이언트가 이상하게 빠른지 검사합니다. 일례로 클라이언트에서 10000ms 마다 신호를 서버로 보내주게 해서, 서버에서는 이 신호 Interval이 약 10초가 아닌 좀 빨리 들어왔을때의 카운트를 세서, 세번의 연속 카운트가 들어가면 에러를 발생하면 됩니다.
두번째로, 요즘 돌아다니는 XP의 경우, Time Tick에는 영향을 미치지 않고 GetTickCount 에 해당하는 클럭만 손대므로, 실질적인 GetDateTime 등에서 나오는 시간과, GetTickCount에서 나오는 시간을 비교함으로, GetTickCount가 이상하게 빠르다는 것을 감지할 수 있습니다.
세번째로, 스피드핵을 다시 끄면 (끈다기보다 속도를 조절하면), 내부적으로 계산된 원래 시간, GetTickCount 로 돌아오므로, 서버로 전송된 GetTickCount가 다시 급격하게 돌아가면 에러를 발생하시면 됩니다.
다만 유의하실점은, GetTickCount가 애슬론 계열의 CPU에서 비교할 시 약간의 오차가 있으며 (이건 정확히 무슨 오차인지는 모르겠습니다. 저도 아는 분이 경험했다고 들은거라 ^^) 또 두번째 방법으로는 요즘 XP에서 자동으로 인터넷 시간으로 동기화 시켜주는 기능이 있어서 시간이 갑자기 틀려지는 경우도 있으므로, 횟수의 여분을 제공해야 하며, GetTickCount가 정확한 Tick시간이 아닌 컴퓨터마다 약간의 오차를 발생하므로 (하루 컴퓨터를 켜 놓으면 컴퓨터에 따라 약 10분 정도 차이) 누적 계산이 아닌, 실질적 타임마다 계산을 해서 오차는 버리는 그러한 방식을 택하시는 것이 좋으실 것 같습니다.
이러한 방법은 아니더라도 스핵 종류가 많지 않으니, 올라온 DLL이나 EXE만 검사해도 충분히 많이 걸러낼 수 있을것이라고 봅니다. :)
cuperido
이재훈 님이 쓰신 글 :
: 여기에 이렇게 글을 올려서 죄송하구요
: 너무 답답해서 이렇게 글을 올립니다.
: 스핵 이거 정말 막을 방법이 없는 겁니까? 스핵에 대해서 프로그래머님들에 정확한 답을 듣고 싶습니다.
: 스핵이란 어떤 것인지.. 그 원리는 어떤 것인지.. 그리고 이것을 막을 방법은 어떤것인지..
: 스핵 이거 막지 못한다면 더이상 온라인 겜 못할거 같습니다. 온라인 게임 1위 한국 스핵으로 멍들다ㅠ.ㅠ
: 프로그래머님들의 확실한 설명을 듣고 싶습니다.
:
:
: 요즘 들어 바람도 많이 불고 하는데 감기 조심하세요.
|