[Frida] How to use Frida

유서정·2024년 3월 26일

Android Hooking

Hooking? 애플리케이션의 메소드 호출을 가로채어 이를 수정하거나 추가적인 로직을 삽입

세팅

에뮬레이터에 Frida 설치 및 실행

Jadx 실행 -> stllab.apk (apk파일) 붙여넣기

MainActivity class == 어플리케이션의 시작점

# test1

test1.js

Java.perform(function() {
	console.log(1234)
})

Java.perform(function(){ })

• Java 가상 머신내에서, 입력한 스크립트 코드를 실행하는 함수
• Java Class, Method에 접근가능한 상태에서 실행


# lab_01

lab_01.js

Java.perform(function() {
	console.log("[*] Testing")
	let lab_1 = Java.use("com.stl.stllab.lab_1")
	lab_1.lab_test_01.value = 3872;
	}
)

Java.use(class)

• 안드로이드 앱에서, 특정 Java 클래스를 후킹하고, 해당클래스의 메서드 수정에 사용되는 함수
• 자바클래스를 동적로드 및 메서드 수정, 호출을 가로챌수 있음
implementation() 함수를 이용해 기존 메서드를 덮어씌워, 새로운 내용으로 재작성 할 수 있음


# lab_02

lab_02.js

Java.perform(function() {
 Java.choose("com.stl.stllab.MainActivity", {
 	"onMatch" : function(a) {
 		a.stl_test_level_02()
   		console.log("[*] STL Test level 02 Hooking...")
 	},
 	"onComplete" : function() {
   		console.log("[#] level_02_hooking >>> Success\n")
 	}
 });
})

Java.choose(classname, callback)

• 생성된 Class의 Instance를 탐색하는데 사용되는 함수
• 특정 Class를 대상으로 원하는 작업 수행


# lab_03

lab_03.js

Java.perform(function() {
	var lab_03 = Java.use("com.stl.stllab.MainActivity")
	lab_03.stl_test_level_03.overload("java.lang.String").implementation = function() {
		console.log("level 03, overload test")
		this.stl_test_level_03("test")
		console.log("[*] Challenge Level 05 Hooking success")
	}
})

overload("")

• Java API 메서드로, Java 클래스에서 Overload 메서드 중 원하는 메서드를 선택하는데 사용
implementation() 함수를 이용해 특정 메서드만 선택해, 해당 메서드 후킹 및 재정의에 유용

Overload 메서드 : Java 클래스에서 동일 이름의 메서드가 존재하는 경우

+) setImmediate(function({ }))
• 프로세스종료시, 백그라운드에서자동으로스크립트를재실행

profile
information security

0개의 댓글