Uncrackable_level1.apk 풀이, Frida 후킹

2020. 5. 20. 11:172020/Android App Hacking

분석환경: Kalilinux, Nox

대상 앱: Uncrackable_level1.apk

앱 실행 시 루팅이 탐지되고, 알림창을 끄는 OK버튼을 클릭하면 exit() 함수가 실행되어 앱이 종료된다.

-> 앱을 실행시켜 본 뒤 자바 코드를 읽고 파악하였음

 

코드 획득

# apktool d Uncrackable_level1.apk

=> Android.xml, Smali, library 획득

# d2j-dex2jar Uncrackable_level1.apk

=> dex 형식의 안드로이드 파일을 jar형식으로 변환시켜 사람이 읽을 수 있는 자바 코드를 획득한다.

 

먼저 앱을 실행시키기 위해서 exit함수를 후킹해야한다. = exit함수를 조작하여 앱이 종료되지 않게한다.

exit() function

- java.lang.System class

setImmediate: 프리다 구동 시 자바스크립트 실행.

Java.perform: 자바 스크립트 코드 실행 명령어

console.log: 화면에 로그 출력

Java.use: 자바 클래스 지정 시 사용

 

Verify버튼을 클릭하여 사용자의 입력값을 처리하는 루틴이 무엇인지 파악하자.

 

# jd-gui

verify function
arrayOfByte는 우리가 찾고있는 비밀번호

arrayOfByte = a.a.(b"....),arrayOfByte);

a.a가 뭐지? 소스코드를 보면 import sg.vantagepoint.a.a를 확인할 수 있다.

우리는 ?

sg.vantagepoint.a.a class의 a메서드를 후킹해서 화면에 비밀번호를 출력하도록 하자.

<정리>

해당 메서드의 인자는 두 개가 들어가고 리턴 값으로 올바른 비밀번호값이 반환된다.

verify버튼 클릭 - verify 함수 실행 - 입력값과 저장된 비밀번호를 비교한다.

저장된 비밀번호는 코드내에서 하드코딩되어 사용하는 문자열을 사용해 생성한다.