때는 내가 어릴적, 지금은 모두가 스마트폰을 쓰지만 그때는 아직 스마트폰을 가진 사람은 몇명 없었고 피처폰같은 폴더폰 종류의 휴대폰을 흔히 볼 수 있던 시대였다.
그때 나는 부모님의 피처폰을 가지고 게임을 했었는데 그중 가장 기억에 남는것은 바로 '렙업만이살길2' 라는 게임이었다.
고된 일상을 보내던 와중 뜬금없이 옛날에 했던 이 게임이 생각나서 바로 구글에서 apk 파일을 구해서 내가 지금 사용하고 있는 폰에 설치하려고 하는데, 앱이 너무 오래돼서 그런지 호환이 안된다며 설치가 안되는 것이었다.
그래서 내가 가지고 있는 기기 중 가장 오래된 삼성의 SHV-E500S 라는 휴대폰(무려 12년 전인 2013년에 출시한 모델이다)에 apk를 깔고 실행해봤더니 이럴수가

실행이 된다!!
옛날에 봤던 익숙한 얼굴들이 향수를 자극했다
설치가 완료됐으니 게임을 즐겨봤다.
첫번째 스테이지인 숲 스테이지의 보스도 잡고.. 스킬도 배우고 추억이 새록새록 돋아났다.
그런데 게임을 플레이하면서 매우 찝찝했던 점이 한가지 있다.
다른 npc들이 판매하는 것들은 황금돼지(게임 내 재화)로 구매가 가능했는데, 위 사진의 금촌구 김촌장이라는 npc가 판매하는 물건들은 게임 내 재화로 구매하는게 아니라 실제 현금으로만 구매가 가능한 아이템인 것이었다!!


심지어 정말 악질이라고 느꼈던게 택배박스라는 아이템을 개봉할수 있게 해주는 커터칼을 현질을 통해서만 살 수 있게 만들어놨다..(아무리 200원이지만..)
그래서 너 잘 걸렸다 싶어서 바로 앱을 뜯어보기로 결심하고 무작정 jadx로 열어보았다.
솔직히 나는 모바일 게임을 뜯어본적이 별로 없다. 게임 리버싱이라고 해도 옛날에 궁수의 전설이라는 게임을 frida 테스트용으로 hp 관련 함수를 후킹해서 피 99999를 만들어본 경험이 있는데 그게 전부다. (심지어 그것도 다른 분의 블로그 글을 참고해서 뜯어본 거였다)
리버싱은 일단 부딪혀보는게 중요하고 무엇보다도 옛날과는 차원이 다른 chatgpt와 같은 정보 습득/분석 도구가 생겼기에 겁먹지 않고 시작할 수 있었다.
그래서 일단 이 게임이 어떤 엔진으로 만들어졌는지부터 파악해보려고 했다. 이미 사람들이 만들어놓은 특정 게임 엔진을 대상으로 한 분석 도구들이 있다면 그걸 써서 효율적으로 작업할 수 있으니까..
그런데 이런.. jadx를 계속 뒤져봐도 특정 게임 엔진을 사용한 흔적을 찾아볼 수가 없었다. 예를 들어서 유니티로 만들어졌다면 libil2cpp.so 라는 파일이 있거나 하는 그런 흔적 말이다.
이 게임이 사용하고 있는 라이브러리 파일은 내가 생전 듣도 보도 못한, 심지어 구글에 검색해도 검색 결과가 단 한개도 나오지 않는 libchilsan.so 라는 이름의 파일이었다.

그래서 그냥 얘가 import/export하는 함수들이 뭔지, 함수들의 이름들로 이 파일의 용도를 가늠해보기 위해 일단 기드라로 열어보았다. (처음에 IDA로 열어봤는데 ARM 관련은 IDA 무료버전에서 지원하지 않는댄다...)
처음에 뭘 했었는지 솔직히 기억이 잘 안난다. 그냥 symbol tree에서 함수 이름들이 뭐가 있는지 살펴봤었던 것 같다.

무슨 AttackTarget, Check_BossMob 이런 함수들이 있길래 아 게임 관련을 이 파일에서 처리하나..? 라는 생각이 들었고 부끄럽지만 이때까지 나는 jadx에서 소스코드 부분에 있는 java 코드들이 게임 관련된 것을 전부 담당하고 있는줄만 알았다. 그래서 이 네이티브 라이브러리와 java 소스코드 각자의 역할이 무엇인지에 대한 경계가 조금 흐릿했다.
그러면서 JNI 진입점 관련 코드를 찾다가 Java_com_bunavi_LevupF_MainActivity_OnNativeInitialize라는 함수를 발견했고 안쪽을 쭉 따라가다가 다음과 같은 부분을 발견했다.

startClet..? 뭔가 수상하다. 구글에 이 함수를 검색해보니 WIPI 플랫폼에서 작동하는 어플에서 이러한 함수를 사용한다는 것을 발견했다.
그렇다. 나는 이태까지 정말 중요한 정보를 잊고 있었던 것이다. 이 게임은 피처폰 게임이다.
그래서 android에서 apk 형태로 작동시키기 위해 기존의 게임을 안드로이드용으로 포팅했을 가능성이 크다. 그렇기에 이 libchilsan.so라는 파일은 게임과 관련된 모든 것을 담당하는 파일임이 유력한 것이다. (안드로이드에서 돌아가도록 완전히 새로 개발하지는 않았을 테니까. 원래 게임을 네이티브 라이브러리 형식으로 만들어서 안드로이드 앱 형태로 포팅한 것이 분명했다.)

Hmmmm....
이렇게 libchilsan.so를 분석해서 패치하면 되겠거니.. 하며 분석 방향을 정하게 되었고 이렇게 하루가 지나갔다.
(2편에 계속)
'Security > Reversing' 카테고리의 다른 글
| 삼성 T5 포터블 SSD 자동 해제 프로그램 개발 (with SCSI protocol) (0) | 2025.11.10 |
|---|---|
| 추억의 게임 렙업만이살길2 리버싱 일기 - 2편 (완) (7) | 2025.06.03 |
| DLL Injection 기법 - 프로세스에 침투하기 (0) | 2024.02.08 |
| 윈도우 이벤트 메시지 후킹 기법 (0) | 2024.02.06 |
| 인라인 패치 기법 (2) | 2024.02.04 |