<쿠키런> 모바일 게임 생명 연장의 꿈 - 쿠키런 2년, 게임 운영 분투기
조길현 데브시스터즈

쿠키런을 키운 건 8할이 운.영. 이다.
쿠키런 출시 직후, "모바일 게임은 길어야 3개월이다" 라는 말을 가장 많이 들었다.

쿠키런 역시 3개월부터 유입이줄더라..(DAU그래프) 뭐 당연. 오래갈만하지 않게 만들었다.
개발 중 윈드러너가 먼저 출시. 으악..
쿠키런이출시일이 더 늦어지면 새로운 유저를 끌어오기 어려워짐.
그래서 오래갈만한 게임이 아닌 상태이지만 출시할 수 밖에 없었다.

출시 이전에는 게임의 지속력 보다는 초기 흥행력에 집중하는 것이 일반적이다.

3개월 후,
새로운 게임을 만들까?
쿠키런 운영에 집중할까?
당시 외부의 제안은 새로운 게임. but 우리는 운영에 집중.
시즌 2 업데이트 하여 다시 유저를 이전 수준으로 복귀시킴.

첫번째 문제. 서버 과부하
출시 첫날 9만명
1주일 만에 120만명
-> 첫번째 문제 발생. 피크타임에 서버 과부하
당시 회사가 열악하여 서버 관리자가 한명.
서버 이야기는 NDC2014 홍성진씨가 발표했었음.
서버에 가장 큰 부하를 주지만, 제거할 수 없던 기능. "생명 보내기"
N명이 N명에게 보내므로O(N2) 생명을 주고 받는 양이 너무 많더라. 그 기능을 없앨 수는 없고...

무한 생명 타임. 이벤트. 로 서버 과부하를 막음. (유저는 게임을 맘대로 할 수있고, 우리는 서버 장애를 막고)
-> 운영만으로도 충분히 문제를 해결할 방법이 있다.

그래도 문제가 터진다면,
미안해요 사랑해요. 문제에 대한 보상을 지급.
유저도 버그가 있을 수밖에 없다는 것을 알지만, 그 불쾌한 감정을 잘 달래줘야 한다.

천만유저 달성 이벤트
고마운 일이 생겼을 때도
보상을 지급. 감사하는 마음을 표현하자.

두번째 문제. 초기 컨텐츠 소진.
출시할 때 충분한 양의 콘텐츠가 준비되지 않아서 3개월 뒤 새로운 컨텐츠가 떨어진다.
각종 초기 버그, 장애를 잡다보면 컨텐츠 만들 시간이 없어진다.
이 시계를 잊지 말고 꼭 미리 준비해두어야 한다.
-> 시즌 2 업데이트. 컨텐츠 제공이라는 의미 + 이 회사는 게임을 계속 관리하는 구나.. 라는 신뢰를 제공하는 역할을 함.

세번째 문제. 팬들의 목소리를 들어라.
출시 초기 급한 불 꺼지고 안정이 되면, 정착한 팬들의 비중이 커진다. 이들의 목소리를 듣고 반영해 주려 노력하는 모습을 꾸준히 보여주어야 한다.
예. 보물 재구매 기능 오픈. 쿠키 펫 보물 조합 변경을 귀찮아해서 저장할 수 있게 업데이트. 이런게 직접적으로 매출에 연결되지 않지만, 약간의 불편을 해소해준다. 신뢰가 쌓이고 유저가 안떨어져나감.

네번째 문제. 컨텐츠에 생명을 부여하기.
상상력을 자극하여 컨텐츠와 세계관에 생명력을 부여한다.
성년의 날 이벤트. 공주맛쿠키가 성년이 되었따. 라는 시나리오를 만들어서 우리만의 세계관을 녹아들게 하여 이벤트에 연결.

운영의 원칙과 철학.
문제는 반드시 발생할 수 밖에 없으며, 모든 해결방법에는 장단점이 있다. 하지만,
해결할 때 원칙과 철학이 있어야 한다.
예. 최종병기 눈사람 보물 오류사건.
출석시 일정확률로 크리스탈 1개가 지급해야 하는데 100개 가 지급되어 버림.
헉.
보상 상향 이벤트를 만들어 버림 ㅡㅡ;
(계정당 1회)
우리는 유저가 부정적인 감정을 느끼는 것을 막는다는 것을 원칙이라고 한다.
그래서 게임의 이미지가 좋지만, 돈이 많이 든다. (이벤트 한 번 할 때마다 준비하는 데 돈.. 유료결제가 줄어듬.. 그것도 돈)

지속적으로 새로운 경험을 제공해야 한다.
쿠키와 펫을 지속적으로 출시. (단순 능력치 변경 보다 외모의 특징/성격/능력/경험 등이 기존 쿠키와는 겹치지 않게)

Pay-to-Skip: 게임 속 로봇 경제와 내몰리는 인간 
이은석 넥슨코리아

게임내 인간과 로봇
온라인 게임은 하나의 사회. but 현실보다 재미있어야 한다. 현실세계는 이탈이 어렵지만, 게임사회는 이탈이 쉽다.
한국은 공정성을 좋아함. 정의란 무엇인가 미국보다 7배 많이 팔림. 그래서 게임사회도 공정해야 하므로, 게임사회내 봇을 무지싫어함.
그러나 게임은 봇, 오토, 매크로 를 적용하기매우 좋은 환경.

예전엔 과업의 난이도가 모든 구성원이 똑같았음. 싱글 게임은 본인이 초보자/하드 모드 선택하여 게임을 즐김. 그러나 온라인 게임은 공정성으로 인해 난이도르 사람별로 다르게 주는 것이 어렵다.

게임을 하는데는 비용이 든다. (시간 과 돈)
비용 중 적은 쪽에 민감.
시간이 부족한 사람은 돈으로 시간을 사려고 한다.
돈이 부족한 사람은 돈을 시간으로 사려고 한다.

게임 캐쉬/아이템거래.. 외부의 댓가를 바라는 순간 여가가 아닌 노동이 됨.
작업장이 생겨남.
서구/한국 유저는 시간을 얻고 중국 작업장은 돈을 번다.
-> 봇이 나오면서 노동집약적 작업장은 거의 사라짐.

봇은 가진게 시간(이론상 무한) -> 돈보다는 시간이 많아 시간을 활용하는 인간들이 피해를 입음.
물가상승. (인플레이션)
결국 규칙을 위반하는 자들과 불공정 경쟁. 자신은 점점 가난해지고 봇은 점점 부자가 됨.
-> 이탈. 유저는 공정성을 원하고 현실보다 재밌기를 원한다.

봇은 게임을 망.친.다.

게임내 봇 문제 해결방법.
해법 1. 클라이언트에서 차단. but 클라이언트는 적의 손아귀에. 우회경로를 만들거나 진짜 신체가 있는 로봇을 만든다면?
해법 2. 플레이시간을짧게 만듬.
해법 3. 성장/재산축적이 안되게? 여가부의 지시대로 만드는 것 ㅋㅋㅋ 적어도 봇은 없어지겠지
해법 4. 유저간 거래를 막는다. 최근에는 MMORPG는 귀속 아이템/업적 등을 거래 불가능하게 하기도 함. 거래소만을 이용할 수 있고 1:1 거래를 막음. (증여를 막는다.) -> 친구에게 돈이나 아이템을 줄 수도 없는 단점이.. 그래도 계정을 통째로 거래 or 대리 육성
해법 5. 사람임을 인증시키기. 튜링 테스트 : 캡챠.AI발전.. 리캡챠 , 로봇이 아닙니다. 클릭하면 됨. (구글) 마우스의 미세한 움직임을 활용. 캡챠만 풀어주는 인건비 싼 사람이 있음. 1000개 풀면 700원 줌. 인형 눈붙이기.
해법 6. 신용도 체크. 인간으로 평소 믿을만 하면 할 수 있는 게 많게.
해법 7. AI로 맞대응. 심플 패턴 매칭으로 안잡히면 머신러닝 수준으로..
해법 8. 귀찮아서 안하게... 생산성을 떨어뜨려 다른 게임으로 가게..
해법 9. 게임 내 재화의 흐름을 시각화 하여 골드를 세탁하고 판매하는 중간책/판매책을 검거.
해법 10. 공상. 로봇이듯 사람이든 플레이어가 많아지면 ㅔ임이 재밌어지는 건 어떨까?
예. 노비노비 보이
해법 11. 기왕 하는 게임, 세상을 진보시키는 데 쓴다면?
과학난제를 집단지성으로 풀거나 소모적인 튜링 테스트 대신 세상을 발전시키는 것은?

더 생각.
게임속 양극화의 대안은??


SNS시대, 게임사가 대중과 소통하는 법
최준호 아웃스탠딩

SNS : 짐이 곧 인터넷이다.

굳이 돈 써서 광고하지 말고, 스스로 바이럴의 진원지가 되어야 한다.

페북 구독수를 늘리기
넥슨 : 콘텐츠의 힘, 운영자의 센스, 유머형.
엔씨소프트 : 전형적인 전문잡지, 전문가의 외부영입, 정보 + 공감.
던파 온라인 : 대표적인 적극적 참여, 소통하는 게임사.

어떤 컨텐츠를 만들어야 하는가?
여러방식이 있을 수 있다.
 전문 잡지를 만든다는 자세로..
오로지 독자중심으로..
결국은 진정성을 위주로!
매우 재미있는 콘텐츠는 광고자와 소비자 관계가 아니라 콘텐츠를 만드는 사람과 팬의 관계가 되어 가고 있다.

컨텐츠의 유형:
유머형 - 초기에 하면 좋음. 펌질 컨텐츠는 지양하자.
꿀팁형 - 봄에 꽃을 찍어서 날씨가 좋죠? 보다는 봄날씨에 어울리는 소주 안주는? 이런게 원하는 것.
정보형 - 정보형 기사에는 내용을 궁금해 하는 사람들이 따라 온다.
공감형 - 가장 멋진 바이럴 효과를 내는 컨텐츠는 공감형!

누가 SNS를 해야 하는가?
대표이사도 할 수 있다.
회사가 즐겁지 않으면 당연히 공감형 컨텐츠가 나올 수 없다. -> 애사심이 첫번째 관문. 애사심 있는 사원이 하는 것이 좋다.
정말 전문가가 필요하다. 마영전 -  "오늘도 현실 속옷은 갈아입고, 자캐 속옷 입히고 있을거라 믿습니다."
자체 디스는 괜찮지만, 타인 디스는 정말 조심해서 해야 한다. 이걸로 훅간 사람 많음.

고통스러운 장기전이 필요하다.
SNS는 상호 부채의식을 준다. 내가 먼저 좋아요 를 막 해주면, 상대도 좋아요를 빚졌다는 생각을 하고 달아준다?!

생각해야 할 요소
계획표 / 꾸준함 : 컨텐츠를 계속 만든다는 것. 이거 고통스럽다 /

대중과 소통한다는 것은 '돈 버는 죄'로 매우 힘듭니다.
배달의 민족의 수수료 모델. 욕 겁나 먹고 있음.
배달의 민족 수수료 모델을 비판 글을 쓴 기자를 일일이 찾아가서 수수료를 어떻게 받아서 어떻게 쓰고 어떻게 투자하고 등등을 설명을 하여 설득하는 진정성을 보여줌.

모바일 게임앱 해킹 공격과 그 방어 전략, 
홍진선 (주)잉카네트웍스, jshong@inka.co.kr

해킹이란 : (1) 의도하지 않은 동작을 일으키거나 (2) 주어진 권한 이상의 것을 수행할 수 있게 만드는 것.

서비스 실데이터를 통해 분석해 보니 특정 국가의 경우 앱 초기 실행 시도의 70%가 해킹을 목적으로 하더라.
인앱결제 해킹으로 인한 금전적 피해 사례가 공개되고 있는 상황이다.
특히 안드로이드앱은 보안 조치 없이 앱을 런칭 한다면 100% 해킹이 된다고 봐야 한다.

모바일 게임 앱 해킹 방법 : 어뷰징 도구를 이용하기, 리버스 엔지니어링 하기
- 어뷰징 tool을 이용하기 :
memory cheating , speed hacking, inapp purchase crack, mod, auto macro
구동환경에 따라서 구분하면 standalone at mobile , standalone at PC(/w android virtual machine), Client-Server Architecture
어떠한 툴들이 있는가? 사진 참고.

왜 위험할까?
누구나 해킹 시도를 할 수 있다. (프로그래밍 스킬이 필요없음)
새로운 툴이 지속적으로 출현하고, 기능이 향상됨.
강력한 디버깅 환경을 제공하는 PC환경에서구동되는 도구들이 존재

두가지 기술 유형
1. 공격하고자 하는 타겟 게임 앱에 어태치
어태치 하고 나면, 앱이 게임 프로세스 내 메모리를 검색하거나 변경할 수 있는 권한을 가짐.
리눅스 내 핏트레이스?를 콜해서 구현한다.

2. 타겟 게임앱의 process mapped memory파일에 직접적으로 access 하는 방식.
수퍼유저 권한을 획득 후, 해당 memory 파일을 검색하고 변경.
치팅용 앱 같은 경우 권한 주세요. 창이 뜨고 예스 하면 이게 돌아가기 시작.

둘 중 두번째 것이 더욱 위험하다.
타겟 앱 자체가 불명확하기 때문에 잡기가 매우 어렵다.

기술 유형.
스피드 해킹 : 시간과 관련된 API를 hooking.
일단 게임에 어태치하고, 어태치 후 시간 과 관련된 데이터를 건드리기 위해 hooking module을 injection 한다. 타겟앱이 시간 관련 데이터를 요구하면, system libs 내에 있는 시간 관련 데이터를 타겟 앱이 아닌 hooking module로 전달하도록 변경. hooking module이 가짜 시간 정보를 타겟 앱에 줌.
-> 이걸 막으려면 로컬 타임을 사용하지 않으면 된다. 서버의 시간을 활용하면 되다. 하지만, 서버 부하가 생기겠지..

IAP 결제 crack 해킹 :
Freedom 이라는 게 유명함.
기본적으로 etc/hosts 파일을 변조한다. 구글 플레이로 넘어가서 결제를 하게 되는데, 그 넘어가는 정보를 구글이 아닌 freedom proxy server로 보내도록 바꾼다. proxy server는 결제 오케이 사인을 보내주고, 앱내에서 그게 진짜인지 확인하는 기능(서명 값 검증)이 없다면, 결제가 완료된거라 생각하고 IAP 결제 금액을 넘겨버림.
-> 서명값 검증만 해도 되는데, 그걸 안하는 앱이 많았다는 반증.

Android Virtual Machine : 해킹툴이 아닌데, 이걸 응용해서 해킹.
cheatengine 이라는 PC온라인게임용 해킹 툴이 있는데, AVM을 띄우고 게임을 가상머신에서 실행하면, 윈도우 메모리 내에 안드로이드 메모리가 들어가 있다. 그러므로 해당 메모리를 (chateengine으로 찾아서) 공격하면 안드로이드 입장에서는 알 수가 없다. (메모리를 다이렉트로 억세스하기 때문) 방어가 어렵다.

리버스 엔지니어링:
static 과 dynamic 방법이 있음.
static - decompile and repackaging 이라고 치면 엄청 나옴. 잘되어 있다.
dynamic - 메모리 덤프.
메모리 영역을 그대로 복사한 후, 분석 및 조작하는 공격.
사용자 레벨 과 커널 레벨이 있다.
사용자 레벨 공격은 메모리 chating과 기술적으로 유사함.
하지만, 커널 레벨 수준의 공격은 방어하기가 상당히 어렵다.


보안 관점에서 바라본 유니티 기반 모바일 게임 앱.

미리 컴파일을 하는 게 아니라, 게임을 구동하면 그 때 컴파일 해서 실행가능하게 만듬.
이 과정에서 mono runtime이 managed DLL을 사용.
managedDLL은 공통중간언어(common intermediate language)로 불리는 코드의 집합으로 구성되고, 이것이 타겟 디바이스에서 바로 실행될 수가 없다.
그런데 이 CIL이 문법이 매우 단순하여 분석이 쉽다. 그거마저도 분석해 주는 툴이 있음. decompile 공격에 매우 취약.
즉, 유니티로 만든 앱은 apk 까서 dll만 보면 거의 소스를 다 볼 수 있다.

디컴파일 프로세스
apk로 부터 dll 확보 -> dll을 IL로 변환 -> c#으로 변환 -> 수정 -> IL로 변환 -> 다시 apk만듬.

유니티는 크로스 플랫폼 지원.
즉, 안드로이드 dll을 아이폰으로 가져가서 넣으면 돌아간다. 한쪽만 보안을 고려한다고 되는 것이 아니며,
유니티의장점이 보안상의 단점으로 작용하게된다.

어떻게 막을까?
Linux OS를 이해하면...
- 허가받지 않은 프로세스가 접근했는지 파악하자.
- 메모리에 적재된 공용객체(shared object)를 주지하라.
- /etc/hosts 파일이 수정되었다면 의심하라.

구동환경을 제한한다면..
-OS의 루팅여부를 확인하라
- AVM과 모바일 순정환경의 차이점을 찾아라. (가상머신에서는 돌아가지 않게 만들어야 한다. 순정환경과 가상머신의 차이를 가지고막는다. 가령 가상 머신 환경에서는 cd-rom이 있다거나)

기본에 충실하면...
- IAP 결제 결과는 반드시 서명을 검증하라. 구글이 다 알려주고 있음. 꼭 챙기자.


Managed DLL 은 어떻게 보호할 것이냐?
난독화 (obfuscation)
코드를 해석하기 어렵게 만드느 방법. 메소드나 변수의 명칭을 어렵게.. 코드 순서를 뒤바꾸기...
하지만, 난독화는 해석을 어렵게 만드는 거지 불가능하게 만드는 건 아니다. 시간이 거릴뿐.. 난독화된 코드를 해석하기 쉽게 만들어주는 툴이 또 있다... ㅋㅋ 난독화는 냉정하게 생각해볼 필요가 있다. 추가 보완 필요.

그렇다면 불가능하게 하려면?
Anti-Decompile
IL code를 얻지 못하도록 assembly-csharp.dll 파일을 조작한다.
스크립트를 암호화.
그러나 이것도 메모리 덤프 공격에는 안된다.
난독화/암호화 된것도
메모리에 올라갈땐 다풀려서 원본 dll이 올라간다.
결국 anti-dump 기술까지 사용해야 한다.

유니티 4.6 부터 iOS 빌드에 대해서 IL2CPP를 지원. 이런 형태라면 dll 이 없으므로 replacement 공격(iOS dll을 android dll로 바꿔치기)이 불가능하다.

카운터 스트라이크 온라인 2 프로그래머의 숨바꼭질 모드 개발 후기
진병은 넥슨코리아

어떻게 구현 하였는가?
사람보다 간단한 프랍으로 대체 하다보니 고려해야 할 다른 것들이 보이더라.
- 일반적인 사물(프랍)의 중심점은 물체의 하단 중앙. 사람은 물체의 정중앙이 중심점으로 설정되어 있음.
디자이너들에게 모든 사물의 모델 작업을 새로 해달라고 하기 어렵다.
결국 코드상에서 물체를 띄우는 것으로 해결하기로 함.


ps. 3일차인 오늘은 일이 많아서 못 갔네요. 2일차 후기로 끝입니다 ^^

===========================================================================

https://www.facebook.com/lab4all 에 오셔서 '좋아요'버튼을 누르시면 페이스북에서도 블로그 내/외의 글들을 쉽게 보실 수 있습니다.

==========================================================================











저작자 표시 비영리 변경 금지
신고

+ Recent posts