무기는 끈기

[모바일 앱 해킹 / 안드로이드] Frida를 이용한 VirusClicker.apk 해킹 CTF write up 본문

Hacking/Mobile Hacking

[모바일 앱 해킹 / 안드로이드] Frida를 이용한 VirusClicker.apk 해킹 CTF write up

김유비야 2024. 6. 13. 14:16

안드로이드 앱 해킹 실습용으로 제작된 clicker.apk 어플을 Frida를 사용해서 해킹 해보려고 한다.

 

Step 1. VirusClicker 안드로이드 어플리케이션을 설치한다.

안드로이드 애뮬레이터인 Nox VirusClicker.apk 파일을 install 한다.

 

Step 2. 앱의 실행 로직 및 UI를 살펴본다.

10,000,000클릭하면 Flag가 나오는 로직의 앱이다.

 

Step 3. JADX 도구를 사용해서 앱 내부 코드를 분석한다.

여기서 어떤 메소드 위주로 분석하면 좋을지를 유추해본다.

-       Touch, Click, Action 관련 메소드
:
앱의 로직과 UI 상에서 유추해볼 수 있듯이 클릭으로 진행되기 때문

-       10000000
: 10000000
텍스트 검색을 통해 관련된 클래스, 메소들을 확인

-       Flag
: Flag
가 숨어있을 것이기에 Flag가 어떤 형태로, 어떤 클래스에 위치해 있을지 미리 확인

 

onTouchEvent 를 찾았다. 이 앱의 클릭 수는 해당 메소드로 조작이 되는 것으로 보인다.

com.tm.ctf.clicker.activity.bcom.tm.ctf.clicker.activity.c 클래스에 메소드가 위치해 있다.
해당 클래스들을 먼저 살펴보자.

onTouchEvent 메소드를 분석해보니 10,000,000번 터치 횟수가 필요한 건 맞지만 그 과정에서 우회하는 것을 방지하기 위해 특정 터치 횟수마다 체크를 해주는 것을 발견했다.

3769, 10007, 59239 특정 횟수 도달 시 문자를 문자열에 추가해주고, 마지막에 완성된 문자열을 비교해서 동일하지 않으면 강제종료를 하는 방식으로 구성되어 있다.

 

Step 4. Frida로 공격해 볼 우회 코드를 작성한다.

JADX에서 확인한 코드를 우회할 코드를 작성한다.

 

Step 5. Frida로 공격해본다.

완성한 우회 코드를 활용하여 Frida로 공격해본다.

코드를 맞게 작성해서 10,000,000까지 클릭이 도달했는데도 강제종료 된다.

원인을 분석하기 위해 JADX를 다시 살펴봤다.

 

Step 6. JADX로 강제종료 로직을 재분석한다.

Finish 되는 부분을 살펴봤더니 COUNT 10,000,000가 되지 않으면 강제종료 시킨다는 것을 발견했다.

정상적으로 10,000,000 COUNT가 되면 CongratulationsAcrivity가 생성되고 onCreate가 호출된다.

해당 부분을 우회해주기 위해선 apktool을 이용해서 smali 코드를 우회해주어야 한다.

 

Step 7. Apktool을 사용해서 우회 후 리패키징 한다.

Apktool 을 이용해서 clicker.apk를 디컴파일 한다.

Smali 폴더에 들어가 CongraturationsActivity.smali 파일을 편집해준다.

If 를 검색해서 해당 부분으로 이동한다.

if-eq : 값이 같을 경우 참
if-ne :
값이 다를 경우 참

if-eq 라고 되어있던 부분을 if-ne 로 변경해서 저장해준다.

소스코드를 수정했으면 apktool을 사용해서 다시 리패키징 해준다.

이 과정에서 안드로이드 인증이 필요하니 keytool의 한 종류인 Uber.jar를 사용해서 인증해주었다.

 

Step 8. 리패키징 된 어플로 다시 공격해본다.

10,000,000번을 도달해도 이번엔 강제종료 되지 않고 Flag를 확인할 수 있다.