Uncrackable1 Write up

Uncrackable1 Write up

in

Uncrackable 1 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번문제 (루팅탐지 우회)

루팅이 된 핸드폰에서 앱을 접속시 다음과 같이 첫 화면에서 루팅이 탐지 되었다는 문구가 나타난다

uncrackable1_1

Jadx를 사용하여 apk 파일을 디컴파일 후 탐지된 문구를 Root detected를 찾아 들어가면 다음과 같은 함수를 찾을 수 있다.

uncrackable1_2

해당 함수를 찾아 들어가면 다음과 같이 a,b,c 로 나누어 루팅 탐지를 하여 탐지가되면 return 값으로 true를 보내고 있다.

uncrackable1_3

우선 어떤 함수에서 루팅이 탐지되는지 프리다를 이용하여 확인

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

a의 함수가 실행이되고 리턴값으로 true 가 반환되는것을 확인할 수 있다.

uncrackable1_5

프리다 코드에서 a의 리턴값을 false로 변경하여 다시 실행

uncrackable1_6

변경된 값이 적용되어 탐지를 우회하여 앱에 정상적으로 접근할 수 있다.

uncrackable1_7

루팅탐지 우회 다른방법

루팅 탐지시 종료되는 exit 함수를 재작성하여 종료되지 않도록 후킹

title

2번문제 (문자열 인증 우회)

루팅 탐지를 우회하면 다음은 문자열을 입력하는 창이나온다.
임의의 문자열을 입력하여 검증을 진행하면 다음과 같이 잘못되었다는 창이 나온다

uncrackable1_8

소스코드를 살펴보면 a.a에 입력한 문자열을 받아 일치하면 성공이다

uncrackable1_9

a.a 에서는 복잡하게 값을 받아들이지면 boolean 으로 참,거짓 결과를 반환한다.

uncrackable1_10

간단하게 리턴값을 true 로 설정해주는 후킹코드를 작성

uncrackable1_11

그 후 프리다로 후킹코드를 실행시켜주면 다음과 같이 입력값에 상관없이 참값이 나오게 된다.

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

uncrackable1_12

문자열 찾기

간단하게 리턴값을 트루로 후킹하여 우회를 할 수 있지만 검증하는 문자열을 찾는것이 이 문제의 핵심이다
사용자가 입력한 문자열을 bArr과 비교하여 값이 같으면 참을 반환한다.

uncrackable1_13

a.a.a 메소드에 들어가보니 다음과 같이 배열로 2개의 인자값을 받는다

uncrackable1_14

어떤값을 입력해야하지 찾는 코드이다.
this.a를 사용하여 원래의 a함수를 불러와 Str에 저장시킨후 값을 찾으며 리턴값에 원래의 a값을 리턴하여 실행에 문제가 없게 한다.
bArr은 배열이기에 반복문으로 글자를 찾아내며 아스키코드로 반환되기에 fromCharCode 를 사용하여 문자열로 반환시키는 코드

uncrackable1_15

uncrackable1_16