어쩌다 보니 게임 데이터를 뜯어보려다가 이쪽으로 많이 알게 되었네요..
(목적이었던 게임 데이터 열어보기는 아직도 못해봤지만..?)
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 파일 정도만 확인해보고 싶은 가벼운 마음에 시작했던게
여기까지 올줄은 몰랐네요.. 뭔가 엄청 팠는데 결과물이 없는 느낌 ㅜㅜ
혹시 아는것 있으신 분 좀 도와주셨으면 합니다. (간절)
(역시 삽질은 하면 안되는 건가 싶은..ㅜㅜ 덕분에 시간은 잘가더라구요)
포기하싲시오 행님
간단히 png파일을 열어보고 싶은거면. 내 생각엔.... png파일 구조에서 쓸대없는 정보 다 빼버리고 순수 픽셀데이터만 담아놓고 .png확장자 줬을거 같은데. 그래서 니가 일반적인 png파일 구조 안다면 그 구조에다가 픽셀데이터부분 덮어씌워서 저장하면 일반 뷰어에서 보일거같은데. 팔레트가 있다면 팔레트 정보랑 같이.
암호화 이런건 아닐거같다. 단순히 걔네가 정해서 가공한 파일구조를 모르는거지.
png파일들 헥스값을 확인해보니 전부 앞쪽 부분이 일치하더라구요. 이미지는 분명 제각기 다를텐데 이상하긴 합니다. 음향이나 영상 파일들도 전부 앞쪽이 같더군요.. 아 그리고 본문엔 빠져있는데.. 우연히 게임 데이터를 받아오는 서버를 알아내서 들어가봤는데, 거기서 암호화 툴을 발견했습니다..
구글링해보니 이 게임엔진 사용하는 게임들이 데이터 보호를 위해 자주 사용하는 모양이더군요.. 그렇다면 암호화 된 데이터를 재배열해서 읽는 프로세스가 앱 내에 있단 얘기니깐 분명 단서가 어디에 있을텐데 ..역시 쉽지가 않습니다..
apk안에 그게 없다면 apkpure 라던지 apkcombo 에서 다운받아서 거기서 다시뒤져봐보셈여