UnCrackable - Level1
해당 apk파일을 jadx로 불러와서 디컴파일된 코드를 확인할 수 있다.
Text Search 기능을 통해 root detected 메시지를 찾았다.
MainActivity 부분에서 a메서드를 호출하면서 루팅 탐지 메시지를 전달해주고 있다. [Ctrl]을 누른 상태에서 a를 클릭하여 어떤 메서드인지 찾아보았다.
Main Activity 코드내에 a라는 메서드가 존재하며 인자 값으로 string을 받고 있다. 이 메서드는 alert dialog라고 해서 dialog창을 만들면서 메시지를 만들고 있다. 이 메시지는 해당 앱에서 보여주는 것과 같다.
system.exit(0) 코드는 앱을 종료
create.setButton으로 [OK]버튼 하나 만든다. 이 버튼이 OnClickListener()를 받고 있다.
클릭할 때 앱이 종료되지 않도록(system.exit()이 동작하지 않도록) onClick 메서드를 재작성을 해야 될 것 같다.
OnClickListener가 어떻게 불러오고 생성하는 지 보기 위해 import의 DialogInterface를 확인했다.
frida-ps -Ua 명령어를 통해 해당 앱의 실행 이름을 알 수 있다.
타임아웃을 방지하기 위한 setImmediate 사용하고 클래스에 대한 객체 받아오기 위해 java.use를 사용한다.
독립된 환경으로 불러올 때는 삽입될 수 있도록 --no-pause 옵션을 사용하고 해당 프로세스가 스폰될 수 있도록 f옵션을 사용한다.
OnClickListener는 클래스가 아닌 인터페이스이다. 프리다 공식 api에서 이 인터페이스를 받아와서 사용하기 위한 api가 존재하지 않기 때문에 에러가 날 수 있다.
해당 내부에 있는 system.exit를 무력화시키기 힘들기 때문에 다른 한 가지 방법으로 java.lang.System에서 가져오는 메서드가 exit인데 이 메서드를 후킹 한 후 재작성해서 동작하지 않도록 한다. 이렇게 되면 [OK] 버튼을 누르고도 앱이 종료되지 않고 사용할 수 있는 것을 볼 수 있다.
해당 스크립트를 실행시키면 Exit Bypass 메시지를 확인할 수 있다.
[OK] 버튼을 클릭해도 앱이 종료되지 않는다.