[목차]1. 환경구성2. 라우팅 탐지 우회 실습3. 정리 및 팁
1. 환경 구성 실습에 사용하는 앱이 OWASP에서 배포한 UnCrackable라는 앱에서 앱의 보안 진단 입문용으로 매우 유효하게 사용할 수 있는 앱!(1)apk파일 다운로드 https://github.com/OWASP/owasp-mastg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk
Viewraw 또는 Download 를 클릭하여 apk파일 다운로드 (2) 앱 설치
C:> adb 인스톨 파일. 앱크
C:> adb 인스톨 파일. 앱크(3) 정상적인 설치를 확인합니다실행시켜 보면라우팅 탐지에 걸려!2. 라우팅 감지 우회 실습 (1) 라우팅 로직 확인 jadx에서 파일을 불러온 후힌트가 된 문구를 찾아보면Main Activity 클래스 내부 on Create 메서드 내부에서 a라는 메서드를 호출하면서 인자값으로 라우팅 탐지 문자열을 전달하고 있다.(2) a메소드 확인같은 Main Activity클래스 내부에 a이라는 메소드가 존재하고 a메소드 인자 값으로 String str을 받고 있다.str에 탐지 시 표시되는 문구를 볼 수 있으며 앱 종료 시까지 작동 방식의 확인이 가능하다.(3)아이디어 1시스템 종료 함수 onClick메서드를 훗킨구, OK버튼을 눌러도 앱이 종료하지 않도록 한다.a. 기본 프레임setImmediate(function(){ava.perform(function(){var exit_bypass=Java.use(“”);//클래스에대한 객체를받아오기 위해 Java.usexit_bypass.onClick.implementation=function(arg, arg2){//onsole.log(“[+]방지 성공!”;}를 클릭)b)코드 확장 onClick을 재 작성할 필요가 있지만, 현재 onClick은 OnClickListetner()을 통해서 내부에서 만들어지고 OnClickListener는 android.content.DialogInterface.OnClickListener클래스에 호출됩니다.android.content.Dialog Interface OnClick Listener 클래스가 무엇인지 검색해 보면public 메소드로서 기본적으로 제공되며 동일한 폼으로 작성되어 있지만특이한 점은 해당 클래스는 클래스가 아닌 ‘인터페이스’라는 점!따라서 클래스 오브젝트를 반환하기 위해 해당 클래스를 사용하는 경우setImmediate(function(){ava.perform(function(){varexit_bypass=Java.use(“android.content”). 대화 인터페이스.OnClickListener”);xit_bypass.onClick.implementation=function(arg, arg2){onsole.log(“[+]방지 성공!”;})})패키지명 확인 후돌리는 데 spawn 할 수 있게 -f프리다 공식 API에서 해당 인터페이스를 다루는 기능이 없는 것으로 보여 오류 발생! 따라서 그 방법은 실패! (3-1) 아이디어 2onClick 실행 시 System.exit이 실행되지 않도록 한다.System 메서드는 java.lang.System에서 가져오는 메서드입니다.코드작성후setImmediate(function(){ava.perform(function(){var exitBypass=Java.use(“java.lang”). System”;xitBypass.exit.implementation=function(){//함수(arg)받아도 상관없음 onsole.log(“[*]루팅 탐지후킹 성공!”;})})돌려보면오류 없이 잘 돌면서 앱이 실행되고exit를 호출한 OK를 누르면탐지 우회에 성공하여 정상적으로 연결!해결 완료!3. 정리 및 팁, 컴파일러 jadx툴에서 해당 문제의 코드를 확인한 결과 UnCrackable-Level1라우팅 탐지의 경우 OK버튼을 클릭하면 System.exit(0)을 통해서 앱이 종료하는 것을 확인하고 이를 통해서 java.lang.System의 exit메서드를 재작성(implementation) 하면 문제가 해결되는 것으로 나타났지만, 앱이 끝나는 부분만에서도 다양한 방법이 존재하는 라우팅 탐지하는 앱마다 보이는 행위는 제각각이어서 그 핵심 행위에 근거하여 판단을 우회하는 것이 중요하다.처음 확인한 Main Activity의 a메서드 자체를 implementation할 경우 라우팅 탐지 우회와 관계 없는 이미 구현된 코드가 정확히 작동하도록 코드로 표현해야 하기 때문에 상당히 복잡하게 되지만 이렇게 앱마다 우회하고 싶은 부분의 핵심을 파악하고 가장 간단한 방법으로 프리다 우회 코드를 작성한 것이 좋다.순수 개인 공부를 목적으로 실제 사용 앱을 진단하면서 우회 등 진단 연습을 할 경우 관련 내용은 절대 외부에 공개해서는 되지 않으므로 주의해야 한다!