Frida 질문입니다.

홈 > 커뮤니티 > 질문 게시판
질문 게시판

Frida 질문입니다.

2 charlie 2 7149
안녕하세요 얼마전부터 안드로이드 공부를 시작하게된 뉴비입니다.
Frida 후킹을 해보면서 궁금증이 생겨서 질문글을 올립니다.

Frida에서 js code 작성할 때 아래와 같이도 사용하고

Java.perform(function(){
    var exit = Java.use("java.lang.System");
    exit.exit.implementation = function () {
        send("java.lang.System.exit called!");
    };
});

다음처럼 overload()를 이용해서 사용하는 경우도 있던데 무슨 차이인가요?

var exit = Java.use("java.lang.System");
  exit.exit.overload("int").implementation = function(var_0) {
      send("java.lang.System.exit called!");
};

어디서 인자가 있을 때 사용한다고 한 걸 본 적이 있긴한데, 처음 경우도 function에 인자를 줘서 사용할 수 있길래 overload()를 사용하는 특별한 이유가 있는건지 궁금증이 들어 여쭤봅니다.
2 Comments
M LIN 2019.10.23 10:12  
동일한 클래스에 동일한 이름을 가진 메소드가 여러개 있을 경우 overload()를 사용합니다.

예를 들자면..
public static void exit(int status);
public static void exit(int status, int status);
public static void exit();

클래스내에 위와 같이 오버로딩된 함수가 있을 경우에는 본문의 위처럼 사용할 경우 overload()를 사용하라는 에러가 발생합니다.
동일한 이름을 가진 메소드가 3개가 있기때문에 어떠한 함수에 후킹할것인지 찾지 못하는거죠.
이러한 경우에 본문의 아래와 같이 인자값을 명시하여 정확히 어떤 함수에 후킹할 것인지 선택할 수 있습니다.
2 charlie 2019.10.23 13:54  
아하  감사합니다!