크게 분석할 것은 없음. MainActivity 내 chall03()이 public 메소드로 정의되어 있고, onCreate 내 onClick에서 바로 호출함
※ 이제부터 파이썬과 자바스크립트 파일을 별도로 분리
public 메소드이므로 Java.use, Java.choose 두 가지 함수로 호출 가능한데, 어떠한 방식으로든 chall03의 implementation을 수정하여 무조건 true 를 반환하도록 하면 됨
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('myMethod returned: ' + result);
send('modified result: 1');
return 1; // Or challenge_01.chall01.value = 1
};
// 2, 3
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function (instance) {
send('Found instance: ' + instance);
// 2
send('call MainActivity::chall02');
instance.chall02();
// 3
// instance.chall03.implementation = function () {
// send('call MainActivity::chall03');
// var result = instance.chall03();
// send('chall03 returned: ' + result);
// send('modified result: true');
// return true;
// }
},
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');
return true;
};
});