랑그릿사 MOD 앱 분석

홈 > 안드로이드 > 안드로이드
안드로이드

랑그릿사 MOD 앱 분석

M LIN 36 20561 1
img.png

본 문서는 gamemod.pro 사이트에서 공유하는 랑그릿사 MOD 어플리케이션 분석글입니다.

 

해당 사이트는 최근에 생긴 사이트로 blackmod, platinmods, android republic 사이트처럼 모바일 게임들을 직접 해킹하여 모드앱을 배포하는 사이트입니다. 위 모드앱 사이트는 앱에 로그인 모듈을 삽입하여 gamemod 사이트의 계정을 가입해야지만 사용이 가능하도록 되어있습니다. (아무래도 무분별하게 퍼나르는 사이트들로 인해 인증시스템을 만든것으로 보입니다. 실제로 모드앱을 퍼나르는 사이트들이 굉장히 많습니다. ) 

 

 

img.png

 

본론으로 들어가 해당 사이트에 접속하여 모드앱을 다운받고 분석을 진행해보았습니다. 우선 실제 사이트상에 적힌 기능인 크리티컬 핵이 정상적으로 사용할 수 있는지 확인하기 위해 실행을 하였지만, Download failed 문구와 함께 게임이 진행이 되지 않았습니다. ( 막혔나? )

사이트 내 댓글에는 잘된다는 코멘트들이 있었기에 믿고 분석을 진행해봅시다.

 

img.png

 

실행시에 게임 진행은 안되지만 임의적으로 삽입한 libGameModPro.so 가 삽입되어 로드된 것을 확인할 수 있었습니다. 

 

img.png

 

위 라이브러리는 원본 APK에 존재하지 않으며, lib/armeabi-v7a 폴더에 삽입되어 있습니다. 

바로 IDA로 정적분석을 해봅시다.

라이브러리는 패킹 및 OLLVM등 적용되지 않았기 때문에 까다로운 분석없이 쉽게 분석이 가능하였습니다.

심볼 또한 hidden 심볼이 아닌 스트링이 그대로 나와있었으며, 범용 후킹 프레임워크인 MSHookFunction 심볼을 따라가서 변조 지점을 쉽게 확인할 수 있었습니다.

 

img.pngimg.png

 

libil2cpp.so + 0x348EB00 해당 위치를 후킹한 뒤 4번째 인자값을 강제로 true로 변경하여 실제 함수를 호출구조입니다. 아마도 크리티컬핵이니 4번째 인자는 크티리컬과 관련된 인자값이 아닐까 추측해봅니다. dword_11220은 아군인지 적군인지 확인하는 함수로 추측됩니다.

 

img.png

 

il2cppDumper 툴을 이용하여 해당 함수가 어떤 이름을 가졌는지 확인해보았습니다.

실제로 0x348EB00은 Attack 함수였으며, 세번째 인자는 isCritical이라는 인자이며 크리티컬인지 확인하는 함수가 맞았습니다. 

그래도 정적분석이기 때문에 실제 실행시에 해당 위치를 정말로 후킹하는지 확인을 해보겠습니다. 

 

img.png

 

위와 같이 il2cpp.so의 Base Address + 0x348EB00 의 위치를 추가한 뒤, 메모리 뷰어로 확인하였습니다.

 

img.png

 

제 인라인 후킹 강의글을 보시면 아시겠지만 ARM은 "ldr pc, [pc, #-4]"인스트럭션을 이용하여 앞 4바이트를 점프시킵니다. (대부분의 모드앱들이 해당 인스트럭션으로 후킹합니다.)

정상적인 함수였다면 스택을 구성하는 코드겠지만, 위와 같이 0x41033b9 로 점프하는 모습을 확인할 수 있습니다.

 

img.png

 

아까 위에 그림에서 보셨던 sub_33B8로 이동하는것을 확인할 수 있었습니다.

즉, 정적 분석으로 쉽게 변조포인트를 확인할 수 있었습니다. 

실제 모드앱이 동작하지 않으니... ㅡㅡ;; 정말 크리티컬 핵이 되는지는 확인해봐야겠죠?

 

img.png

 

우선 원본 어플리케이션을 설치한 뒤, 해당 함수를 디스어셈블하여 확인해 봅시다.

뭐.. 따로 함수에 대해서 귀찮게 분석할 필요없이 4번째 인자만 1로 변경하여 크리티컬이 적용되는지 확인하면 되서 굳이 후킹할 필요가 없습니다. 

기존 인스트럭션 : mov r10, r3 (0xe1a0a003)
변경 인스트럭션 : mov r10, #1 (0xE3A0A001)

위와 같이 변경해주면 인자값이 아닌 1(true)로 동작하게 됩니다. 

 

img.png

 

위와 같이 벨류를 변경한 뒤, 게임을 해봅시다.

 

img.gif


적군인지 아군인지 판단해주는 함수로 체크하면 모드앱과 동일하게 작동될것같네요.

 

36 Comments
S 코드몽키 2019.10.05 13:00  
린님 Download failed because you may not have purchased this app  오류 메세지는 구글플레이스토어에서 해당 앱을 다운받은 이력이 없는 상황에서 -모드사이트 등에서 받은 apk등으로 설치한 경우, 생기는 오류입니다. 이경우  해결방법은 구글 플레이스토어에서 순정게임을 다운받아 설치후 삭제
(구글 플레이스토어에서 해당 앱을 다운받아 설치했다는 이력을 남긴 후)- 그 뒤에 모드앱을 설치하면 해당 오류메세지가 뜨지않습니다

Congratulation! You win the 9 축하드립니다! 당첨되셨어요~!

3 아토 2019.10.05 17:15  
와,,,그저 감탄합니다
1 슈슈 2019.10.05 20:03  
대단하네요.. 감사합니다
3 Sukah 2019.10.05 20:20  
우왕....
2 KiJo 2019.10.05 22:27  
와.. 어렵넹 열심히 해야할듯...
5 파파엄마 2019.10.06 06:31  
오호.. 감사합니다 ㅎㅎ 꿀강좌이네요
2 쥬리오 2019.10.06 14:06  
제가 랑그릿사 때문에 여기 알게되었습니다
좋은 강좌 감사합니다
1 hyc0301 2019.10.07 13:36  
도움이 되었습니다.
3 라피스넷 2019.10.07 19:22  
해당 mod.so 라이브러리를 어떻게 로드시켜서 기존 so 라이브러리를 후킹하게 되는지 궁금하네요
M LIN 2019.10.07 19:48  
우선 앱 내 탑재되어 있는 보호솔루션부터 분석 + 우회를 마친 뒤,
덱스내에 모드앱만의 액티비티를 삽입하고 loadlibrary()로 SO를 로드하는 구조입니다. (광고/인증 삽입 등)
또한 이렇게 리패키징된 APK는 중국 보호 솔루션(360, 알리바바 등)을 적용하여 외부에 공유되는 것이죠.
3 라피스넷 2019.10.07 21:25  
답변해주셔서 감사합니다
보안도 결국 해킹의 이해도가 있어야 할 수 있다는걸 다시금 느끼네요
3 가람 2019.12.15 13:46  
린엔진에서 후킹하는 방식도 똑같이 보호솔루션 우회하여 진행되나요?
아니면 앱내 .so파일 넣어서 후킹하는 방식이랑은 다른건가요?
3 뾰족 2019.10.16 16:57  
음. 이런 걸 막으려면 어떻게 해야할 까요? 코드 난독화 해서 메소드 이름을 못찾게 해도 찾는 방법이 다 있을 거 같고...
혹시 강좌에 보안하는 방법도 있을지 찾아 보겠습니다.^^
1 yoshicuda 2019.10.21 16:41  
This website of hacker vietnam for mobile hacking. You will pay 15$ for account, they create account for download Mod mobile.
1 데헤헿 2019.10.24 06:32  
오우야..
4 hekadan 2019.12.03 14:42  
감사합니다!!
4 jmj877 2019.12.06 10:45  
오오 랑그릿사 정보를 얻어가네요
감사합니다.
2 95grit 2019.12.07 00:14  
감사합니다
1 dkssud12 2019.12.08 20:27  
감사합니다 !!
2 빙굴 2019.12.12 08:07  
공부하는데 도움이되었습니다
2 songod 2019.12.19 17:11  
감사합니다.
1 ab1313 2020.01.06 10:20  
감사합니다!!
2 혀기꼬 2020.01.08 15:24  
감사합니다
1 케록 2020.01.08 16:46  
감사합니다.
1 H4N2 2020.03.18 02:30  
대중화된 난독화는 프로그램으로 뚫리던데, 보안 관련해서 제대로 공부해도 완벽한 방어는 무리겠죠
7 래바리 2020.04.03 18:45  
감사합니다.
1 sdfadf 2020.04.05 21:02  
게임 보안이 이렇게 쉽게 뚫리는군요
1 이나얼아니 2020.05.20 13:26  
감사합니다
1 blueblue 2020.06.09 00:28  
대단하네요.
1 12314 2020.12.16 16:12  
4번째 인자만 1로 변경하여 크리티컬이 적용되는지 확인하면 되서 굳이 후킹할 필요가 없습니다. 

기존 인스트럭션 : mov r10, r3 (0xe1a0a003)


네번째 인자인지 두번째인지 구별 방법이 있나요?
1 yeon 2021.02.16 15:34  
분석 공부해보려했는데 감사합니다!
1 lucider 2021.03.04 14:11  
감탄하고 갑니다!
1 펜리르 2021.04.03 21:06  
감사합니다
3 항해 2021.06.09 10:05  
반도 이해가 안가는군요
1 릿카짱 2021.07.26 20:53  
감사합니다~~!!
2 우류 2021.12.27 15:09  
댓글내용 확인