2026. 2. 17. 18:35ㆍWriteUp & Reference - Wargames, CTFs/Mobile
https://github.com/DERE-ad2001/Frida-Labs/tree/main/Frida%200x5
Frida-Labs/Frida 0x5 at main · DERE-ad2001/Frida-Labs
The repo contains a series of challenges for learning Frida for Android Exploitation. - DERE-ad2001/Frida-Labs
github.com
PS C:\Users\after\Downloads> adb install Challenge_0x5.apk
Performing Streamed Install
Success여느때와 마찬가지로 설치하고 시작

MainActivity 안에는 flag라는 메서드가 있다. 이 메서드는 플래그를 복호화한 뒤 그 값을 TextView에 설정하고 있다. 또한 if 체크를 우회하려면 인자로 1337을 전달해야한다.
이 flag() 메서드는 다른 클래스에서 호출되지 않고 있다. 그렇다면 MainActivity의 새로운 인스턴스를 하나 생성해서 이 메서드를 직접 호출할 수 있겠다.
- 패키지 이름: com.ad2001.frida0x5
- 클래스 이름: MainActivity
- 함수 이름: flag
Java.perform(function() {
var <class_reference> = Java.use("<package_name>.<class>");
var <class_instance> = <class_reference>.$new(); // Class Object
<class_instance>.<method>(); // Calling the method
})Java.perform(function(){
var a=Java.use("com.ad2001.frida0x5.MainActivity");
var main_act=a.$new();
main_act.flag(1337);
})
위와 같이 에러가 터지는 것을 확인할 수 있는데, frida로 MainActivity에 인스턴스를 넣는게 상당히 까다로울 수 있다고 한다. 특정 상태에서만 이를 성공시킬 수 있다고 한다.
따라서 이미 MainActivity에 존재하는 인스턴스를 가져와서 작동시키는 것이 해결책이 될 수 있겠다.
기존 인스턴스에서 메서드 호출하기
이번에는 다른 Frida 템플릿을 사용해본다.
- Java.performNow : Java 런타임 컨텍스트 안에서 코드를 즉시 실행하기 위해 사용되는 함수
- Java.choose: 런타임 중에, 첫 번째 인자로 전달된 지정된 Java 클래스의 인스턴스들을 열거
Java.performNow(function() {
Java.choose('<Package>.<class_Name>', {
onMatch: function(instance) {
// TODO
},
onComplete: function() {}
});
});여기에는 두 가지 콜백 함수가 존재하는데,
onMatch
onMatch 콜백 함수는 Java.choose작업 중에 지정된 클래스의 각 인스턴스가 발견될 때마다 실행된다.
이 콜백 함수는 현재 매칭된 인스턴스를 매개변수로 전달받는다.
onMatch 내부에서는 각 인스턴스에 대해 수행하고 싶은 커스텀 동작을 자유롭게 정의할 수 있다.
function(instance) {}
여기서 instance 매개변수는 대상 클래스에서 매칭된 각 인스턴스를 의미하며, 이름은 원하는 다른 이름으로 바꿔도 상관없다.
onComplete
onComplete 콜백은 Java.choose 작업이 완전히 종료된 후 실행된다. 이 블록에서는 후처리 작업이나 정리 로직을 수행할 수 있다.
onComplete는 선택 사항이며, 검색이 끝난 뒤에 특별히 할 작업이 없다면 비워 두어도 문제없다.
- 패키지 이름: com.ad2001.frida0x5
- 클래스 이름: MainActivity
- 함수 이름: flag
Java.performNow(function(){
Java.Choose('com.ad2001.frida0x5.MainActivity', {
onMatch: function(instance){
console.log("Instance Found");
},
onComplete: function(){
});
});[Android Emulator 5554::com.ad2001.frida0x5 ]-> Java.performNow(functi
on() {
Java.choose('com.ad2001.frida0x5.MainActivity', {
onMatch: function(instance) {
console.log("Instance found");
},
onComplete: function() {}
});
});
Instance found
Instance found이렇게 하면 입력해준 자바스크립트 코드가 작동하기는 하는데.. 아직 flag()에 1337 값을 전달해주지 않아 후킹이 실행되진 않는다.
[Android Emulator 5554::com.ad2001.frida0x5 ]-> Java.performNow(functi
on() {
Java.choose('com.ad2001.frida0x5.MainActivity', {
onMatch: function(instance) { // "instance" is the instance for
the MainActivity
console.log("Instance found");
instance.flag(1337); // Calling the function
},
onComplete: function() {}
});
});
Instance found
Instance found
플래그가 뜬다!
+) 콜백 함수란?
다른 함수에 인자로 전달되어 나중에 호출하는 함수를 이른다. 비동기 처리나 함수의 동작 형태를 위임하고 싶을때 사용한다.
'WriteUp & Reference - Wargames, CTFs > Mobile' 카테고리의 다른 글
| [모바일 보안] Frida-Labs 0x7 (0) | 2026.02.17 |
|---|---|
| [모바일 보안] Frida-Labs 0x6 (0) | 2026.02.17 |
| [모바일 보안] Frida-Labs 0x4 (0) | 2026.02.17 |
| [모바일 보안] Frida-Labs 0x3 (0) | 2026.02.17 |
| [모바일 보안] Frida-Labs 0x2 (0) | 2026.02.16 |