Uncrackable2 Write up

Uncrackable2 Write up

in

Uncrackable 2 Write up

Welcome to the UnCrackable Apps for Android and iOS, a collection of mobile reverse engineering challenges. These challenges are used as examples throughout the Mobile Security Testing Guide. Of course, you can also solve them for fun.

OWASP 에서 만든 모바일 리버싱 앱이다

https://github.com/OWASP/owasp-mstg/tree/master/Crackmes

1번문제 (루팅탐지 우회)

Uncrackable level1과 동일하게 진행되는거같다.
우선 루팅탐지 우회를 진행해야한다.

uncrackable2_1

jadx를 사용하여 우선 코드를 살펴보면 b클래스의 a,b,c에서 루팅탐지를 하고있다.

uncrackable2_2

자세하게 살펴보면 각 a,b,c마다 각각의 방법으로 루팅을 탐지해 참,거짓값을 리턴해주고있다

uncrackable2_3

level1 과 동일하게 후킹코드를 작성할 수 있다.

uncrackable2_4: width=”100%”}

frida -U -f owasp.mstg.uncrackable2 -l crack.js --no-pause

uncrackable2_5

2번문제 (문자열 우회)

루팅 탐지를 우회하면 동일하게 문자열을 검증하는 문제이다

uncrackable2_6

코드를 살펴보면 native를 사용하여 bar를 불러오는데 우선 so파일을 사용하기 이전에 간단하게 우회하는 방법부터 시도

uncrackable2_8

uncrackable2_7

1번문제에서 했던건과 동일하게 boolean 으로 참,거짓을 구별하기에 return true를 반환하는 코드 작성시 간단하게 우회할 수 있다.

uncrackable2_9

uncrackable2_10

So파일을 찾아 문자열 찾기

이번에는 어떤 문자열을 입력하여야 되는지 찾는방식으로 함수를 후킹해 보자.
우선 문자열 검증을 하는 코드를 찾아 들어간다

uncrackable2_11

함수를 찾아 들어가면 native로 bar함수를 불러오는데 어디에도 bar에 대한 코드가 나와있지않다.
Native란?
Java는 디바이스가 해석할때 smali라는 저급 언어로 번역을 거친 후에 컴퓨터 언어(0,1)로 컴파일 되지만 c/c++은 별도의 번역과정없이 바로 컴파일되어 속도면에서 빠르게 진행된다.
Native는 안드로이드 애플리케이션에서 Java가 아닌 c/c++로 구현된 부분

uncrackable2_12

메인액티비티에서 foo.so파일을 불러오는것을 확인할 수 있다. so파일을 불러올시 lib는 제외할수 있다.

uncrackable2_13

apktool 을 이용하여 apk파일을 디컴파일 해준 후 기드라를 이용하여 so파일을 분석한다.

uncrackable2_14

기드라를 이용하여 어셈블리어를 c로 표현시켜줄 수 있는데 strncmp, 즉 비교하는 함수를 통하여 0x17 즉 23바이트의 크기를 비교하고 있다. 또한 바이너리 형식이기 때문에 우리가 해석할 수 있는 정수 형태로 변환하기 위하여 toInt32() 함수도 사용하여 코드를 작성할 수 있다.

uncrackable2_15

onEnter = 후킹 대상 메소드 진입시에 동작하는 코드를 코드 블럭 내에 명시,함수 인자 값 확인가능</br> onLeave = 후킹 대상 메소드를 벗어날 시 동작하는 코드를 코드 블럭 내에 명시,함수 반환 값 확인 가능

uncrackable2_16

프리다를 통해 실행시키면 23글자를 입력할 시 다음과 같이 시크릿 키가 노출된다.

uncrackable2_17