Android 모바일 해킹 - FridaLab(3)

Woongmur·2025년 1월 11일

3번째 도전과제

이제 FridaLab의 3번째 도전과제이다.
이전의 1번 2번의 도전과제는 각각 Java.use와 Java.choose의 기본적인 사용법을 익히는 느낌이었다.
그렇다면 이번 도전과제는 어떤 느낌일까?

FridaLab에서 도전과제의 내용을 보게되면 chall03()을 true로 반환시키라는 내용이다.

jadx로 디컴파일한 자바 코드를 보자 chall03또한 chall02와 마찬가지로 MainActivity 클레스에 메서드로 존재한다.

static이 없는것으로 보아 인스턴스 메서드 같지만 이번 문제에서는 메서드를 호출하는 것이 아닌 반환값을 변환하는 것이기 때문에 Java.use API를 사용하여 해결이 가능할것 같다.

Java.perform(function() {
	var Chall03 = Java.use("uk.rossmarks.fridalab.MainActivity");
    Chall03.chall03.implementation = function() {
    	console.log("[+]chall03을 true로 변환하였습니다.")
        return true;
    }
})

문법은 이전 Java.use사용과 비슷하나 반환 값을 변경하기 위해서는 implementation을 이용하여 return true;를 명시해줘야 한다.
frida -U -l chall03.js FridaLab 명령어를 실행시켜주고 에뮬레이터에서 check를 눌러주면 정상적으로 통과됐음을 알 수 있다.

이번 문제를 풀면서 알게된것을 요약하자면 static 메서드가 아니더라도 반환값만 변환하는거라면 Java.use API 문법을 사용할수 있다는 것이다.
이때 implementation이라는 것을 사용해야 하는데 이는 메서드의 구현 내용을 재작성 할수 있는 속성이다.
이를 통해서 false를 반환하는 메서드를 true로 반환할 수 있고, 이를 통해 루팅 탐지 같은것들을 우회할 때 사용할 수 있을것 같다.

- 다음 포스트에 계속...

profile
Pentest Study & Life Blog

0개의 댓글