MainActivity 내 chall07() 함수가 존재하고 여기서 check07Pin 함수를 호출해준 뒤 플래그 값을 설정함
public void chall07(String str) {
if (challenge_07.check07Pin(str)) {
this.completeArr[6] = 1;
} else {
this.completeArr[6] = 0;
}
}
check07Pin은 전달 받은 문자열을 chall07 멤버변수와 비교. 이 값은 setChall07() 함수를 통해 랜덤 값으로 초기화 되는 문자열임
GPT에 물어보니 1000부터 9999까지의 값 중 랜덤한 정수를 뽑아 주는 코드라고 함
/* loaded from: classes.dex */
public class challenge_07 {
static String chall07;
public static void setChall07() {
chall07 = BuildConfig.FLAVOR + (((int) (Math.random() * 9000.0d)) + 1000);
}
public static boolean check07Pin(String str) {
return str.equals(chall07);
}
}
아무튼 chall07 문자열은 onCreate 함수에서 setChall07 함수가 호출됨으로써 초기화됨
내가 해야 할 것은 check07Pin 함수를 1000부터 9999까지 호출해보면서 true가 반환될 때의 값을 MainActivity의 chall07 인자로 던져주면 됨
Java.perform(function () {
// 1
var challenge_01 = Java.use('uk.rossmarks.fridalab.challenge_01');
challenge_01.getChall01Int.implementation = function () {
send('challenge_01::getChall01Int called');
var result = this.getChall01Int();
send('getChall01Int returned: ' + result);
send('modified result: 1\n');
return 1; // Or challenge_01.chall01.value = 1
};
// 2, 3, 4, 6
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function (instance) {
send('Found instance: ' + instance);
// 2
send('call MainActivity::chall02\n');
instance.chall02();
// 3
// instance.chall03.implementation = function () {
// send('call MainActivity::chall03');
// var result = instance.chall03();
// send('chall03 returned: ' + result);
// send('modified result: true\n');
// return true;
// }
// 4
send('call MainActivity::chall04("frida")\n')
instance.chall04('frida');
// 6
var challenge_06 = Java.use('uk.rossmarks.fridalab.challenge_06');
challenge_06.confirmChall06.implementation = function (i) {
send('call callenge_06::confirmChall06 with i: ' + i + '\n');
send('timeStart: ' + this.timeStart.value);
send('chall06: ' + this.chall06.value);
send('call challenge_06:confirmChall06 with i: ' + this.chall06.value + '\n');
var result = this.confirmChall06(this.chall06.value);
return result;
};
send('sleep 10 seconds');
Thread.sleep(10);
send('call MainActivity::chall06');
instance.chall06(10000);
**// 7
var challenge_07 = Java.use('uk.rossmarks.fridalab.challenge_07');
send('brute force check07Pin');
for (let index = 1000; index < 10000; index++) {
var result = challenge_07.check07Pin(index.toString());
if (result) {
send('check07Pin result: ' + index.toString());
instance.chall07(index.toString());
}
}**
},
onComplete: function () { }
});
// 3
var MainActivity = Java.use('uk.rossmarks.fridalab.MainActivity');
MainActivity.chall03.implementation = function () {
send('call MainActivity::chall03');
var result = this.chall03();
send('chall03 returned: ' + result);
send('modified result: true\n');
return true;
};
// 5
MainActivity.chall05.implementation = function (str) {
send('call MainActivity::chall05 with str: ' + str);
send('call MainActivity::chall05 with str: frida\n');
this.chall05('frida');
};
});