본문 바로가기

모바일 앱 해킹

Frida 기본 정리 | Frida란?, 기본 문법, CLI 활용

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