Frida 스크립트 작성 기초(안드로이드 예제)
작성자 - 보안왕 김보안최근에 모바일 취약점 진단 환경을 꾸미면서 Frida를 본격적으로 만지고 있다.
그동안은 남이 짜놓은 코드만 가져다 붙여봤는데, 이제는 직접 이해하고 써야겠다 싶어서 정리한 내용.
1. Frida?

Frida는 런타임 계측도구다.
쉽게 말해서 앱이 실행되는 도중에 특정 함수 호출을 가로채서 인자나 리턴값을 보고, 수정까지 할 수 있는 툴이다.
안드로이드/ iOS 둘 다 쓸 수 있고, 루팅 및 탈옥 탐지 우회, SSL Pinning 우회 같은 시나리오에 자주 등장한다.
2. 기본 뼈대
프리다 스크립트는 자바스크립트 문법을 쓴다. (파이썬이나, 타입스크립트도 가능하다는데 사례는 본 적이 없다.)
안드로이드에서는 항상 Java.perform() 안에서 후킹을 해야 안정적으로 동작한다.
'use strict';
setImmediate(function () {
Java.perform(function () {
console.log("[*] Hook start");
// 여기서부터 원하는 함수 후킹 코드 작성
});
});
여기까지가 거의 “템플릿”이라고 보면 된다.
이걸 복붙해놓고 안에만 채워넣는 식.
3. 후킹 예제
예를 들어 com.example.Calculator 클래스 안에
int add(int a, int b) 메서드가 있다고 치자.
Java.perform(function () {
var Calc = Java.use("com.example.Calculator");
// add(int, int) 메서드만 집어오기
var addInt = Calc.add.overload('int', 'int');
addInt.implementation = function (a, b) {
console.log(`add(${a}, ${b}) called`);
// 원래 함수 호출
var ret = addInt.call(this, a, b);
console.log("original ret =", ret);
// 리턴값 조작 (항상 999 리턴)
var newRet = 999;
console.log("modified ret =", newRet);
return newRet;
};
});
결과적으로 앱에서 Calculator.add(2,3)을 호출해도, 원래라면 5가 나와야하는데 999가 튀어나온다.
4. overload?
이 부분에서 좀 헤맸다.
처음에 Calc.add만 쓰고 .implementation 붙였더니 로그가 안찍히는 거다.
알고보니 자바에는 메서드 오버로딩이 있어서 같은 이름의 메서드가 여러개일 수 있다.
예:
- add(int, int)
- add(double, double)
- add(String, String)
그래서 Calc.add.overload('int','int') 처럼
인자 타입을 명확히 지정해야 원하는 메서드를 딱 집을 수 있다.
5. 함수 이름을 모른다면?
만약 함수 이름이 뭔지 모른다? 그럼 탐색부터 해야함.
(1) 클래스 이름은 아는 경우
Java.perform(function () {
var Cls = Java.use("com.example.SecurityChecker");
var methods = Cls.class.getDeclaredMethods();
methods.forEach(function (m) {
console.log(m.toString());
});
});
이렇게 하면 해당 클래스 안의 모든 메서드 목록이 콘솔에 뜬다.
그중 detectRooting() 같은 걸 찾아서 후킹.
(2) 클래스 이름도 모를 경우
Java.perform(function () {
Java.enumerateLoadedClasses({
onMatch: function (name) {
if (name.indexOf("Security") !== -1) {
console.log(name);
}
},
onComplete: function () {
console.log("Done");
}
});
});
앱에 로드된 모든 클래스 중 "Security"라는 단어가 들어간 것만 출력.
거기서 후보를 좁혀가는 식으로 진행
6. detectRooting 예제
보통 보안테스트할 때 루팅탐지 우회를 많이 하는데, 함수 이름이 detectRooting()이라면 이렇게 쓸 수 있다.
Java.perform(function () {
var Sec = Java.use("com.example.SecurityChecker");
var detectRooting = Sec.detectRooting.overload(); // 파라미터 없음
detectRooting.implementation = function () {
console.log("detectRooting() called");
return false; // 항상 루팅 아님으로
};
});
이렇게 해놓으면 앱이 루팅 여부를 체크해도 무조건 false를 반환.
7. 마무리
오늘 정리한 포인트:
- Frida 스크립트는 기본 뼈대(Java.perform) + 후킹할 함수 지정
- 함수 이름/시그니처를 알고 있다면 바로 overload
- 모르면 → 클래스 메서드 덤프 or 전체 클래스 탐색
아직도 Frida의 Interceptor, NativeFunction 같은건 잘 모르겠다.
일단은 자바 레벨 후킹에 익숙해지는 게 1순위일듯.
'Security Tech' 카테고리의 다른 글
| 차량 사이버 보안 - 진단 프로토콜 및 보안 기능 (0) | 2025.08.31 |
|---|---|
| 웹 LLM 공격 (1) | 2025.06.30 |
| MITM RELAY 를 활용한 TCP 패킷 변조 (0) | 2025.06.30 |
| OWASP - MASTG UnCrackable-LEVEL 3 (2) (0) | 2025.05.31 |
| [Mobile] QuarkEngine 툴 소개 및 사용법 (0) | 2025.05.31 |