어쩌다 보니 게임 데이터를 뜯어보려다가 이쪽으로 많이 알게 되었네요..

(목적이었던 게임 데이터 열어보기는 아직도 못해봤지만..?)


데이터 열어 보는데 큰 난관에 봉착해서 글을 작성하게 됩니다.
혹시 아시는 분있으면 답변좀 해주세요!

지금 상황이 휴대폰에서 /Android/obb 폴더에 있는 앱 추가파일을
컴퓨터로 옮겨와서, 다행히도 평범한 압축파일이길래 압축해제를 했지만
내부에 있는 png(이미지)파일과 mp3(음향) 및 mp4(영상) 파일 모두
손상된 파일이라고 열리지가 않습니다.

분명 게임 내에서는 모두 잘 작동하기 때문에
파일이 자체적으로 암호화 되어있는 것 같더라구요.
그래서 공부도 할겸 복호화를 목표로 구글링 해봤습니다.


그래서 몇가지 알아냈는데,
일단 이게임이 cocos2d-x 엔진으로 개발된 게임이고

lua 파일들은 LuaJIT-2.1.0-beta3 로 컴파일되었단걸 알게 되었네요.


또 이 엔진으로 개발된 몇몇 게임들은

게임 스크립트 파일(lua와 json)이나

이미지, 음향 파일 등의 바이너리 파일들을

주로 XXTEA라는 암호화 알고리즘으로 암호화 시킨다고 하더라구요.


또 XXTEA라는 알고리즘은 sign값 이라고하는 일종의 로그인 창에서의 id 같은것과

key값이라고 하는 최대 32자리의 패스워드를 가지고 있어서

이 알고리즘을 거친 파일들은 sign과 key의 이 두 값에 따라

파일 데이터가 뒤섞여서 출력된다는 사실도 알았습니다.


이까지 알아내고 파일을 정상적으로 볼수있도록 복호화 시키는 방법을 알아냈는데

대부분 apk 파일을 디컴파일(또는 쉽게 압축해제)하면

/assets/src/ 디렉토리 안에 존재하는 'Main.lua'나 'launcher.lua'등

각종 lua 확장자 파일들이 존재하고

이 파일들을 메모장이나 Hex 에디터 등으로 열게 되면

파일 맨 앞부분에 그나마 깨지지 않고 읽을 수 있는 글자 몇개가 있는데

이게 바로 위에서 말한 sign 값에 해당하게 된다는 사실이었습니다.

이 sign값을 /lib/armeabi/libcocos2dlua.so 라는 라이브러리 파일을

IDA라는 디컴파일러로 열어서 '찾기'하면 찾아진 이 값 근처에 key값이

놓여 있다거나 하는 방식이었습니다.


그래서 저도 이 게임을 apk manager로 앱 디컴파일 시켜보았으나

해당 디렉토리 안에 Main.lua와 launcher.lua 라는 이름을 가진 파일은 없었습니다.

또 lib 폴더안에도 글에서와는 달리 arm64-v8a와 armeabi-v7a 폴더로 나눠져 있을 뿐더러

각 폴더 내부에도 libcocos2dlua.so 라는 파일이 없었습니다.

그래서 이 방법은 안된다고 판단하고 다른 방법을 고려해봤습니다.


구글링 하면서 다른 어떤 글에서 다른 방식으로 찾는 것을 보고

libcocos2dlua.so가 꼭 이 이름이 아닐 수 있다고 하여

QuickShortcutMaker라는 앱을 통해서 알아낸 해당 게임 액티비티 이름의 일부와 같으면서도

라이브러리 파일중 가장 용량이 큰 파일이라고 생각되는 so 파일을 IDA로 열어보았습니다.


보통 암호화에 사용된 key값이 직간접적으로 포함되어있을수 있는 여러 Function을 검색해보았지만

InitWithImageData 및 luaLoadBuffer, luaLoadChunksFromZIP 등등은 파일내에 존재하지 않거나

제가 볼때는 별다른 단서가 없는 것 같았습니다.


lua 게임스크립트는 어차피 이상한 목적도 아니기에 필요없고

png 파일 정도만 확인해보고 싶은 가벼운 마음에 시작했던게

여기까지 올줄은 몰랐네요.. 뭔가 엄청 팠는데 결과물이 없는 느낌 ㅜㅜ

혹시 아는것 있으신 분 좀 도와주셨으면 합니다. (간절)


(역시 삽질은 하면 안되는 건가 싶은..ㅜㅜ 덕분에 시간은 잘가더라구요)