관리 메뉴

Information Security

UnCrackable - Level1 본문

모바일/Frida

UnCrackable - Level1

HackingPractice 2020. 12. 17. 19:04

그림 1-1 Uncrackable1

해당 apk파일을 jadx로 불러와서 디컴파일된 코드를 확인할 수 있다.

그림 1-2 소스코드

Text Search 기능을 통해 root detected 메시지를 찾았다.

그림 1-3 Text Search

MainActivity 부분에서 a메서드를 호출하면서 루팅 탐지 메시지를 전달해주고 있다. [Ctrl]을 누른 상태에서 a를 클릭하여 어떤 메서드인지 찾아보았다.

그림 1-4 Root 메시지

Main Activity 코드내에 a라는 메서드가 존재하며 인자 값으로 string을 받고 있다. 이 메서드는 alert dialog라고 해서 dialog창을 만들면서 메시지를 만들고 있다. 이 메시지는 해당 앱에서 보여주는 것과 같다.

system.exit(0) 코드는 앱을 종료

create.setButton으로 [OK]버튼 하나 만든다. 이 버튼이 OnClickListener()를 받고 있다.

클릭할 때 앱이 종료되지 않도록(system.exit()이 동작하지 않도록) onClick 메서드를 재작성을 해야 될 것 같다.

그림 1-5 MainActivity

OnClickListener가 어떻게 불러오고 생성하는 지 보기 위해 import의 DialogInterface를 확인했다.

그림 1-6 DialogInterface

​frida-ps -Ua 명령어를 통해 해당 앱의 실행 이름을 알 수 있다.

그림 1-7 프로세스

타임아웃을 방지하기 위한 setImmediate 사용하고 클래스에 대한 객체 받아오기 위해 java.use를 사용한다.

그림 1-8 자바스크립트

독립된 환경으로 불러올 때는 삽입될 수 있도록 --no-pause 옵션을 사용하고 해당 프로세스가 스폰될 수 있도록 f옵션을 사용한다.

OnClickListener는 클래스가 아닌 인터페이스이다. 프리다 공식 api에서 이 인터페이스를 받아와서 사용하기 위한 api가 존재하지 않기 때문에 에러가 날 수 있다. 

그림 1-9 오류 메시지

해당 내부에 있는 system.exit를 무력화시키기 힘들기 때문에 다른 한 가지 방법으로 java.lang.System에서 가져오는 메서드가 exit인데 이 메서드를 후킹 한 후 재작성해서 동작하지 않도록 한다. 이렇게 되면 [OK] 버튼을 누르고도 앱이 종료되지 않고 사용할 수 있는 것을 볼 수 있다.

그림 1-10 System
그림 1-11 exit
그림 1-12 스크립트

해당 스크립트를 실행시키면 Exit Bypass 메시지를 확인할 수 있다.

그림 1-13 프리다

[OK] 버튼을 클릭해도 앱이 종료되지 않는다.

그림 1-14 Uncrackable1