본문 바로가기
  • 안아주는 다람쥐
seKUrity_Study : Andriod

[andriod 실습] frida lab 3번, 4번

by Sapphire. 2023. 3. 26.

3. Make chall03() return ture

 

chall03이란 함수를 참값으로 리턴하면 되는 내용으로 보인다.

 

먼저 chall03이 어떻게 짜여저 있나 보기 위해 mainactivity로 가서 찾아보았다.

   public boolean chall03() {
        return false;
    }

이렇게  boolean 자료형으로 chall03을 선언을 해주었다. 이것의 값을 true로 바꾸기 위해

public으로 선언되어 있으므로,  frida의 Java.use를 이용해 chall03을 true로 리턴해주면 될 것으로 보인다.

setImmediate(function(){ 
Java.perform(function() {

    var chall_03 = Java.use("uk.rossmarks.fridalab.MainActivity");
    chall_03.chall03.implementation = function() {
    return true; }
    console.log("\nchallenge 03 풀었냐..?");
});
});

자바스크립트에 익숙해진다면 훨씬 가볍게 풀 수 있을것으로 보인다. 조만간 frida 기본 문법에 대해서도 다뤄야 할 것 같다.

 

4. send "frida" to chall04()

 

frida라는 문자열 (string)을 chall04()에 반환하면 되는것으로 예상되는 문제이다.

    public void chall04(String str) {
        if (str.equals("frida")) {
            this.completeArr[3] = 1;
        }
    }

이번 메소드는 str 라는 인자에 firda라는 문자열이 같다는것이 확인되면 completeArr[3]에 1이라는 값이 저장되어 글씨를 초록색으로 만드는 로직임을 알 수 있다. 따라서 메소드를 호출 할 때 frida 문자열을 전달하게 하면 된다. instance 메소드를 호출하기 때문에 Java.choose를 이용하도록 하겠다.

Java.choose(className, callbacks)

안드로이드 앱 내부의 인스턴스를 다루기 위한 것으로, 힙에서 인스턴스화 된 객체를 찾아 callback으로 넘겨준다.

  • onMatch : 일치하는 인스턴스를 찾을 경우 호출한다.
  • onComplete : 일치하는 것을 모두 찾고난 후에 호출한다.
setImmediate(function(){ 
    Java.perform(function() {
    Java.choose("uk.rossmarks.fridalab.MainActivity", {
        "onMatch": function(chall_04) {
            chall_04.chall04("frida");
        },
        "onComplete": function() {
            console.log("\nchallenge_04 solved!");
            }
          })   
});
});