태그: javascript

넥슨게임, 자바스크립트를 통해 NGM 으로 게임 다운로드 하기

개요

636px-Nexon_Logo.svg.png

 

자바스크립트는 웹에서 사용하는 클라이언트에서 명령어를 처리하는 웹 언어중 하나다.

 

이 언어는 넥슨 웹사이트에서도 잘 쓰이고 있는데, 아래 설명할 자바스크립트 방식을 이용하면 된다.

 

넥슨 홈페이지는 이런 방식으로 게임 실행을 수행하기 때문에 이 방식을 통하면 여러 많은 정보를 유저가 직접 수행할 수 있다는 장점이 있다.

 

 

사용법

스크립트 실행전, 기초정보 확인

이미지_3.png

나는 카스온라인을 기준으로 정보를 알아냈다. 카스온라인의 게임 코드는 “73737” 이란 코드 이다.

이 코드를 기반으로 ‘역으로 다른 게임코드를 집어넣으면 어떻게 실행될 것인가?’ 에 대해서 실험을 해보았다. 당연히 성공.

그럼, 이 코드가 어떤식으로 불러와지는지를 확인하자.

게임 실행에 필요한 자바스크립트

이미지_5.png

넥슨 웹 홈페이지의 게임 시작은 아래와 같은 자바스크립트를 통해 실행이 되는것을 우리는 웹 홈페이지의 소스코드를 통해 확인할 수 있었다.

 

그럼 이 코드를 기반으로 역으로 다른 게임의 코드번호를 알아내는것이 가능할까?

 

가능은 하다. 하지만 찾는 노력이 필요하다.

 

이미지_4.png

나는 이 이미지를 촬영했을 당시, 서든어택2는 G-Star CBT 용으로만 가능했기 때문에 서든어택2의 게임 실행 코드를 넥슨 홈페이지에서 찾아서 이를 역으로 수행할 수 있도록 코드번호를 확인했다.

 

서든어택2의 게임 코드는 “74278” 이란 코드임을 확인했다.

이렇게 코드를 알아냈고, 게임 실행 자바스크립트도 알아냈는데, 현재 알아낸 스크립트 만으로는 게임 실행을 할 수 없다.

아래와 같은 방식으로 좀더 세부적으로 확인해야 게임 시작 스크립트가 어떤 방식으로 동작하는지를 확인할 수 있다.

실제로 자바스크립트를 수행하는 것을 알아보기

이미지_6.png

넥슨 홈페이지의 자바스크립트를 찾아본 결과, 위에 작성했던 스크립트인 GnxGameStartOnClick 이란 스크립트가 아래와 같은 코드를 통해 게임실행을 한다는것을 확인했다.

 

그렇다. 카스온라인 홈페이지에서는 게임 실행을 할 때, GnxGameStartOnClick(); 이란 스크립트를 이용하지만

 

이 스크립트는 PS.game.startGame({ gameCode: 73737 }); 라는 코드를 다시 불러와서 실제로 게임 실행을 시키는 것이다.

 

즉, gameCode 를 적은 것이 무엇이냐에 따라 다른게임이 실행될 수 있다는것을 확인했다.

 

위에서 확인한 서든어택2의 코드가 74248 이므로 이를 역으로 이용해 gameCode 란에 73737 대신 74248 로 넣고 수행을 하면 작동을 한다는 것이다.

 

이미지_7.png 이미지_9.png

실제로 적용을 해보면 위와 같은 식으로 게임 다운로드가 가능하다.

이 이미지 촬영당시에는 두 게임은 실제로 오픈된 게임이 아니기에 다운로드만 가능했다.

그런데, 게임코드까지 알아냈고, 자바스크립트도 아는데 어떻게 실행을 시키냐 인데… 아래와 같이 하면 알 수 있다.

실제로 자바스크립트를 수행하기

이미지 1.png

 구글 크롬 기준으로 F12키를 눌러 개발자 도구를 연다.

콘솔 도구창에서 우리는 위에서 알아낸 정보를 바탕으로 PS.game.startGame 이가 게임을 실행한다는 것을 알아냈으니 이 게임실행코드를 바탕으로 원하는 게임을 실행한다.

이미지 상에서는 카스온라인의 게임 코드인 73737을 실행했다.

이미지 2.png

스크립트를 수행하면 자동으로 게임이 반응하면서 실행을 할 것이다.

끝으로

이를 이용해서 넥슨 게임에서 다운로드가 일반적으로 불가능했던 게임을 쉽게 미리 다운로드 하여 내용물을 알아낼 수 있다.

 

하지만, 이렇다 해서 실제로 종료된 게임을 다시 복구하는것은 불가능하다. 다운로드 서버에 파일이 없는경우 저 스크립트가 아무런 소용이 없다.

 

파일 자체를 불러올 수 없기 때문에 서든어택2 같은경우 2017년 03월 07일을 기준으로는 코드를 아무리 입력해도 파일 다운로드가 되지 않는다.

 

이처럼 이것을 역으로 이용해서 게임 다운로드를 할 수 있도록 하면 무언가 도움이 되지 않을까 하고 작성해본다.

정말 해괴한 자바스크립트

개요

광고는 때로는 우리를 짜증나게 할 때도 있다.

 

일부 불법 스트리밍 사이트에 있는 광고나, 혹은 다른 광고들이 달갑지 않을 때가 있다.

 

혹은 주소의 정체를 보이고 싶지않아서, 해석하기 어렵게 난독화를 하는 스크립트도 있다.

 

따라서 오늘 새벽내내 스크립트들을 여러가지 확인해 보았다.

 

 

오늘의 스크립트

1) Fuck Adblock

 

Fuck Adblock 은 광고차단 스크립트 혹은 부가프로그램인 Adblock 계열이 감지되면 차단하는 스크립트다.

 

 

 

위와 같은형식으로 스크립트를 불러오면 작동을 한다. 물론 스크립트 실행을 위한 값들에 대해서는 직접 추가해야 되지만.

 

하지만 되게 특이하였다.

 

 

 

 

 

js/ads.js 에서 canrunads 값이 true 로 기본값이며 값이 true 가 유지면 그대로 스크립트를 나가지만, 이 값이 adblock 계열등에 의해(즉, ads.js 라는 자바스크립트가 실제 광고가 아님에도 차단)차단이 되어 undefined가 되면 false 로 나가서 body 부분을 제거하는 초강수를 두었다.

 

차단 계열은 광고 블록하는 계열의 스크립트가 ads 라는 단어를 인식할 때 해당 내용을 아예 클라이언트 단에서 차단하는것을 역으로 이용한 것이다.

 

실제 광고성 내용의 스크립트가 포함된게 아니라, 일부러 광고 차단 프로그램에 의해 감지하라고 내용물을 집어넣은 것이기 때문에 해당 부분만 예외처리로 허용하면 쉽게 우회할 수 있다.

 

 

내가 알아본 사이트는 스크립트를 4개정도로 심어놓아 대부분의 Adblock 계열을 body 부분을 삭제하는것으로 보인다.

 

이것을 뚫기 위해서 부단히 노력을 했었다.

 

 

 

2) 단축URL 계열 307 redirect?

 

onclick 을 할 경우 return move 값에 대해서 변동을 주는것으로 보인다.

 

 

3) base64 encode 계열 video 소스 난독화?

 

비디오 URL 주소를 보이지 않게 하기 위해 base64 로 인코딩을 하고 source 값에 URL을 넣는것으로 보이고 있다.

 

 

4) googlevideo.com 주소 파싱?

 

위 스크립트는 약 2~30분 주기로 인코딩된 내용이 바뀐다. 즉, 구글드라이브 등으로 저장된 영상의 주소를 시간마다 파싱해와서 그걸 적용하는 방식인데, 어떻게 감지를 하는지에 대해서 검색을 해봐야 할 듯 하다.