Android App Hooking with FRIDA
본 글에서는 앞서 설치한 FRIDA를 사용하여 App Hooking
예제를 풀며 공부한 내용을 작성한다.
문제 파일은 아래 링크에서 다운로드 받을 수 있다.
###[분석 환경]
OS : macOS Mojave
Tools : Frida, adb, Python 3.7.4, Genymotion
###[문제 풀이]
adb install
명령어를 통해 다운로드 받은 .apk파일을 설치한다.그 이후, AVD에서 해당 앱을 실행시켜본다.
프로그램을 실행시키면 루팅 탐지가 동작되어
OK
버튼 클릭시 앱이 죽는다.루팅 탐지 루틴와 관련된 문제임이 느껴진다.
일단
jadx
를 이용해apk
코드를 분석해보도록 한다.안드로이드 앱이 실행되면 가장 우선적으로 실행되는
onCreate()
부터 살펴보자.
MainActivity
의onCreate()
부분이다.
onCreate
인자로 전달받는bundle
객체에 대하여 잠깐 짚고가자! 이건 안드로이드 개발에서도 매우 중요![Bundle]
최근 안드로이드 개발시
Activity
에서Fragment
를 많이 사용하는 추세로 넘어왔다.Fragment
를 사용하다 보면Bundle
을 통해서 데이터를 전달하는 방식을 사용하게 된다.이
Bundle
을 활용하여String
,int
등 기본Type
은 보다 쉽게 전달할 수 있다.즉,
Bundle
은 클래스로 여러가지의 타입의 값을 저장하는 Map 클래스이다.
자바 내에는 구조체가 없기에 클래스를 이용하므로, C언어 에서의 구조체라고 생각하면 이해가 쉽다.예를들면
string
값을Bundle
클래스에 Mapping(대응, 변환) 하는 것이다.
onCreate()
부분을 다시 살펴보면 , 분기함에 따라a()
함수의 인자를 다르게 전달하고 있다.첫번째 분기문에서
if (c.a() || c.b() || c.c())
를 통하여Rooting Detection
을 진행하고 있으며마찬가지로
if (b.a(getApplicationConetext()))
를 통하여Debugging Detection
을 수행하고 있다.그렇다면, 해당 조건문들이 참이되어 실행되는
a()
함수에 대해 살펴보자.
onClick
핸들링을 통해 버튼 클릭시System.exit(0)
함수가 호출되어 앱이 죽도록 코드가 작성되어있다.그렇다면, 해당 함수를 후킹하여 버튼을 클릭하여도 앱이 죽지 않도록 하자.
import sys import frida def on_message(message,data): print "[%s] -> %s" % (message, data) PACKAGE_NAME = "owasp.mstg.uncrackable1" jscode = """ Java.perform(function() { console.log("[*] Hooking calls to System.exit"); exitClass = Java.use("java.lang.System"); exitClass.exit.implementation = function() { console.log("[*] System.exit called"); } }); """ try: device = frida.get_usb_device(timeout=15) pid = device.spawn([PACKAGE_NAME]) print("App is starting ... pid : {}".format(pid)) process = device.attach(pid) device.resume(pid) script = process.create_script(jscode) script.on('message',on_message) print('[*] Running Frida') script.load() sys.stdin.read() except Exception as e: print(e)
'Hacking & Security > Android' 카테고리의 다른 글
Android Structure (0) | 2019.11.21 |
---|---|
Android Introduction (0) | 2019.11.21 |
FRIDA_Install (0) | 2019.10.17 |
Android APK Vuln analysis methodology (0) | 2019.10.14 |
ARM Assembly (1) | 2019.10.14 |