Frida란?
안드로이드 앱을 비롯해 다양한 플랫폼에서 실행되는 애플리케이션의 동작을 조작하는데 사용되는 동적 코드 분석 툴
대표적으로 프로세스를 후킹하는 기능을 제공한다.
(후킹은 정보를 가로채고, 실행흐름을 변경하는 등 원래와 다른 기능을 제공하게 하는 기술이다.)
Frida 기본 문법
Java.use()
- 변수와 메소드에 액세스 할 수 있는 클래스 객체를 반환
- 클래스가 어떤 메소드와 변수를 가지고 있는지 등 클래스의 구조와 동작에 대한 정보와 조작 기능을 제공함
- static 변수 및 메소드는 프로그램 실행 시 메모리에 자동으로 올라오므로 인스턴스를 생성해서 호출할 필요가 없음. 이때 Java.use 를 사용해서 후킹함
예시
var Class = Java.use("uk.rossmarks.fridalab.challenge_01");
위 코드를 사용하면 Class 객체를 통해 uk.rossmarks.fridalab.challenge_01 클래스의 모든 변수 및 메소드에 접근할 수 있게된다.
Java.choose(className, callbacks)
- 실행 중인(인스턴스화 된) 객체를 찾아서 콜백에 넘김
- 클래스의 객체가 메모리에 어떻게 분포되어 있는지 등 객체의 상태와 위치 정보를 제공함
- static 변수가 아닐 때에는 인스턴스를 생성한 후에 호출해야한다. 이때는 Java.choose를 사용해서 후킹함.
- callbacks : onMatch, onComplete
- -onMatch : 일치하는 것을 찾으면 호출
-onComplete : 가능한 일치(Match)를 모두 마치면 사용됨
예시
Java.choose("uk.rossmarks.fridalab.MainActivity",{
onMatch : function(chall_02){
chall_02.chall02();
},
onComplete : function() {
console.log("\nSolved Challenge 02");
}
})
위 코드를 사용하면 uk.rossmarks.fridalab.MainActivity(클래스)의 모든 인스턴스를 찾아내고, 각 인스턴스를 처리하기 위한 콜백 함수를 제공하며, 이를 통해 인스턴스의 상태를 확인하거나 변경할 수 있음
.overload()
- 하나의 클래스에서 동일한 이름을 가진 메소드가 여러개 존재할 때 인자의 개수 및 타입에 따라 다르게 후킹할 때 사용
- 쉽게 설명하면 여러개의 같은 함수가 있을때 원하는 함수를 특정하는 것
.implementation
- 정의된 메소드의 구현 내용을 재작성
예시
var Class = Java.use("uk.rossmarks.fridalab.challenge_01");
Class.myMethod.implementation = function(arg1){
// 함수 재정의
}
혹은 같은 이름의 함수가 여러개 존재할 경우에는 아래와 같이 overload를 통해서 함수를 특정한 후 재작성한다.
var Class = Java.use("uk.rossmarks.fridalab.MainActivity");
Class.myMethod.overload('java.lang.String').implementation = function(arg1){
// 함수 재정의
}
Frida CLI 활용
프로세스에 스크립트를 인젝션하기 위한 사전 작업
1. 애플리케이션 프로세스 실행 후 자바스크립트 삽입
프리다가 스크립트를 인젝션하려면 우선 앱이 실행되어야 한다.
앱 실행 후 아래 명령어로 해당 프로세스에 접근한다.
frida -U FridaLab
2. 애플리케이션 프로스세스 실행 전 자바스크립트 삽입
또는 -f 옵션을 사용해서 프로세스를 Spawn(스폰)해야 한다.
아래의 명령어로 앱을 자동 실행하여 해당 프로세스에 접근한다.
frida -U -f FridaLab
참고
https://aboutsc.tistory.com/165
https://velog.io/@rjtjdrhk12/AOS-Frida-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9overload
https://velog.io/@resur/Java.use-Java.choose-%EC%B0%A8%EC%9D%B4
'모바일 앱 해킹' 카테고리의 다른 글
FridaLab 5 ~ 8 풀이 (0) | 2024.06.04 |
---|---|
FridaLab 1 ~ 4 풀이 (0) | 2024.06.03 |
[DIVA] Input Validation Issues - Part 1 (입력값 검증 부재) | 안드로이드 앱 취약점 실습 (0) | 2024.05.23 |
[DIVA] Insecure Data Storage - Part4 (안전하지 않은 데이터 저장) | 안드로이드 앱 취약점 실습 (0) | 2024.05.23 |
[DIVA] Insecure Data Storage - Part2 (안전하지 않은 데이터 저장) | 안드로이드 앱 취약점 실습 (0) | 2024.05.23 |