[모바일 해킹 연습] Uncrackable2 풀이

[모바일 해킹 연습] Uncrackable2 풀이

Lecture
Security
태그
uncrackable
frida
mobile hacking
public
완성
Y
생성일
Mar 18, 2024 05:48 AM
LectureName
Mobile Hacking (Android - Frida )

1. Uncrackable2


1.1 다운로드

해당 웹사이트에서 다운 받을 수 있으며, view Raw 버튼을 누르면 다운로드 됩니다.
 
 

1.2 실습 준비 도구

유형 별로 정리해 두었습니다. 유형 별로 맘에 드는 도구를 선택하여 사용하시면 됩니다.
 
Apk 분석 툴
  • jadx (추천) → 현재 풀이에서 사용
  • BytecodeViewer
  • jd-gui & dex2jar
 
리버스 엔지니어링 도구
  • IDA → 현재 풀이에서 사용
  • Gidra
 
Frida
  • Frida (client, server) 환경 구축 완료 상태
 
device
  • mobile device ( 루팅폰 ) → 현재 풀이에서 사용
  • ADV ( 루팅 )
  • NOX ( 루팅 )
 
 
 
 

2. Uncrackable2 풀이


디바이스에 해당 어플리케이션을 설치한 상태로 진행합니다. 디바이스는 반드시 루팅 된 상태여야 합니다
adb install <apk> 혹은 USB 연결로 옮겨서 설치하기
 

2.1 루팅 탐지 우회

대부분의 모바일 애플리케이션은, 현재 애플리케이션이 돌아가고 있는 환경이 루팅이 된 디바이스인지 확인합니다. 해당 애플리케이션도 루팅이 되었는지 체크 후, alert를 발생 시키는 것을 볼 수 있습니다.
 
루팅 탐지
notion image
  • 루팅된 디바이스에서 애플리케이션을 실행하면 alert 발생
  • OK 버튼을 누르면 exit 을 호출하여 애플리케이션 종료
 
 
소스코드 분석
1. jadx 를 이용하여 Uncrackable2.apk를 분석을 시작합니다.
notion image
 
2. 루팅 탐지 로직을 찾기 위하여, alert로 Root Detected 을 띄우는 부분을 검색합니다.
notion image
  • 해당 코드를 부면 b.a, b.b, b.c메서드를 호출하고, 해당 메서드가 True를 반환하면 alert를 띄우는 것을 볼 수 있습니다.
 
 
3. class b를 분석해 보겠습니다.
notion image
  • b.a에서는 su가 PATH에 등록되어 있는지 확인합니다.
  • b.b에서는 빌드 태그를 확인하여, 개발 환경에서 테스트 목적으로 배포되었는지 확인합니다.
  • b.c에서는 루팅에 사용되는 주요 경로들을 검사합니다.
 
 
➡️ 즉, 해당 함수들을 우회하면, 기본적으로 루팅 탐지를 우회 할 수 있습니다.
 
 
 
루팅 탐지 우회
1. Frida Script를 이용하여, 해당 함수들이 아무 동작을 하지 않고 false 를 리턴하도록 해보겠습니다.
setImmediate(function(){ Java.perform(function(){ let rootDetactClass = Java.use("sg.vantagepoint.a.b") rootDetactClass.a.implementation = function(){ return false; } rootDetactClass.b.implementation = function(){ return false; } rootDetactClass.c.implementation = function(){ return false; } }) })
 
 
2. Frida Script를 Spawn 형태로 실행시킵니다. ( -f 옵션 )
  • -f 옵션을 줄 경우, 애플리케이션이 실행되면서, 스크립트가 동작합니다.
notion image
 
 
루팅 탐지 우회 성공
  • 루팅 탐지가 진행되지 않고, Verify를 하라는 EditTextWidget이 보이게 됩니다.
 
 
 

2.2 Secret Value 분석

1. Verify 분석
2.1 루팅탐지 우회 이후 발견된 Verify 부분을 분석해 보면, EditText에서 입력된 값을 기준으로, a.a method를 실행시켜 입력 값을 확인하는 로직이 존재합니다.
 
notion image
 
 
2. 해당 변수(m)가 선언된 코드 상단을 보면, CodeCheck라는 Class 변수임을 볼 수 있습니다.
notion image
 
 
3. 해당 클래스를 살펴보면, 네이티브 메소드임을 알 수 있습니다.
notion image
 
💡
native method란?
  • 자바 언어가 아닌 c나 c++ 언어로 작성된 코드를 호출하는 메소드를 말합니다.
  • JNI (Java Native Interface) 를 통해 호출됩니다.
 
추가적으로 네이티브 메서드를 호출하려면, 이런식으로 라이브러리를 가져와야 합니다.
notion image
 
 
4. so 파일 분석
APK 파일 → ZIP파일
notion image
  • APK파일은 ZIP 파일과 유사한 구조를 가지고 있어, ZIP파일로 변환하여 압축 해제할 수 있습니다.
 
lib 폴더 확인
notion image
  • 압축을 해제하면 lib라는 폴더가 존재하고, 여기에 필요한 라이브러리들이 존재합니다.
 
so파일 확인
notion image
  • 해당 폴더를 열어보면, 아키텍쳐별로 지원되는 so 파일이 존재합니다.
  • 일단 여기서 x86_64 즉, Intel 아키텍쳐의 파일을 분석해 보겠습니다.
 
 
5. IDA를 이용한 리버싱
IDA
notion image
  • 파일을 등록하고 OK 를 누릅니다.
  • ELF 파일을 선택하고, OK를 누릅니다.
 
CodeCheck 분석
Native code에는 함수명이 Java_pakage_class_method 형식으로 정의됩니다. 여기서 ~CodeCheck~ 관련된 method를 분석해 보겠습니다.
notion image
  • 해당 함수를 클릭 후, 디컴파일 (f5) 을 시도합니다.
 
 
Secret 문자열 확인
notion image
  • 해당 코드를 보면, 입력 값과 Thanks for all the fish 를 비교하여, 동일하다면 result를 1로 변경하는 것을 볼 수 있습니다.
  • 따라서 에디터에 해당 값을 복사하거나 해당 라이브러리가 로드되어 동작할 때, 값을 후킹하면 풀 수 있습니다.
 
 

3. Solv


notion image
앞서 추출한 문자열을 그대로 입력하였습니다.
 

3.1 Point

  • Native Code 분석
  • 루팅탐지
  • 하드코