기본 콘텐츠로 건너뛰기

나의 게임 해킹 역사... 해킹 경험이 직업으로...




요즘 통 콘텐츠를 올리지 못했는데요.. 

사람마다 제각각 영상을 만드는 방법이 있는데요..
전 보통 원고를 먼저 쓰고, 
녹음을 하고, 
그에 맞는 영상이나 이미지들을 찾아서 
편집을 하면서 하나의 영상이 만들어집니다. 

원고를 쓰고 있는게 많지만 아직 탈고한 것이 없다보니 계속 영상 제작이 늦어지고 있습니다.
보통 원고는 한 번에 쓰는게 아니라
한 번 가닥을 잡고, 며칠에 거쳐서 읽고 수정하고, 끼워넣고를 반복해서 하나의 원고가 완성이 됩니다.
거기서 부터 녹음 자체는 20분 이내에 끝나는데요.. 
녹음 된 파일에 맞추어 편집도 며칠이 걸리네요.. 
게다가 동영상도 많이 찍어서 파일들 정리도 만만찮구요..

그런데 그거랑 달리 
요즘 가장 시간을 잡아먹은게, 
요즘 게임의 흐름을 보고자 게임을 몇 개 설치 했는데, 
이게 시간을 무지 먹었습니다. 

그러다보니 갑자기 생각이 난게.. 
내가 어릴 떄 게임에 빠져들게 된 게 조금 남다르지 않았나 싶어서 한 번 작성해 봅니다. 

제일 처음 컴퓨터를 접한 것은 1982년 금성 FC-30이라는 4bit 컴퓨터였지요. 
그 떄 이미 FC-150이라는 8비트 컴퓨터나 애플 2시리즈가 나왔고, 
그 즈음에 MSX라는, 게임이 엄청많은 PC도 나왔지요.. 

그 속에서 초창기 PC 게임을 접하게 되었는데, 
게임 속의 나는 너무 약하더랍니다. 
실력도 없고, 지식도 없고.. 무작정 맨땅에 헤딩하면서 익히는 것이 너무 비효율적이었지요..
그래서 게임속에서만큼은 전지전능이고 싶다는 일념하에
처음엔 공략집을 찾아다니고 무작정 공략을 했습니다. 

이 때는 게임을 전문적으로 복제를 해주는 가게에서 
복제된 게임을 샀는데, 
사람을 모으기 위해 은마 상가에 있는 복제 가게에서는 
한국어로 된 공략집과 영어 원본으로 된 매뉴얼 등 많은 자료를 
복사해 주었습니다. 

그걸 보면서 즐기던 중에, 
PC잡지에서 게임 해킹에 대한 이야기가 눈에 끌렸지요. 

이 때부터였는데요.. 
제가 한 것, 그리고 경험한 저의 해킹의 역사를 알려드릴까 합니다. 

처음에 손을 댄 것은 세이브데이터 해킹이었습니다. 
가장 쉽고, 1990년대에는 거의 모든 게임이 네트워크가 없는 환경이다보니
싱글 게임이었고, 도중에 게임 데이터를 저장할 수가 있었습니다. 

이 떄 한창 했던게 울티마 시리즈와 삼국지 시리즈였는데.. 
세이브데이터를 보면 모두 HEX코드로 되어 있습니다. 
HEX코드는 2자리의 경우 최대 255까지의 숫자를 기록할 수 있고, 
두 셋트인 4자리라면 65535, 이렇게 16승씩 올라가고 
전체 값을 HEX화 한 뒤에 뒤쪽 데이터부터 배치된다는 사실을 알게 되었지요. 

그 덕분에 HEX코드를 읽는 방법에서 명령어들도 덩달아 공부하기 시작했고, 
C언어보다 어셈블리를 더 좋아하는 고등학생이 되었네요..

그렇게 울티마를 비롯해 다양한 싱글게임을 전지적 시점으로 즐기고 있다가 

스타크래프트가 나왔을 때는 대학생이었는데, 
1년 정도 하다보니 어느새 주변 대학에서 저를 찾아 대결 신청을 하러 왔었습니다. 
전 몰랐는데, 학교앞 게임방에서 게임을 하고 있으면 
누군가 모르는 사람이 내 닉네임을 물어보면서 소문을 들어서 왔다고 1:1을 신청했지요.. 
그럼 가볍게 눌러주고, 그 사람은 좋은거 배워간다면서 인사하고 참 훈훈한 시기였던 것 같습니다.
이 때는 배틀넷이란 서비스에도 조금씩 사람들이 두각을 나타내기 시작했던 때였던 거 같은데요..

저도 누가 배넷에 도전해보라고 해서 해 봤는데,
정확하게 36번 참가해서 32번 디스커넥트 당하고 
채팅으로 치터라는 심한 욕을 얻어먹고 좌절 했는데요.. 
배틀넷에 치팅이 어딨어? 
하고 혼자 놀던 사람이었는데, 
지인들이 치팅 프로그램을 알려주더라구요.. 

맵핵이라고 해서 맵이 원래 검정색이어야 하는데 
시작부터 상대 진영을 알 수 있으니 대책을 세우기 쉬운 툴이 지요.. 
그 외에도 이동 핵, 머니 핵 등이 있었는데요.. 
이들은 모두 메모리 핵으로 
게임을 기동 후 메모리 풀 스캔을 한 뒤에
특정 메모리의 값을 바꿈으로 저런 것들이 가능해지는 것이지요. 

개발자라면 보통, 특정 어플리케이션이 사용중인 메모리 외에는 
다른 프로그램이 못건들게 되어 있다고 배우잖아요? 
하지만 메모리 전체를 읽어서 어드레스만 정확하면 메모리에 기록하는 방법은 많이 있죠. 
요즘은 개발자들이 메모리 주소를 관리하지 않으니 잘 모르지만, 
예전에는 자신이 사용할 메모리 영역을 프로그램에서 먼저 확보한 뒤에 
확보된 메모리 주소를 변수에 저장하고 관리를 했어야 했거든요.. 

그 때 개발한 사람은 이런 메모리 개조 툴 만드는건 
일도 아닐 겁니다. 

저야 치팅프로그램 없이도 스타에서는 거의 전지전능한 상황에서 
배넷은 디스커넥트만 당하고 욕만 얻어먹다보니
그냥 학교 주변에 게임방에서 혼자 놀다 보면
여러 학교에서 소문을 듣고 찾아와서 대전을 받아주며 즐기던 시간이 있었구요.. 
이러다가 시들해져서 그만둘 까 하던 찰나에 

지인이 제안을 했는데요.. 
서울 시내에 스타로 유명한 사람들이 모이는 PC방을 찾아 
도장깨기를 하자고 했습니다. 

이 때 세 명이 팀을 결성했는데, 
이 중 한 명이 약팔이 라고 해서 게임방에 들어가자 마자 
카운터에서 큰 소리로 
여기에서 스타 제일 잘하는 사람이랑 겜비 내기 하게 해주세요!
라고 말하면 그 소리를 들은 나름 자부심을 가진 사람들이 바로 도전을 해오는데요.. 
그러면 바로 그 친구는 빠지고 제가 1:1로 붙었죠.. 
그리고 팀의 다른 한 명은 요즘 트렌드나 분위기를 보고 
이번에 쓸 전략을 지정해 주었습니다. 

그럼 전 그 대로 해서 이기면
다시 처음에 바람 잡던 친구가 
여긴 이거 밖에 안되네 
하고 거들먹 거리면 
스타에 애착이 있는 주인이 카운터에 있으면 
바로 그 동네에서 제일 잘하는 사람에게 연락해서 
다시 대결을 주선해 줍니다. 
그 사람 마저 이기면 그 도장은 끝.. 
그걸 재미로 54개 였던가? 1년 정도를 
도장깨는 재미에 했었는데, 
여기에서 딱 두 번 졌습니다. 

이 떄 저의 장점을 알았는데, 
세세한 컨트롤을 잘하지만 전체를 보지 못하는 문제가 있죠.. 
그 때문에 스타를 그렇게 잘하는게 아니라 
최대한 빠른 물량 생산과 세세한 컨트롤로 웬만큼 커버가 된 거였지요. 
특히 저그로 모든 맵의 자원을 다 먹어버리면 조금 전략에서 밀리더라도
물량으로 모두 쓸어버릴 수 있고, 국지전은 컨트롤로 이기기 쉽기 때문에 
상대가 자원을 못먹게만 자원 전투만 잘해서 이겼더랍니다. 

이 팀 중 제게 전략을 지정해 주는 친구가 있는데 
이 친구는 컨트롤이 엉망이지만 
분석과 상상을 잘하기 때문에 매번 다른 사람들 게임을 보면서 
분석하길 좋아하더라구요.. 
그리고 가설을 세우고 스스로 하려고 하면 똥손이라 안되는데.. 
그걸 제게 시키는거죠.. 
그 친구는 스탑워치를 가지고 하나하나 세세하게 지시를 하면 
저의 컨트롤로는 그 친구의 가설을 입증해줄 수가 있었던 거죠. 
이렇게 모든 맵 모든 위치에서의 배치와 테크 트리의 변화 패턴을 다양하게 만들고, 
내 뒤에서 전체 맵과 상대의 진영을 볼 때마다 상대 패턴을 바로 파악하고
이번에 쓸 적절한 패턴을 알려주면
전 그대로 해서 승리를 확고히 할 수가 있는 거죠. 

컨트롤만 잘하는 사람이 전략을 잘짜는 사람의 지휘를 받았기 때문에
승률이 압도적이지 않았을까 하네요.. 

그리고 다들 바빠지기 시작할 무렵에 도장깨기를 그만 두고 나서 
1년 정도 뒤였던가? 
그 때부터 스타의 열기가 올라가서 
대회도 생기고 국민 게임이 되었드라구요.. 
전 이미 은퇴한 뒤였기 때문에 너무 많이 바뀐 걸 적응하기에는
머리가 안돌아서 포기 했었지요..

갑자기 해킹 이야기 하다가 열을 올렸네요.. 

그리고 비슷한 시기에 많이 했던게 라그나로크 였는데요..
라그나로크는 메모리를 해킹해서 피가 일정 숫자 밑으로 떨어지면 
숫자를 눌러 물약을 마시도록 설정하는 툴이 유행을 했지요. 

이런 툴도 만들기 쉬웠지만, 
이미 비슷한 많은 툴들이 나와 있고, 
이건 해킹 체크 툴로도 체크할 수가 없는 것이죠. 

보통 해킹 방지 툴은 
클라이언트가 변조되었는지 CRC를 체크하는 툴과,
서버에 일부 데이터를 놓고
클라이언트의 데이터와 정합성에 문제가 생기면
로깅하고 튕기게 하거나 하는게 일반적인데요.. 

이렇게 메모리의 상태만 보고 키를 누르게 설정한다면
어디까지나 데이터 변조가 아니다보니 찾기가 어렵게 되지요. 

이런 툴이 점점 진화하다보니 
메이플 스토리의 경우는 
클라이언트의 이동이 공중에선 걸을 수 없다 라는 설정을 
일일이 서버에서 체크 못하기 때문에 클라이언트에서 체크하게 되어 있는데, 
이걸 해킹해서 그냥 공중이라도 평지처럼 움직이게 해버리는 바람에
이동이 자유롭게 되어 사냥이 아주 손쉬워지게 되는 툴이 있다거나, 

마비노기의 경우는 
자동 사냥으로 사냥을 하고 아이템은 집을 수 없는 거리라도 집어지도록 하는 툴이 있었는데 
클라이언트 해킹보다는 패킷 해킹으로 
거리랑 상관없이 아이템을 집었다 라는 패킷을 서버에 보내서 
서버에서는 집었다만 체크되어 아이템이 집어지게 했더라구요.. 

그래서 그다음 패치는 아이템을 집을때 캐릭터와의 거리를 체크하도록 추가되기도 했구요, 

아이템을 집는 패킷을 복제하여 돈 같은걸 100을 한 번 집을 것을
100번 집게 하면 100배의 돈이 늘어나게 되죠. 
특히나 돈은 아이템이랑 달라서 고유코드가 아니라
돈이란 곳에 숫자만 늘어나기 때문에 해킹하기 아주 좋은 대상이 되지요. 

그렇게 서버내 돈을 잔뜩 늘려서 RMT 시장에 팔아버리면 되니까요. 

이 때 RMT는 일본에서는 불법이 아니라고 판례가 나와서 
일본에서는 RMT 붐이 일어나고 본업으로 공장을 만들어서 게임 머니 거래를 하는 사람들도 TV에 나오기도 했습니다. 

RMT는 Real Money Trade의 약자로 게임 머니를 필요로 하는 사람에게 현금으로 판매하는 것으로 
한국에선 Itembay같은게 있었을 때 일본에선 메이저 RMT사이트가 없이 여러 자기네들이 만든 페이지나 개별 연락으로 거래하곤 했었지만 거래액은 상당했습니다. 

이 시기엔 한국에서도 공장이란게 많아지고, 중국에서도 공장이란게 많이 생기면서
클라이언트 자체가 화면에 보이는게 아니고 
패킷을 보고 판단해서 패킷을 던지는 텍스트가 흘러나가는 클라이언트로 공장을 운영했는데요.. 
그걸 보면 옛날의 MUD게임이 생각이 나더라구요.. 

사실 서버에서보면 MUD나 MMO나 서버의 역할은 같으니깐요.. 

그 뒤에는 넥슨에서 나와서 일본에서 다양한 한국 게임 기업들의 인프라를 봐주고 있었는데요, 
다시 넥슨의 지인으로부터 연락이 와서 
PG사 데이터가 해킹 당한 것 같다면서 문의가 왔는데, 
PG사에 500엔을 결제하면 중간에 패킷을 후킹해서 50000엔 결제로 바꿔버리는 식이었죠. 

그건 쉽게 처리 가능한게, 
500엔 결제하고 리턴 받았을 때 리턴이 500엔이든 5만엔이든 결제 성공만 받고
처음에 던질 떄 500엔 던진걸로 업뎃하면 된다고 하면 되는거였지요. 

이렇게 개발에선 놓치기 쉬운 해킹 방법들에 대한 조언을 해주기도 하면서 
지내온 것 같습니다. 

그러다가 요즘은 LOL의 핵이란게 많이 소개되고 있는데요.. 
저역시 LOL은 했지만, 대전류 게임에서 핵을 써야 할 정도로 내가 못한다면
자존심이 허락하지 않아서 절대로 안쓰는데, 
LOL은 핵 이전에 멘탈이 탈탈 털리는 바람에 금방 접었네요.. 

아니 거의 칼바람만 했죠.. 
칼바람은 그렇게 욕설이 난무하지 않고, 서로의 역할 미스란게 없으니
내맘대로 아이템을 구입하고 내맘대로 이것저것 테스트해볼 수 있으니
다들 이상한넘 하면서도 욕안하고 재밌어 하는 경우도 많았죠.. 

그래도 다른 사람들의 영상을 보던 중 
핵쟁이 라고 불리는 사람들의 영상을 모아서 설명하는 것을 봤는데, 
이젠 핵의 레벨이 저의 상상을 초월하더군요.. 

사람이 한 것과 똑같이 할 수 있게 쉽게 온오프를 하고 
꼭 필요한 한 두방만 핵으로 맞추거나 피하기만 하면
구분할 수 없을 정도네요..
게다가 클라의 이동기로 회피하는게 핵이라니
이게 사람인지 핵인지 정말 구분하기 힘들겠더라구요.. 

요즘은 손이 안따라오다보니
방치계 게임을 더 많이 하는데요.. 
게다가 애착도 엷어져서 오래 하는 게임도 줄어들구요, 
대부분 모바일 디바이스로 하다보니 굳이 해킹 툴의 필요성을 느끼지도 않고, 
심지어는 리세마라 라는 것 조차 귀찮아서 안하게 되었네요. 

하지만 생각해보면 
해킹 툴의 역사랑 발전 정도 를 정리해보니 
참 많은 발전을 이루었구나 하는 생각이 듭니다. 

그 밖에도 게임 서비스를 담당을 하다보니 여러가지 해킹 패턴을 경험했는데요.. 
메이플 스토리의 경우 서버 해킹 툴을 이미지 파일 뒤에 스크립트를 만들어서 
스샷 게시판에 올리고 이미지 URL로 들어가면 
해킹용 커맨드창이 뜬 웹 페이지를 띄울 수 있었구요.. 
여기에다가 서버의 로컬 커맨드가 다 실행이 되더라구요.. 

DB서버간의 링크 디비를 찾고 링크 디비들을 경유해서 전혀 다른 서버를 통해
마비노기의 게임머니를 해킹 하는 방법... 
그리고 PG에 던진 패킷을 변조해서 500엔 챠지 해놓고 5만엔 챠지로 숫자를 바꾼뒤 여러번 던지면 
PG의 결과는 정상이라는 믿음 만으로 수백만엔 해킹을 당했던 경험들도 있었지요. 
해킹을 하는 사람들과 싸우다보면, 
그들의 패턴을 익히는 것도 있지만, 
그들의 풍부한 상상력을 배우는 것도 있네요… 

지금은 이런 해킹 툴의 경험을 잘 살려서 
현재 고객들이 하는 온라인 서비스의 
해킹 패턴이나 체크포인트의 설정 들을 도와주고 있습니다. 

처음엔 재미로 시작했지만, 
이걸 업으로 삼을 수 있다는 것은 상상하지 못했네요. 
아마도 전 게임을 단순히 플레이어로 즐겼던게 아니라
게임의 구조를 파악하는게 재미있고, 
그 구조 해석을 경험으로 축적해서 다른 곳에 사용하는 법을 알았기 때문에 
유용했던게 아닐까 합니다. 
때문에 그냥 단순히 게임이 재밌어서 게임 쪽으로 일을 하려는 사람들에게는 
게임 업계는 별로 추천하고 있지 않구요, 
게임 시스템의 구조를 해석하고 자기라면 어떻게 하겠어 라는 것을 
직접 움직여서 무언가를 구현해 보는 타입의 사람들이 
이 쪽 분야에 어울리지 않나 생각이 듭니다. 

게임 해킹은 이런저런 문제를 낳지만
그 쪽에서 일을 했던 덕분에 좋은 경험을 갖게 되었다보니,
꼭 게임이 나쁘다고만 말하긴 어려운 것 같습니다. 
하지만, 게임을 핑계로 스스로 해야 할 것을 뒤로 미루는 사람들에게는 
절대로 권유하지 않습니다. ^^
혹시 게임 시스템에 관심 있으신 분들은 
이렇게도 게임업계에 들어갈 수 있다는 것을 참고 하시기 바랍니다. 


giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

댓글

이 블로그의 인기 게시물

Alter table 에서 modify 와 change 의 차이 :: SQL Server

두 개의 차이를 모르는 경우가 많아서 정리합니다.  modify는 필드의 속성값을 바꿀때 사용하구요.. change는 필드명을 바꿀떄 사용합니다.  alter table tbbs modify bNote varchar(2000) NULL; alter table tbbs change bNoteOrg bNoteNew varchar(2000) NULL; change에는 원래 필드와 바꾸고 싶은 필드명을 넣어서 필드명을 바꾸는 것이죠~ 더 많은 SQL Server 팁을 보려면  https://github.com/LowyShin/KnowledgeBase/tree/master/wiki/SQL-Server giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

책에서는 안 알려주는 대규모 트래픽을 위한 설계

음성 버전 :  https://www.youtube.com/watch?v=ZZlW6diG_XM 대규모 트래픽을 커버하는 첫 페이지 만드는 법..  보통 DB를 연결할 때 대규모 설계는 어떻게 하시나요?  잘 만들었다는 전제 하에 동접 3000명 이하는  어떤 DBMS를 사용해도 문제 없이 돌아갑니다.  여기서 이미 터졌다면 이 콘텐츠를 보기 전에 DB의 기초부터 보셔야 합니다.  아.. 개발 코드가 터졌다구요? 그럼 개발자를 때리셔야지요..  만약 3000명을 넘겼다면? 이제 Write/Read를 분리해서  1 CRUD + n개의 READ Replica를 만들겠죠?  보통 Read Replica는 5개가 최대라고 보시면 됩니다.  누가 연구한 자료가 있었는데...  6번째 레플리카를 만든느 순간 마스터가 되는 서버의 효율 저하 때문에  5번째에서 6번쨰로 올릴때의 성능이 급격히 줄어든다는 연구 결과가 있습니다.  때문에 Azure에서도 replica설정할 때 5대까지 밖에 설정 못하게 되어 있지요.  유저의 행동 패턴에 따라 다르긴 하지만,  1 CRUD + 5 Read Replica의 경우 동접 15000명 정도는 커버 합니다.  즉, 동접 15000명 에서 다시 터져서 저를 부르는 경우가 많지요..  이 때부터는  회원 DB, 게시판DB, 서비스DB, 과금 DB 등등 으로 성격, 서로의 연관도에 따라 나누기 시작합니다.  물리적으로 DB가 나눠지면 Join을 못하거나 Linked Table또는 LinkDB등의 연결자를 이용해서 JOIN이 되기도 합니다.  그에 따라 성능 차이가 생기지만 가장 중요한 포인트는  서로 다른 물리적 테이블의 JOIN은 인덱스를 타지 않는다!  라는 것입니다. 즉, JOIN할 테이블들을 최소한으로 만든 뒤에 JOIN을 걸지 않으면 NoSQ...

BI의 궁극판! Apache Drill을 써보자!

사실 Apache Drill 은 BI(Business Intelligence)라고 부르는 것 보다는 단순 데이터 연결 엔진이다. https://drill.apache.org/ 하지만 내가 왜 극찬을 하느냐면.. DBA로서 항상 문제가 되어왔던게, 이기종 데이터의 변환이나 처리였다. 포맷을 맞추는데 엄청난 시간이 걸리고, 데이터 임포트 실패가 무수하게 나고.. 한 번 잘못 데이터를 추출하면 다시 조정, 변환, 추출하는데 시간이 많이 걸린다. 그런데! Apache Drill은 그냥 RDB를 CSV랑 연결해서 조인해서 통계를 낼 수 있다. 그것도 표준 SQL을 사용하여! 예를 들어, CSV의 세 번째 컬럼이 price 이고, 물건의 판매이력을 PG사에서 CSV로 출력 받았다. 우리 DB와의 검증을 위해서는 수동으로 Import를 한 뒤에 포맷이 안맞아 잘리는 데이터가 있다면 다시 맞춰주고, 재 임포트를 수십 번, 그리고 나서 겨우 들어간 데이터를 조인하여 빠진 데이터를 분간한다. 숫자가 적다면 개발자가 개발로 처리할 수도 있지만, 건수가 하루에 300만건 짜리라면.. 한 달 온 파일은 9천만 건이다. 프로그램으로 고작 처리하는 것이 초당 500건. 거의 20만초, 에러 없이 약 56시간.. 에러가 생기면 다시 56시간.. ㅠㅡㅠ 이런게 현실이기 때문에 쿼리 말고는 방법이 없다. apache drill 의 진면목을 보자! 이번에는 좀 범용 적인 MySQL DB와 붙여 보자. . 난 이번에는 Mac에서 작업을 했기 때문에 그냥 다운 받아서 풀었음.. https://drill.apache.org/download/ 여기서 자기 OS에 맞는 버전을 받아서 설치하시길.. 압축을 풀고 나면 MySQL 커넥터를 붙여야 한다. https://dev.mysql.com/downloads/connector/j/5.1.html 여기서 다운로드 이런 커넥터 들을 붙일 때마다 콘피그를 수정해 줘야 하지만, 몇 번만...