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도 하고싶다!
- 다음 포스트에 계속...