2026. 2. 17. 17:48ㆍWriteUp & Reference - Wargames, CTFs/Mobile
https://github.com/DERE-ad2001/Frida-Labs/tree/main/Frida%200x3
Frida-Labs/Frida 0x3 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
돌아온 프리다 3탄
jadx로 해당 .apk를 까주면 다음과 같은 코드가 어셈블리 된다.
(정석적으로 MainActivity부터 들어가준다)

checker 클래스에서 받은 code의 값이 512와 같으면 You Won!!을 출력하는 분기문을 타게 된다.

checker 내부를 보면 increase()안에서 code의 연산이 2씩 더해지면서 이루어지고 있다. 그러나 이 increase()는 어디서도 호출되지 않는다.
다시 MainActivity로 돌아간다.
btn.setOnClickListener(new View.OnClickListener() { // from class: com.ad2001.frida0x3.MainActivity.1
@Override // android.view.View.OnClickListener
public void onClick(View v) {
if (Checker.code == 512) {
...
...
...
}
...
}
});아까 함수 형태가 이랬다. 주어진 모바일 앱의 버튼을 클릭하면 code 변수의 값이 512인지 검사한다.
만약 이 조건이 참이라면 "You Won!!"이란 메시지의 Toast를 표시하고 플래그를 복호화한다. 그리고 그 결과를 TextView에 설정한다.
거짓이면 "Try Again"을 가진 Toast만 표시된다.
이 문제를 해결하기 위해선 Frida로 code 변수를 512로 변경하거나, increase() 메서드를 Frida로 256번 호출하는 방법이 있겠다. (2*256 = 512임을 기억한다.)
Code 변수의 값 변경하기
플래그를 얻기 위해 code 변수를 512로 변경한다.
public class Checker {
static int code = 0;
public static void increase() {
code += 2;
}
}
그리고 앞서 소개했던 Frida 스크립트 템플릿을 가져와본다.
Java.perform(function (){
var <class_reference> = Java.use("<package_name>.<class>");
<class_reference>.<variable>.value = <value>;
})이제 code 변수의 값을 변경해본다.
- 패키지 이름: com.ad2001.frida0x3
- 클래스 이름: Checker
Frida를 사용해 이 클래스의 변수 code 값을 직접 512로 바꾸면 된다.
Java.perform(function (){
var a= Java.use("com.ad2001.frida0x3.Checker");
a.code.value = 512;
})
PS C:\Users\after\Downloads> adb install Challenge_0x3.apk
Performing Streamed Install
Success우선 adb에 해당 앱을 깔아준다.
PS C:\Users\after\Downloads> frida -U -f com.ad2001.frida0x3
____
/ _ | Frida 17.5.1 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
. . . .
. . . . More info at https://frida.re/docs/home/
. . . .
. . . . Connected to Android Emulator 5554 (id=emulator-5554)
Spawned `com.ad2001.frida0x3`. Resuming main thread!
[Android Emulator 5554::com.ad2001.frida0x3 ]-> Java.perform(function() { var a=Java.use("com.ad2001.frida0x3.Checker")
; a.code.value=512; })
후킹이 된 것을 확인할 수 있다.
increase() 메서드를 반복 호출하는 법
increase() 메서드는 호출될 때마다 code에 2씩 더해준다. 반복문을 사용해 256번 호출해준다.
Java.perform(function(){
var a=Java.use("com.ad2001.frida0x3.Checker");
for(var i=0;i<=256,i++){
console.log("Calling increase Method" + i + " times");
a.increase();
}
});
위와 같이 로그가 찍히는 것을 볼 수 있고,

플래그가 출력된다!
'WriteUp & Reference - Wargames, CTFs > Mobile' 카테고리의 다른 글
| [모바일 보안] Frida-Labs 0x5 (0) | 2026.02.17 |
|---|---|
| [모바일 보안] Frida-Labs 0x4 (0) | 2026.02.17 |
| [모바일 보안] Frida-Labs 0x2 (0) | 2026.02.16 |
| [모바일 보안] Frida-Labs 0x1 (0) | 2026.02.16 |
| [Android MobileHacking] Android UnCrackable Level3 Write-up (0) | 2025.11.17 |