랑그릿사 MOD 앱 분석
본 문서는 gamemod.pro 사이트에서 공유하는 랑그릿사 MOD 어플리케이션 분석글입니다.
해당 사이트는 최근에 생긴 사이트로 blackmod, platinmods, android republic 사이트처럼 모바일 게임들을 직접 해킹하여 모드앱을 배포하는 사이트입니다. 위 모드앱 사이트는 앱에 로그인 모듈을 삽입하여 gamemod 사이트의 계정을 가입해야지만 사용이 가능하도록 되어있습니다. (아무래도 무분별하게 퍼나르는 사이트들로 인해 인증시스템을 만든것으로 보입니다. 실제로 모드앱을 퍼나르는 사이트들이 굉장히 많습니다. )
본론으로 들어가 해당 사이트에 접속하여 모드앱을 다운받고 분석을 진행해보았습니다. 우선 실제 사이트상에 적힌 기능인 크리티컬 핵이 정상적으로 사용할 수 있는지 확인하기 위해 실행을 하였지만, Download failed 문구와 함께 게임이 진행이 되지 않았습니다. ( 막혔나? )
사이트 내 댓글에는 잘된다는 코멘트들이 있었기에 믿고 분석을 진행해봅시다.
실행시에 게임 진행은 안되지만 임의적으로 삽입한 libGameModPro.so 가 삽입되어 로드된 것을 확인할 수 있었습니다.
위 라이브러리는 원본 APK에 존재하지 않으며, lib/armeabi-v7a 폴더에 삽입되어 있습니다.
바로 IDA로 정적분석을 해봅시다.
라이브러리는 패킹 및 OLLVM등 적용되지 않았기 때문에 까다로운 분석없이 쉽게 분석이 가능하였습니다.
심볼 또한 hidden 심볼이 아닌 스트링이 그대로 나와있었으며, 범용 후킹 프레임워크인 MSHookFunction 심볼을 따라가서 변조 지점을 쉽게 확인할 수 있었습니다.
libil2cpp.so + 0x348EB00 해당 위치를 후킹한 뒤 4번째 인자값을 강제로 true로 변경하여 실제 함수를 호출구조입니다. 아마도 크리티컬핵이니 4번째 인자는 크티리컬과 관련된 인자값이 아닐까 추측해봅니다. dword_11220은 아군인지 적군인지 확인하는 함수로 추측됩니다.
il2cppDumper 툴을 이용하여 해당 함수가 어떤 이름을 가졌는지 확인해보았습니다.
실제로 0x348EB00은 Attack 함수였으며, 세번째 인자는 isCritical이라는 인자이며 크리티컬인지 확인하는 함수가 맞았습니다.
그래도 정적분석이기 때문에 실제 실행시에 해당 위치를 정말로 후킹하는지 확인을 해보겠습니다.
위와 같이 il2cpp.so의 Base Address + 0x348EB00 의 위치를 추가한 뒤, 메모리 뷰어로 확인하였습니다.
제 인라인 후킹 강의글을 보시면 아시겠지만 ARM은 "ldr pc, [pc, #-4]"인스트럭션을 이용하여 앞 4바이트를 점프시킵니다. (대부분의 모드앱들이 해당 인스트럭션으로 후킹합니다.)
정상적인 함수였다면 스택을 구성하는 코드겠지만, 위와 같이 0x41033b9 로 점프하는 모습을 확인할 수 있습니다.
아까 위에 그림에서 보셨던 sub_33B8로 이동하는것을 확인할 수 있었습니다.
즉, 정적 분석으로 쉽게 변조포인트를 확인할 수 있었습니다.
실제 모드앱이 동작하지 않으니... ㅡㅡ;; 정말 크리티컬 핵이 되는지는 확인해봐야겠죠?
우선 원본 어플리케이션을 설치한 뒤, 해당 함수를 디스어셈블하여 확인해 봅시다.
뭐.. 따로 함수에 대해서 귀찮게 분석할 필요없이 4번째 인자만 1로 변경하여 크리티컬이 적용되는지 확인하면 되서 굳이 후킹할 필요가 없습니다.
기존 인스트럭션 : mov r10, r3 (0xe1a0a003)
변경 인스트럭션 : mov r10, #1 (0xE3A0A001)
위와 같이 변경해주면 인자값이 아닌 1(true)로 동작하게 됩니다.
위와 같이 벨류를 변경한 뒤, 게임을 해봅시다.
적군인지 아군인지 판단해주는 함수로 체크하면 모드앱과 동일하게 작동될것같네요.