Custom Binary Blocked by FRP Lock + Rooting
갤럭시 벽돌 해결 순정 펌웨어 업데이트 + 안드로이드 루팅
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
루팅이 된 핸드폰에서 앱을 접속시 다음과 같이 첫 화면에서 루팅이 탐지 되었다는 문구가 나타난다
Jadx를 사용하여 apk 파일을 디컴파일 후 탐지된 문구를 Root detected를 찾아 들어가면 다음과 같은 함수를 찾을 수 있다.
해당 함수를 찾아 들어가면 다음과 같이 a,b,c 로 나누어 루팅 탐지를 하여 탐지가되면 return 값으로 true를 보내고 있다.
우선 어떤 함수에서 루팅이 탐지되는지 프리다를 이용하여 확인
frida -U -f owasp.mstg.uncrackable1 -l crack.js --no-pause
a의 함수가 실행이되고 리턴값으로 true 가 반환되는것을 확인할 수 있다.
프리다 코드에서 a의 리턴값을 false로 변경하여 다시 실행
변경된 값이 적용되어 탐지를 우회하여 앱에 정상적으로 접근할 수 있다.
루팅 탐지시 종료되는 exit 함수를 재작성하여 종료되지 않도록 후킹
루팅 탐지를 우회하면 다음은 문자열을 입력하는 창이나온다.
임의의 문자열을 입력하여 검증을 진행하면 다음과 같이 잘못되었다는 창이 나온다
소스코드를 살펴보면 a.a에 입력한 문자열을 받아 일치하면 성공이다
a.a 에서는 복잡하게 값을 받아들이지면 boolean 으로 참,거짓 결과를 반환한다.
간단하게 리턴값을 true 로 설정해주는 후킹코드를 작성
그 후 프리다로 후킹코드를 실행시켜주면 다음과 같이 입력값에 상관없이 참값이 나오게 된다.
frida -U -f owasp.mstg.uncrackable1 -l crack.js --no-pause
간단하게 리턴값을 트루로 후킹하여 우회를 할 수 있지만 검증하는 문자열을 찾는것이 이 문제의 핵심이다
사용자가 입력한 문자열을 bArr과 비교하여 값이 같으면 참을 반환한다.
a.a.a 메소드에 들어가보니 다음과 같이 배열로 2개의 인자값을 받는다
어떤값을 입력해야하지 찾는 코드이다.
this.a를 사용하여 원래의 a함수를 불러와 Str에 저장시킨후 값을 찾으며 리턴값에 원래의 a값을 리턴하여 실행에 문제가 없게 한다.
bArr은 배열이기에 반복문으로 글자를 찾아내며 아스키코드로 반환되기에 fromCharCode 를 사용하여 문자열로 반환시키는 코드