티스토리 뷰

반응형

Frida는 Android 이외에도 IOS, Windows 등등을 Hooking할 수 있는 강력한 툴이다.

그러나 해당 포스팅에서는 Android에 한해서 Hooking하는 방법에 대해서 다루겠다.

        ( 물론 아주 기초적인 내용이며 이를 응용하는건 본인의 몫... )

 

우선 들어가기 앞서 다양한 frida 코드들이 공유되는 사이트를 소개한다.

https://codeshare.frida.re/browse

 

Frida CodeShare

19 | 39K Android SSL Re-Pinning, more information can be found here https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/ 7 | 3K List iOS file data protection classes (NSFileProtectionKey) of an app 6 | 3K Show useful i

codeshare.frida.re

frida 코드들에 대한 감을 익히는데 있어서도 매우 유용할 뿐만아니라,

이미 작성되어있는 코드들을 그대로 사용할 수 있다. 예를들면 아래와 같이 사용이 가능하다.

#> frida -U --codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida

 


그럼 이제부터 내가 나름대로 느끼고 깨달은 사용법들을 최대한 간단하게 적어본다.

 

Frida를 이용해 Android Hooking을 진행하는 방법에는 크게 두가지 방법이 있다.

 

첫 번째로는 python 코드를 작성하는 방법이 있다. 첫 번째 방법으로 진행을 하게되면 Application을 실행한 후 파이썬 코드를 실행하는 순서로 진행되기 때문에 Application이 실행된 이후에 Hooking이 되는 것이다.

 

두 번째로는 js 스크립트를 작성해 "frida -U -l [ js스크립트 ] -f [ Android 내의 패키지명 ]" 와 같이 입력하는 방법이 있다. 두 번째 방법으로 진행할 경우 Application을 실행하기 전에 Hooking이 되는 것이다.

 

 

 


1. Python 코드를 작성해 Hooking 하는 방법.

 1) 우선 내가 Hooking 하고자하는 함수를 찾아야한다.

    보통은 jadx-gui를 통해 찾거나, 필요에 따라 IDA를 이용하거나 리버싱을 통해 찾아야 할수도있다.

 

 2) Hooking을 진행할 Application이 안드로이드내에서 설치된 패키지명을 찾는다.

    이건 매우 간단하다. 그냥 설치경로에 찾아가봐도되고 실행한 후에 frida-ps 를 통해서 확인할 수 있다.

 

 3) 코드를 작성하고 Hooking을 진행하면된다. 아래 간단한 예시코드를 참고하자.

     ( 다음 포스팅에서는 여러가지 형태의 코드를 CheatSheet 형태로 작성할 예정이으므로 좀 더 자세한 내용은 거기서 설명한다. )

 

import frida, sys

def on_message(message, data):   # jscode에서 send했을 경우 이 함수가 호출된다.

if message['type'] == 'send':
	print("[*] {0}".format(message['payload'])    # payload에 send로 넘겨준 데이터가 json형태로 저장되어있다.
else              # 추가로 다시 jscode쪽으로 데이터를 넘겨주는 방법도 있는데,
	print(message)    # 이건 다음 포스팅에서 구체적으로 설명한다.

PACKAGE_NAME = "owasp.mstg.uncrackable1"
jscode = """    # 여기서부터는 JavaScript 코드이며, 궁극적으로 Hooking을 진행하는 코드부이다.
console.log("[*] Starting script");
Java.perform(function() {
	var System = Java.use("java.lang.System");   
    # JS코드에서는 String도 java.lang.String으로 다 처리해줘야한다.
    
    console.log("[*] System.exit Hooking Success");
    System.exit.implementation = function() {     # 여기서 exit함수를 아래 내가 정의한 함수로 덮어씌운다.
    	console.log("[*] System.exit called");
	}
});
console.log("[*] Script finish");
"""

process = frida.get_usb_device().attach(PACKAGE_NAME)
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()    # Hooking을 진행하고 종료되지 않도록하는 역할인 것 같다.
# 이 코드를 없애고 무한루프로 대체하는 코드도 다음 포스팅에서 확인할 수 있다.

 4) 해당 패키지의 Application을 Android상에서 동작시킨 뒤 파이썬 코드를 실행하면 Hooking이 진행되며 이후에 호출하는 함수들은 Hooking의 영향을 받는다.

 

 

 


2. JavaScript 코드를 작성해 Hooking하는 방법.

 1) Python 코드에서 jscode를 그대로 사용하면된다. 사실은 반대지만 뭐 ...

 2) .js 파일에 아래와 같이 작성한다.

function Hook() {
	// 여기에 jscode를 그대로 긁어온다.
}
setImmediate(function() {
	Hook();
});

 

 3) frida -l [ .js파일 경로 ] -U -f [ Application 패키지명 ] 

    위와같이 실행하면 후킹이 진행되고, %resume 명령어를 입력할 시 기기에 Application이 실행된다.

    이 때 당연히 Hooking된 상태이다. 이렇게 하면 Application 실행 전에 후킹이 가능하다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함