chall02 문제는 chall02() 메소드를 실행시키면 된다.
2. 소스코드 분석
먼저, MainActivity를 살펴보면 AppCompactActivity의 필드를 MainActivity class가 상속 받고, Int형태의 CompleteArr 배열을 생성하고 있다.
chall02() 메소드를 실행시켜야하며, static으로 정의 되어 있지 않기 때문에 instance 변수라는 것을 확인해야 한다. 더불어 접근지정자가 public이었던 chall01과는 다르게 private로 지정되어있다.
- private의 경우 외부에서 접근이 불가능 하고 클래스 내부에서만 접근할 수 있다. chall01에서 함수와 변수값을 바꿀 수 있었던 것도 그 함수와 변수에 접근 즉, java.use를 이용해 그 getChall01Int() 함수 내부에 접근했던 것이다. 그런 것 처럼 java.choose를 이용하면 chall02()가 있는 MainActivity 클래스에 접근을 해서 실행할 수 있는 것이다.
instance 변수는 instance를 생성해야만 존재하기 때문에 함수가 실행될 때 자동으로 메모리에 탑재되는 static과 달리 호출 시 instance가 생성되어 있을 수도, 아닐 수도 있기 때문에 static이 붙은 메소드에서 instance 변수의 사용을 허용하지 않는다. 따라서 chall01에서 이용했던 Java.use가 아닌 Java.choose를 이용해야 한다.
3. 문제풀이
setImmediate(function(){
Java.perform(function(){
console.log("[*] start chall02");
//var frida_chall02
Java.choose("uk.rossmarks.fridalab.MainActivity", {
onMatch : function(instance)
{
//console.log("[-] Found: " + instance);
instance.chall02()
},
onComplete : function(){
console.log("[*] clear chall02");
},
})
});
});
CLEAR
'Write-up > FridaLab' 카테고리의 다른 글
fridalab-challenge 04 (1) | 2023.04.02 |
---|---|
fridalab-challenge 03 (2) | 2023.04.02 |
fridalab-challenge 01 (0) | 2023.02.17 |