setImmediate(() => {
Java.perform(function() {
function hookInstance() {
var challenge06 = Java.use("uk.rossmarks.fridalab.challenge_06");
challenge06.addChall06.implementation = function() {
challenge06.chall06.value = 1;
console.log("chall06 value : " + challenge06.chall06.value);
}
// addChall06 메서드를 재정의 해 chall06 변수 값을 변경하거나 처음부터 chall06 변수 값을 변경하면 됨 chall06 변수는
// 클래스 변수라 클래스에서 직접 접근이 가능함
// challenge06.chall06.value = 1;
// console.log("chall06 value : " + challenge06.chall06.value);
Java.choose("uk.rossmarks.fridalab.MainActivity", {
onMatch : function(instance) {
console.log(instance);
instance.chall06(1); // chall06 변수 값을 1로 변조했기 때문에 1 삽입하면 문제 해결
},
onComplete : function() {
console.log("Completed");
}
});
}
setInterval(hookInstance, 1000); // 1초마다 실행
});
});
challenge06.chall06.value 변수는 Static 변수이기 때문에 인스턴스에 접근하지 않아도 바로 접근이 가능함
그래서 challenge06.chall06.value 값을 변조하지 않고 chall06 메서드에 그대로 주입해서도 문제를 해결할 수 있음
setImmediate(() => {
Java.perform(function() {
function hookInstance() {
var challenge06 = Java.use("uk.rossmarks.fridalab.challenge_06");
console.log("challenge06.chall06.value : " + challenge06.chall06.value);
Java.choose("uk.rossmarks.fridalab.MainActivity", {
onMatch : function(instance) {
console.log(instance);
let correct = challenge06.chall06.value;
console.log("correct value injection : " + correct);
instance.chall06(correct);
},
onComplete : function() {
console.log("Completed");
}
});
}
setInterval(hookInstance, 1000); // 1초마다 실행
});
});