코드 설명

MainActivity
challenge_01

chall01이라는 이름의 클래스 변수가 int 타입으로 선언만 되어있다.

MainActivity에서 호출되는 getChall01Int 메소드에선 chall01 클래스 변수에 값을 지정하지 않았기 때문에 chall01 클래스 변수에 지정된 값은 0으로 지정되어 리턴하게 된다.

 

MainActivity에서 getChall01Int 메소드의 반환 값과 1을 비교하였는데, 이는 틀리기 때문에 동작하지 않는다.

Write Up

Java.perform(function () {
  console.log("\n* Hooking Start *")

  var challenge01 = () => {
      var chall_01 = Java.use("uk.rossmarks.fridalab.challenge_01")
      chall_01.chall01.value = 1

      console.log("\nchallenge_01 solved!")
  }

  challenge01()
})
 

Java.use 함수를 통해 후킹할 클래스를 지정한 후 chall01의 값을 1로 변경하였다.

후킹 스크립트를 Frida를 통해 FridaLab 앱의 프로세스에 삽입 후 CHECK 버튼 클릭 시 Challeng 01의 글자 색이 초록색으로 변하는 것을 확인 할 수 있다.

 

사용된 API

  1. Java.perform(Fn)
    Frida에 요청된 Hooking 대상이 onResume()이 호출된 후 Function이 실행되는 것이다.
    즉, Hooking 대상이 Dalvik VM에 실행되는지 확인 후 Function을 호출한다는 뜻이다.

    Frida에 요청된 Hooking 대상이 Dalvik VM에 실행되지 전에 Function을 호출하는 것은 Java.performNow(Fn)이다.

  2. Java.use(Class Name)
    변수와 메소드에 접근할 수 있는 클래스 객체를 반환하는 메소드이다.

 

 

복사했습니다!