게임사 서버터는방법(?)본격 패킷통신 구라치기
안녕하세요 전직 게임개발자.
게임해커 8년차 코드몽키입니다.
들어가기에 앞서, 본 포스팅은 예전티스토리 블로그를 운영하던 시절 작성한 포스팅이다보니 사용된 이미지가 예전 이미지입니다^^; 양해부탁드립니다
현재 www.monkeycheat.com 은 유해사이트로 지정되어 정부에서 접속차단을 걸어버려 워닝이 뜨는상태가 되버렸습니다;;
지금은 우회시켜 https://www.monkeycheat1.com 으로 자료실을 이전하였습니다.
해킹 레벨 ★★★★★
서버 구조 이해도 요구치 ★★★★
오늘은 게임사 서버에 구라치는 강좌를 시작하겠습니다.
본업이 정신없이바쁜 관계로 해킹강좌 포스팅은 아마 일요일에만 작성하게 되겠네요^^;
그마저 제가 피곤하거나 귀찮거나 하면 건너뛰게될..
뭐 포스팅 했더니 반응좀 괜찮다 싶으면 열심히 하겠지만요 ^^;
일단 밝혀둘건 제 블로그 카탈로그를보면 이 패킷해킹이 카테고리6번에 등록되어있는걸 보실수 있을겁니다. 이보다 더힘든 난이도의 "게임에 내가 원하는 해킹메뉴를 삽입" 하는 해킹 UI 메뉴삽입을 일단 모바일게임 해킹의 끝판왕으로 치고있습니다. 그런것들은
코몽의 해킹과외 에서 가르쳐드리고있습니다 ^^;
원래 난이도 순으로 넘버링을한건데.. 본 포스팅은 카테고리 6번째입니다. 거의 해당 게시물은 해킹난이도 상급이라 초급자분들이 보시면 이게 뭔 개소리여~ 하실수도있으니 지금은 그냥 이런 해킹방법도있구나~ 하고 넘어가시고 나중에 자신감좀붙고 실력좀 붙었을때 이 포스팅에 도전해보세요. 확실히 말씀드릴수있는건 제가할 포스팅 난이도 1~부터 차근차근 오신다면 본 패킷해킹도 충분히 따라오실수 있을겁니다.^^
지금은 초보분들은 어차피 해도 안되요.
어? 나 한번에 성공했는데?이런 초보분이 계시다면 그분은 우리나라 진정한 게임해커꿈나무!
휴대폰에서 여러분이 획득한 돈이나 아이템, 결제정보들이 게임회사 서버로 어떻게 기록될까요? 어떤방식으로 통신이 이루어질까요? 평소에 그런 의문점이 생기지 않으셨나요?
여러분이 휴대폰에서 뭔가 액션을 취하면 그것들에대한 정보가 패킷통신에의해 게임사의 서버에 정보가 기록됩니다.
이번 포스팅에는 게임사의 서버에 가짜 패킷을 보내 기존의 데이터에 가짜 데이터를 덮어쓰기하는 방식을 사용한 패킷 스니핑을 이용한 패킷게임해킹 강좌가 되겠습니다.
무슨말인지 이해가 안가신다구요?
초보들도 이해하기 쉽게 예를들어 설명하자면
코드몽키 농협계좌에 100만원 입금 ->
100만원 입금했다는 패킷정보를 농협서버에 날림. ->
농협 서버에 코드몽키라는 고객의 계좌에 100만원이 증가되었다는 정보가 기록됨#.
이런 프로세스를 거치게 되는데 여기서 우리는
100만원 입금했다는 패킷정보를 농협서버에 날림. ->
그럼
농협 서버에 코드몽키라는 고객의 계좌에 10억이 증가되었다는 정보가 기록됨#.
☞ 코드몽키는 100만원을 입금하고 10억을 출금했다.
이게 가능해지겠죠?
서버에 날리는 정보에 구라치는겁니다
아! 어디까지나 예시니까 진짜 농협계좌돈을 주물락 거린다는 오해는 하지마세요!
지금은 게임해킹 시간입니다
게임의 메뉴를 보면 어떤 게임들은 클라우드서버에 세이브 / 로드 기능이 있습니다.
이 게임들의 Save/Load 기능들을 보면 대부분 Playerprefs 를 이용한 로컬저장이거나 xml 혹은 json 형식으로 저장하여 서버통신을 합니다.
우리 눈엔 보이지않아도 우리가 게임을하며 돈을 얻거나 아이템을 얻으면 그러한 정보들을 전파로 서버에 날려보내겠죠? 그런 정보를 낚아채 파악 후 입맛에 맞게 수정해 가짜정보를 서버에 쑤셔넣는겁니다.
일단 이해 안가셔도 넘어가죠. 첨엔 이해안가는게 정상입니다.
밑에글 읽다보면 아~ 이런거구나~ 하고 이해가실겁니다
보통 인디게임에서 많이 쓰이는 POST , GET 을 사용한 클라우드 세이브/로드 송, 수신 방식인데 Charles proxy 라는 툴을 이용해 서버로 날아가는 패킷을 잡아 파악후 수정 및 수정된 가짜값을 송신할수있습니다.
비슷한툴로 wire shark 라는게 있는데 전 이건 잘 못쓰겠더라구요 ^^;
1. 일단 charles proxy 를 설치합니다.
2. 상단 메뉴의 [proxy] - [proxy setting] 에서 스샷처럼 포트에 8888 입력후 Enable Transparent HTTP Proxying 체크확인후 OK
3. 마찬가지로 [proxy] - [SSL proxy setting] 에 가서 아래 스샷처럼 체크 확인후 OK 를 누릅니다
4. 자신의 ipv4 주소를 확인합니다 ( 윈도우 시작 ->CMD 입력해서 커맨드창 띄운후 ipconfig 를 쳐보면 확인할수 있습니다)
예) 192.168.xxx.xxx 이런식으로 ...
5. 아래 스샷처럼 [Help] - [SSL proxy setting] 의 빨간 네모들을 이용해 PC에 인증서를 설치합니다
6. 빨간 네모의 keystore password (복사후 ) export charles root certificate and private key 에 붙여넣기하여 폰에 넣은후 폰에도 인증서를 설치합니다.
(디바이스에 인증서를 설치하기 위해서는 디바이스 비밀번호를 설정해야 합니다 - 암호패턴,홍채인식,지문 이런거말고 비밀번호입니다)
7. 이제 가짜 데이터를 송신할 디바이스의 세팅을 할 시간입니다.
디바이스의 와이파이 접속설정을 아래 스샷과같이 합니다.
프록시세팅 - 메뉴얼
프록시 호스트네임 - 자신PC의 ipv4 주소
프록시포트 - 아까 찰스에 썼던 8888
이제 PC에 찰스인증서가 깔렸고 폰에도 인증서를 복사해서 설치가 끝났습니다 wifi 에 위 스샷대로 프록시설정까지 했다면
해킹할 문제의 게임을 보도록하죠.
방금 설치했기때문에 게임 재화가 거의 없네요. 골드는 450골드 , 열쇠는 2개 , 캐쉬보석은 현금결제를 하지않았으니 당연히 0개 입니다.
USB케이블로 PC에 디바이스를 연결한 상태로 일단 해당 게임의 Save 기능을 이용해 서버에 현재 재화 상황을 날려줍니다.
저장이 되었다면 게임사 서버 해당 컬럼에는 유저의 각종 레벨이라던지 착용 장비라던지 강화레벨같은 여러 정보와 함께 위 스샷의 재화 정보도 함께 기록이 되었을 것입니다.
그럼 위 스샷과 같이 https:// 어쩌구저쩌구 하는주소에 game - save 쪽에 우측 _data 칼럼에 이런런 내용들이 날아가는걸 볼수있습니다.(이 부분은 게임마다 당연히 다릅니다)
위 스샷을 보면 방금 서버로 전송한 세이브데이터패킷 내용들을 더블클릭후 메모장으로 복사해서 보니 위에서부터 쭈욱 안드로이드 , 제 구글 아이디, 제 이메일 , 등등등 이 보이고 밑으로 뭔가 알수없는 수치들이 Json 형식으로 쭈욱 보입니다.
(이부분은 게임사마다 난독을 걸었을수도, 그대로 노출이 될수도있습니다
얼마전 수강생중 한분이 이 패킷해킹으로 국내게임하나를 짤짤 털어먹었던..
게임사로선 모르면 뭐다? 눈뜨고 당해야죠 이러한 기술들은 철권의 폴피닉스 붕권같은겁니다.
게임사 입장으로선 모르면 쳐맞으면서 배우게되는거죠 ㅎㅎ 앙 개꿀띠)
암튼 저기서 빨간 밑줄친 저 3곳이 의심스럽습니다. 각각 제 골드, 열쇠 , 캐쉬보석 같네요.
이부분은 해킹경험+눈치+눈썰미로 찾는거라.. 음... 경험이 제일 중요한듯싶네요.
서버를 한번이라도 구현해보신분이라면 감이 파파팍! 하고 올텐데 아니라면..
이런 부류의 경험치 무시못합니다 이 게임 저게임 쑤시고다니다보면 자연히쌓이는 경험치말이죠
영화 매트리스에서 그 녹색 글씨들이 주루룩 흘러내리는 그 화면 아시죠?
거기서 누가그랬잖아요. 익숙해지면 그 글씨들 해석해서보고있다보면 여자가보인다고 ..
뭐 대충 그런느낌적인 느낌으로 찾는겁니다(아니 이게 뭔 개소리야)
개소리긴한데 아주 틀린 개소리는 아닌거같아요.
이런작업하다보면 쭈우우우욱~ 훑어보다 "어? 여기 고치면 왠지 될거같은데?" 하는 느낌이오거든요
이게 무슨말이냐하면.. 제가 해킹하려는 게임을 만든 개발자가 아니잖아요? 그러니까 해커의 시점으로 '이 개발자가 무슨생각을하면서 이부분을 구현했을라나~' 이런 시점으로 접근하다보면
대애~충 아 여긴 이런식으로 구현했으니 여길 이쯤 건드리면 반응이 오겠구나~ 싶은 부분이 보인다는거죠..
(역시 써놓고보니 개소리맞네 -퍽!)
그래도 게임좀 많이 건드려보신분들은 이게 무슨말인지 공감하실듯 ㅠ
이제 서버로 날릴 가짜 데이터가 준비됬습니다.
이제부터 서버로 이 생성한 가짜패킷을 날려야 합니다.
일단 순정으로 패킷을 한번 날려봅니다-
패킷이 어디로 날아가는지 파악후. 그곳에 방금 제가 만든 구라패킷(9999정보가담긴)을 날려야겠죠
다시 Chales 로 돌아와 좌측상단에 연필모양을 누르시고 add ...
쿼리 파라메터에 좌측(아까 본 칼럼명 _data 를 적어주시고(게임마다 칼럼명은다르겠죠?게임마다 개발자 꼴리는대로 칼럼명은 지을테니까요)
우측에는 방금 메모장에서 수정한 구라데이터를 복사해 붙여넣은뒤 Excute 시킵니다.
방금 서버로 날린 구라데이터에 대한 응답으로 저장응답 success : true 가떳다면 게임사 서버에 성공적으로 여러분의 가짜 데이터를 덮어쓰기 성공한것입니다.
다시 게임으로 돌아가 서버에 저장됬을 가짜 데이터를 불러오기를 해봅니다
성공적으로 방금 제가 수정했던 가짜 데이터값을 게임사 서버로부터 불러왔네요 ^^
각종 재화가 이쁘게 9999 가 되었습니다.
이상으로 패킷 서버해킹 강좌를 마칩니다.
찰스 프록시 는 아래 링크에서 받으시면 됩니다.
찰스프록시 링크 : google
이 포스팅을 보고 "어? 안되요. 왜 안되죠?" 하는분이 생길 수 있습니다.
"이해가 안가요." 하는분이 생길수도 있구요.
하지만 한방에 이해하고 성공하시는분도 있습니다. 안되면 될때까지 이거저거 만져보다 되시는분도 분.명. 계시구요.
정상입니다. 이바닥이 원래 그런겁니다.
같은 튜토리얼을 놓고 보는데 누군가는 되는데 누군가는 못따라옵니다.
"설명이 개 허접하고 부족한거아냐?" 라고 하실지 모르겠는데...
※ 저 대학다닐때 대학교에서도 학생 30명 놓고 강의실에서 교수님이 똑.같.은 사이트 띄워놓고 똑.같.은 PC에 똑.같.은. 윈도우 버전으로 똑.같.은 설치파일로 자바설치하고 환경변수 설정에대해 가르칠때 분명 모든 걸 동일한 조건으로 강의하는데
하는 애들은 하는데 못하는 애들은 못하더라구요.. 분명 모든 조건은 동일한데말이죠!
멀리서 찾을 필요도없이
당장 제 블로그에만 봐도 기본적인
공지에가면 진짜 아니 시발 이보다 어떻게 더 자세하게 설명해줘? 라는 느낌으로 설명 해뒀음에도 불구하고 그냥 공지 보고 혼자 조용히 따라해서 잘 하시는분이 있는가 하는 반면, 보고도 못따라오시는분도 계십니다;; 제잘못아니에요 엉엉;;
정말 별의별 사람들다있어요. 유입로그 보면 게시글 수천명이 다운받아 잘 즐기고있는데 안된다고 저한테 화내는사람부터 왜안되냐고 .. 아니 글만봐도 해결할수있는 상황을 다 만들어뒀는데도 불구하고말이죠
그냥 이건 개인차같아요. 이해력차이 같아요. 해도해도 안되면 그냥 내 이해력은 여기까진갑다.
하면 됩니다.
(아!! 힘들게 쓴 글은 쳐다도 안보고 스크롤 주욱~~ 내려서 그냥 게임 다운로드 냅다 찍고 안되요~ 하는분도 계시겠지만 이런분들 특징은 리플에 욕밖에안쓰더라.. ㅡ.ㅜ)
아마 이 포스팅 밑으로 잘안된다는 제 블로그 리플 겁나게 달릴거라 예상됩니다.
그게 무서워 제사이트 해킹강좌 카테고리는 리플막아둘거에요 ㅎㅎ
안된다고 저한테 질문하지마세요.
안된다고 저한테 화풀이 하지 말아주세요.
누군가는 되고 누군가는 지금 이시간에도 뒤에서 몰래몰래 잘 활용하며 꿀빨고있으니까요.
그거슨 팩트.
일단 밥상은 깔끔하게 차려놨습니다.
챙겨 드시는건 여러분의 몫이구요^^
체하지 않게 드세요^^
제 블로그 해킹강좌의 포스팅 댓글은 꺼두겠습니다.
후원이 뭐 별건가
더운날 음료하나 선물주시는그런게 후원이지~ㅎㅎ
이 포스팅 사진작업하랴 글쓰느랴 피같은 일요일 3시간을 날렸는데 그냥가시게요?ㅠㅠ;
블로그 홍보도 널리널리 해주세요 ^.~ 찡끗~☆
게이머들의 지갑지킴이 코드몽키
카카오톡ID : codemod