Mobile

[FridaLab]5. Always send "frida" to chall05()

Frida
FridaLab
Author
gleaming
Date
2023-03-20 14:14
Views
193

Ch5. chall05 메서드에 항상 'frida' 문자열을 전달하기

1) chall05() 메서드 확인

CiEIgiAIgiAIgiAIgiAIgiAIgiAIzQj8P+7uD3EcpcwfAAAAAElFTkSuQmCC

chall05()는 check 버튼을 누를 때마다 실행되는 메서드이다.

즉 check 버튼을 누를 때마다 "frida"를 전달해야 하지만, 기존 함수 동작을 그대로 실행해야 한다.

+) 지난번에 onResume()를 처음 이해했을 때, 기존 함수의 동작을 하도록 this를 사용했었다!!

z9ebip05wblFAAAAABJRU5ErkJggg==


2) 스크립트 작성

메서드가 실행된 적이 있으니, use를 이용한다.

이번엔 overload도 써보고싶어서, 함수가 여러개인 경우는 아니지만 사용해보기!

// ch05.js

setImmediate(function() {

  Java.perform(function() {

    var ch_05 = Java.use("uk.rossmarks.fridalab.MainActivity");

    ch_05.chall05.overload("java.lang.String").implementation = function(arg) {

      this.chall05("frida");

      console.log("Solved Challenge 05!");

    }

  })

})


3) 실행 결과

AXlNf3UI82jPAAAAAElFTkSuQmCC



overload에 "java.lang.String"을 사용했던 이유

"자바 오버로딩"이란 클래스 내에 같은 이름을 가진 메서드가 여러 개 존재하고, 각 메서드마다 서로 다른 매개변수를 가지고 있는 메서드를 정의하는 것

D3jD0bJE2r3LAAAAAElFTkSuQmCC

해당 문제에서는, chall05가 string 파라미터를 가지고 있었기 때문에 "java.lang.String"처럼 형식 지정을 해준 것!

하지만 MainActivity 클래스 내에 chall05 메서드는 한 개만 존재하므로,

ch_05.chall05().implementation = function(arg) {~~}

로 작성해도 상관없다.