본 문서는 blackmod.net 사이트에서 공유하는 오토체스 Auto Chess V0.5.0 MOD 어플리케이션 분석글입니다.
이번편에는 blackmod에서 공유하는 오토체스 모드앱에 대해서 분석을 진행해보겠습니다.
우선 모드앱을 다운로드 받은 뒤 APK 파일 부터 분석 해봤습니다.
내부 libil2cpp.so가 포함되어 있으니 유니티 IL2CPP 게임인것을 확인할 수 있습니다.
궁수의 전설같은 경우에는 libblackmod.so 라는 네이티브 라이브러리가 삽입되어 있는 반면 libbmt.so와 liblegend.so 가 삽입되어 있었습니다. 분석 결과 라이브러리 로드 순서는 다음과 같습니다.
libbmt.so -> unity3ds 동영상 광고 로드 -> liblegend.so (15초후 로드)
liblegend.so가 해킹과 관련된 주요 후킹 라이브러리 입니다. 위 라이브러리는 360jiagu 패킹되어 있어 라이브러리가 암호화된 채로 숨겨져 있습니다. 해당 라이브러리는 패커 내부 ELF 로더 모듈(dlopen과 유사)을 통해 숨겨진 라이브러리가 로드되며, maps내 이름을 갖지 않은채로 세그먼트들이 로드하게 됩니다.
또한 메모리 덤프를 통한 분석을 방지하기 위해 위와 같이 헤더가 깨진것을 확인할 수 있습니다. ( 자체 로더에서 soinfo 구조체 값만 잘 할당해주면 되거든요. ) 또한 텍스트 섹션의 경우 코드 가상화가 적용된 인스트럭션이 아닌 이상 CPU가 직접적으로 읽고 수행해야 되기 떄문에 정상적으로 로드될 수 밖에 없습니다.
목적은 모드앱의 변조 지점 파악이니 번거로운 분석 없이 계정 로그인 화면에서 린 엔진의 Hook Detctor 기능을 사용하여 후킹 지점을 확인할 수 있었습니다. 위와 같이 점프하는 영역이 liblegend.so 라이브러리의 실제 텍스트 섹션 주소 라고 보시면 됩니다.
public class BattlePlayer // TypeDefIndex: 5829
{
...
public void GainGold(MONEYSOURCE src, int val); // RVA: 0x1201BA8 Offset: 0x1201BA8
public void CostGold(PAYSOURCE src, int val); // RVA: 0x1201D84 Offset: 0x1201D84
...
정확한 분석을 위해 il2cppDumper를 이용하여 추출한 클래스와 메소드입니다.
BattlePalyer 클래스의 GainGold와 CostGold를 후킹한것을 확인할 수 있었으며, 모드앱의 기능인 GOLD MULTIPLE, CARD COST 를 어떻게 구현했는지 분석해보겠습니다.
후킹 지점 분석
GOLD MUTIPLE 기능은 위와 같은 함수 위치(0x4c6d20c)로 점프하게 됩니다. 디스어셈블해보면 r4라는 레지스터에 0x64(100) 값을 넣고 두번째 인자값인 val에 곱하는것을 확인할 수 있습니다. 즉, GainGold 함수가 호출될 때 정상적으로 들어오는 골드값에 곱하기 100을하여 리턴하는 것이죠.
CARD COST 기능은 위와 같은 함수 위치(0x4c6d224)로 점프하게 됩니다. GOLD MUTIPLE 후킹 함수와 비슷한 구조를 가지고 있네요. 함수는 굉장히 단순합니다. 두번째 인자값에 강제로 0으로 교체하고 원래 함수를 호출한 뒤 LR로 점프하도록 하는 구조입니다. 0으로 교체하였기 때문에 카드를 사더라도 코스트값이 소모되지 않겠죠?
해당 변조 코드들도 마찬가지로 굳이 후킹할 필요 없이 해당 함수의 두번째 인자값만 변경해주면 됩니다. 귀찮게 코드짜고 컴파일 후에 인젝션시켜 점프시킬 필요가 없습니다. 물론 치트엔진의 코드케이빙처럼 새로운 메모리 영역을 할당하고 삽입할 인스트럭션을 넣고 실행 권한을 준 뒤 점프시키는 방법으로도 가능합니다.
리포팅
해당 코드가 변조되어 모드앱이 배포되고 있다고 게임 개발사측으로 전달하여 다음과 같이 회신 받았습니다.
이번편도 린엔진을 이용하여 쉽게 변조 지점을 확인할 수 있었습니다.
'Android > Analysis' 카테고리의 다른 글
OLLVM - SplitBaiscBlocks 소스코드 분석 (0) | 2019.12.13 |
---|---|
Archero MOD v1.2.2 분석 (궁수의 전설 버그판) (1) | 2019.09.10 |
랑그릿사 mod v1.8.0 분석 (langrisser mod) (5) | 2019.09.09 |