Android 모바일 해킹 - FridaLab(7)

Woongmur·2025년 1월 12일

7번째 도전과제

8개의 도전과제중 7번째 도전과제이다.

chall07Pin()메서드를 브루트포스 하여 chall07()메서드로 확인하라는 과제이다.
음... 무차별 대입을 이용하는 것이니 반복문을 사용해야 할것 같은데 일단 jadx로 가서 디컴파일된 코드를 보자.

MainActivity 클래스의 chall07메서드를 확인해보면 challenge_07 클래스의 check07Pin메서드의 문자열이 맞으면 참을 반환한다.
challenge_07 클래스를 클릭해서 코드를 보자

static으로된 chall07 메서드가 (0~8999)+1000 사이의 숫자열 즉 1000~9999 사이의 랜덤한 숫자열중에 일치하게 되면 참을 반환하는것 같다.
for(var i = 1000; i =<9999; i++) 또는 for(var i = 9999; i >= 1000; i--) 반복문이 먼저 떠오르게 된다.
반복문에서 도출되는 숫자열이 호출된 메서드의 랜덤하게 나온 숫자열과 일치하게 되면 반복문을 탈출하게 만드는 코드를 짜보면 chall07.js는 다음과 같다.

Java.perform(function() {
  var Chall07 = Java.use("uk.rossmarks.fridalab.challenge_07");
  Java.choose("uk.rossmarks.fridalab.MainActivity",{
    onMatch : function(instance){
      for(var i = 1000;  i <= 9999; i++){
        var RandNum = String(i);
        if(Chall07.check07Pin(RandNum)){
          console.log("[+]chall07의 값:"+ RandNum);
          instance.chall07(RandNum);
          break;
        }
      }
    },
    onComplete : function(){
      console.log("[+]chall07이 확인되었습니다.")
    }
  })
})

코드를 간단하게 설명하자면 처음에 가상머신과 연결을 하고 challenge_07클래스를 Chall07에 사용을 하겠다고 선언을 해놓는다.
그 다음에 MainActivity클래스에서 1000에서 9999사이의 숫자열중 랜덤한 값을 Chall07의 check07Pin에서 정해진 랜덤한 네자리 숫자열과 비교하여 매칭된 값을 출력하고 chall07메서드에 대입하여 참값을 이끌어낸다.

어떻게 보면 간단한 반복문 사용으로 할 수 있는 브루트포스 코드이다.
이 코드를 사용해서 frida -U -l chall07.js FridaLab 명령어를 사용해보면

브루트포스의 결과로 나온 네자리의 숫자가 나오고 그 결과로 대입한 값이 정상적으로 참을 반환했는지 에뮬레이터에서 확인해보면

아주 매우 잘 된 것을 볼 수 있다.
이제 FridaLab의 마지막 도전과제를 풀일만 남았다.
기초가 탄탄해지는 기분이 너무 좋다.
얼릉 클리어하고 Uncrackable도 하고싶다!

- 다음 포스트에 계속...

profile
Pentest Study & Life Blog

0개의 댓글