코드 분석

MainActivity
challenge_07

MainActivity에서 challenge_07.setChall07()을 호출하여 chall07에 랜덤한 값을 삽입 후 challenge_07.check07Pin()에서 검증을 수행한다.

 

challenge_07.setChall07()

반복문을 돌리기 위해 chall07 변수에 삽입될 값의 범위를 한번 알아보겠다.

Math.random() * 9000이므로, 0 ~ 8999까지의 범위를 가진다. 하지만 뒤에 1000이 더해져서 최소 범위는 1000부터 시작이 된다. 즉, chall07의 값 범위는 1000 ~ 8999이다. 

 

문제의 목표는 무차별 대입 공격을 수행하여 검증을 통과하라고 하였으니, MainActivity.chall07()의 파라미터에 반복문을 이용하여 값을 넣어서 검증을 통과하면 될 것이다.

Write Up

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

  var challenge07 = () => {
      var challenge_07 = Java.use("uk.rossmarks.fridalab.challenge_07")

      Java.choose("uk.rossmarks.fridalab.MainActivity", {
          "onMatch": (instense) => {
              var pin = 1000
              while (true) {
                  if (String(pin) == challenge_07.chall07.value) {
                      instense.chall07(String(pin))
                      break
                  }

                  pin++
              }
          },
          "onComplete": () => console.log("challenge_07 solved!")
      })
  }

  // Hooking Function Call
  challenge07()
})
 

반복문으로 challenge_07.chall07의 값와 증가되는 값을 비교 후 맞다면, MainActivity.chall07()에 파라미터로 넘겨 검증을 통과하였다.

 

사실 challenge_07.chall07 값을 MainActivity.chall07()에 파라미터로 넘기면 바로 통과하겠지만, 그럼 Challenge 06과 같은 문제 풀이가 되어 이렇게 무차별 대입 공격을 시도하여 통과하라고 하는 것으로 보인다.

 

복사했습니다!