FridaLab 문제 풀이 #1

wisdom·2024년 12월 27일
0

준비

  1. Android Studio + AVD (Pixel 5, API 31, x86_64)
    1. Download Android Studio
  2. frida, frida-server (16.2.1)
    1. https://github.com/frida/frida
  3. Jadx-gui
    1. https://github.com/skylot/jadx
  4. adb
    1. https://developer.android.com/tools/releases/platform-tools?hl=ko
  5. Fridalab.apk
    1. https://rossmarks.uk/blog/fridalab/

문제

❓ Change class challenge_01’s variable ‘chall01’ to : 1

분석

challenge_01 클래스를 보니 아래와 같이 getter 함수 하나가 존재하고 있었음

해당 클래스는 MainActivity의 onClick 함수에서만 사용하며, 아래와 같이 getChall01Int 함수를 통해 값을 불러온 뒤, 1인지 비교하여 1인 경우에만 flag 값을 세팅함

별도 setter 함수가 없어 기본 값으로 세팅되는 것 같고, 아마 0이지 않을까 싶음

해당 클래스의 getChall01Int() 함수를 후킹해서 return 1로 치환해버리면 될 듯

후킹 코드

상위 페이지의 베이스 코드 구조를 기반으로 아래와 같이 후킹 코드를 작성함

import frida, sys

def on_message(message, data):
    if message["type"] == "send":
        print(f"[+] {message['payload']}")
    else:
        print(message)

def hook():
    jscode = """
    Java.perform(function() {
    var MyClass = Java.use("uk.rossmarks.fridalab.challenge_01");

    MyClass.getChall01Int.implementation = function() {
        send("getChall01Int called");
        var result = this.getChall01Int();
        send("myMethod returned: " + result);
        send("modified result: 1");
        return 1;
        };
    });
    """

    process = frida.get_usb_device().attach("FridaLab")
    script = process.create_script(jscode)
    script.on("message", on_message)
    script.load()
    sys.stdin.read()

if __name__ == "__main__":
    hook()

실행 결과

profile
보안, 개발, 일상을 기록합니다

0개의 댓글