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()