[Android 앱진단] Clicker.apk 앱 문제 풀이
Jadx decompile툴을 사용해서 찾기 기능으로 flag를 찾아 봤습니다.
flag로 검색 된 소스코드로 직접 접근해서 확인해 보니 flag를 획득하면 “Conguraturations!” The flag is ... TMCTF{ …………………} 이런 형식으로 flag가 나올 거라는 예상을 해 봤습니다.
또한, NOX프로그램에서 clicker.apk를 실행 시키면 아래와 같은 앱 화면이 실행 되었습니다. 클릭을 1번 할 때마다 1씩 증가하게 되고, 1000만번을 클릭 할 경우 flag를 획득할 것으로 예상이 되었습니다.
디컴파일 툴에 있는 찾기 기능을 통해 SCORE를 찾아 봤습니다. 앱 화면 창을 클릭 또는 터치하게 되면 this.g++; 값이 1씩 증가하게 되고, this.g값이 3769, 10007, 59239, 100003, 495221, 1000003, 9999999와 일치하게 되면 브로드캐스트 메시지를 송신하게 됩니다.
앱 화면을 클릭 할 경우, 브로드캐스트 메시지가 송신될 수 있도록 this.g값을 3768, 10006, 59238, 100002, 495220, 1000002, 9999998가 되게 스크립트 코드를 작성하였습니다. 그런데 Frida 스크립트를 통해 명령을 실행한 후, 9999998가 자동 클릭 된 상태에서 마지막 한번을 클릭해도 flag가 나오지 않았고, NOX프로그램의 clicker.apk 앱이 강제 종료 되었습니다.
이 문제는 CongraturationsActivity의 onCreate 메소드에서 com.tm.ctf.clicker.a.a.c() 메소드를 호출 할 때
SharedPreferences에 저장 된 COUNT 값이 10000000이 아니면(if(10000000 !=a.c()) 강제종료(finish();) 되는 문제였습니다.
소스코드를 수정하기 위해 Apktool을 사용하여 디컴파일을 하고
smali 파일을 문서 편집기를 사용하여 변조했습니다.
(COUNT값이 10000000이 아니어도 앱이 종료되지 않게, if-eq값을 if-ne로 변경)
소스코드를 수정한 후, Apktool을 사용하여 리패키징을 했습니다.
그리고 Uber(keytool의 한 종류)을 사용하여 서명을 해 줬습니다.
예시) C:\>java -jar uber-apk-signer-1.2.1.jar -a repack_clicker.apk --allowResign –overwrite
마지막 단계로 frida를 사용해서 후킹을 하고 앱 화면을 1번 클릭하자 flag를 획득 할 수 있었습니다.
The end!
[참고]
'해킹 & 보안 > Mobile' 카테고리의 다른 글
[iOS 앱 진단] DVIA-v2 Jailbreak Test3 (0) | 2022.02.20 |
---|---|
[iOS 앱 진단] DVIA-v2 Jailbreak Test2 (0) | 2022.02.19 |
[iOS 앱 진단] DVIA-v2 Jailbreak Test1 (0) | 2022.02.16 |
[Android 앱진단] Crackme.apk 해킹 문제 풀이 (0) | 2021.08.11 |
[iOS 앱 진단] DVIA-v2 파일을 IDA Pro를 사용하여 리버싱 하는 과정 (3) | 2021.07.07 |