추억의 게임 렙업만이살길2 리버싱 일기 - 1편

2025. 6. 1. 21:21·Security/Reversing
반응형

때는 내가 어릴적, 지금은 모두가 스마트폰을 쓰지만 그때는 아직 스마트폰을 가진 사람은 몇명 없었고 피처폰같은 폴더폰 종류의 휴대폰을 흔히 볼 수 있던 시대였다.

 

그때 나는 부모님의 피처폰을 가지고 게임을 했었는데 그중 가장 기억에 남는것은 바로 '렙업만이살길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
'Security/Reversing' 카테고리의 다른 글
  • 삼성 T5 포터블 SSD 자동 해제 프로그램 개발 (with SCSI protocol)
  • 추억의 게임 렙업만이살길2 리버싱 일기 - 2편 (완)
  • DLL Injection 기법 - 프로세스에 침투하기
  • 윈도우 이벤트 메시지 후킹 기법
minmoong
minmoong
    반응형
  • minmoong
    minmoong
    minmoong
  • 전체
    오늘
    어제
    • Categories (16)
      • Programming (1)
        • Python (1)
        • WIPI (0)
      • Security (11)
        • Pwnable (2)
        • Reversing (9)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c++
    밀초 버그
    WIPI emulator
    게임 리버싱
    WIPI 에뮬
    hopper disassembler 염병
    채팅 버그
    리버싱 기법
    상남자의 OS
    Python
    BiDi
    Cpython
    우분투 깔고
    렙업만이살길1
    우분투 문제해결
    밀초 채팅 버그
    리버싱
    렙업만이살길
    렙업만이살길2
    후킹
    파이썬
    게임 해킹
    cpython-internals
    렙업만이살길3
    밀크초코 채팅
    WIPI 에뮬레이터
    밀초
    리버스 엔지니어링
    역대급 병크
    github wie
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
minmoong
추억의 게임 렙업만이살길2 리버싱 일기 - 1편
상단으로

티스토리툴바