코드 분석

MainActivity
challenge_06

MainActivity에서 Challenge_06 클래스의 메소드들을 사용되는 것을 확인할 수 있다.

최종적으로 challenge_06 클래스의 confirmChall06 메소드를 사용하여 True를 반환 받는 것이 목표이다.

 

challenge_06.confirmChall06()

일단 confirmChall06 메소드에서 True를 받기 위해서 사진과 같은 조건을 만족해야한다.

 

두 번째 조건인 현재 시간이 challenge_06.startTime()이 호출된 시간보다 10초 더 크면 되는 것이니, challenge_06.startTime() 호출 후 10초 뒤에 challenge_06.confirmChall06()을 호출하면 해결된다.

 

challenge_06.addChall06()

첫 번째 조건은 challenge_06.addChall06()의 chall06 변수에 삽입된 값을 그대로 challenge_06.confirmChall06()의 파라미터 i에 전달하면 될 것으로 판단된다.

 

Write Up

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

   var challenge06 = () => {
      Java.choose("uk.rossmarks.fridalab.challenge_06", {
          "onMatch": (instense) => instense.startTime(),
          "onComplete": () => { }
      })

      setTimeout(() => {
          var challenge_06 = Java.use("uk.rossmarks.fridalab.challenge_06")

          Java.choose("uk.rossmarks.fridalab.MainActivity", {
              "onMatch": (instense) => instense.chall06(challenge_06.chall06.value),
              "onComplete": () => console.log("challenge_06 solved!")
          })
      }, 1000)
  }

  // Hooking Function Call
  challenge06()
})
 

먼저 Java.use()를 이용하여 challenge_06.startTime()을 호출하였고, setTimeout()을 이용하여 10초 후 MainActivity.chall06()에 challenge_06.chall06 변수를 파라미터로 넣어서 호출해 문제 풀이를 하였습니다.

 

복사했습니다!