Custom Binary Blocked by FRP Lock + Rooting
갤럭시 벽돌 해결 순정 펌웨어 업데이트 + 안드로이드 루팅
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
Uncrackable level1과 동일하게 진행되는거같다.
우선 루팅탐지 우회를 진행해야한다.
jadx를 사용하여 우선 코드를 살펴보면 b클래스의 a,b,c에서 루팅탐지를 하고있다.
자세하게 살펴보면 각 a,b,c마다 각각의 방법으로 루팅을 탐지해 참,거짓값을 리턴해주고있다
level1 과 동일하게 후킹코드를 작성할 수 있다.
: width=”100%”}
frida -U -f owasp.mstg.uncrackable2 -l crack.js --no-pause
루팅 탐지를 우회하면 동일하게 문자열을 검증하는 문제이다
코드를 살펴보면 native를 사용하여 bar를 불러오는데 우선 so파일을 사용하기 이전에 간단하게 우회하는 방법부터 시도
1번문제에서 했던건과 동일하게 boolean 으로 참,거짓을 구별하기에 return true를 반환하는 코드 작성시 간단하게 우회할 수 있다.
이번에는 어떤 문자열을 입력하여야 되는지 찾는방식으로 함수를 후킹해 보자.
우선 문자열 검증을 하는 코드를 찾아 들어간다
함수를 찾아 들어가면 native로 bar함수를 불러오는데 어디에도 bar에 대한 코드가 나와있지않다.
Native란?
Java는 디바이스가 해석할때 smali라는 저급 언어로 번역을 거친 후에 컴퓨터 언어(0,1)로 컴파일 되지만
c/c++은 별도의 번역과정없이 바로 컴파일되어 속도면에서 빠르게 진행된다.
Native는 안드로이드 애플리케이션에서 Java가 아닌 c/c++로 구현된 부분
메인액티비티에서 foo.so파일을 불러오는것을 확인할 수 있다. so파일을 불러올시 lib는 제외할수 있다.
apktool 을 이용하여 apk파일을 디컴파일 해준 후 기드라를 이용하여 so파일을 분석한다.
기드라를 이용하여 어셈블리어를 c로 표현시켜줄 수 있는데 strncmp, 즉 비교하는 함수를 통하여 0x17 즉 23바이트의 크기를 비교하고 있다. 또한 바이너리 형식이기 때문에 우리가 해석할 수 있는 정수 형태로 변환하기 위하여 toInt32() 함수도 사용하여 코드를 작성할 수 있다.
onEnter = 후킹 대상 메소드 진입시에 동작하는 코드를 코드 블럭 내에 명시,함수 인자 값 확인가능</br> onLeave = 후킹 대상 메소드를 벗어날 시 동작하는 코드를 코드 블럭 내에 명시,함수 반환 값 확인 가능
프리다를 통해 실행시키면 23글자를 입력할 시 다음과 같이 시크릿 키가 노출된다.