프리다 기본 문법

옥영진·2020년 8월 23일
0

Frida

목록 보기
3/11
post-custom-banner

프리다 JavaScript API

Java.perform(function)

현재 스레드가 가상머신에 연결되어 있는지 확인하고 function을 호출한다.

Java.perform(function() {
  /*
  do something
  */
})

Java.use(className)

변수와 메소드에 접근할 수 있는 클래스 객체를 반환한다. (인스턴스가 아닌 클래스 객체를 반환함에 주의한다.)

  • .implementation : 클래스에 정의된 메소드를 재작성한다.
Java.perform(function() {
  var myClass = Java.use(com.mypackage.name.class)
  
  myClass.myMethod.implementaion = function(param) {
    /*
    do something
    */
  }
})

스레드가 가상머신에 연결되어 있음을 확인하면, 앱에서 사용하는 클래스 객체를 반환하여 해당 객체에서 사용하는 메소드를 재작성하여 이를 사용하는 것이다.

Java.choose(className, callbacks)

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

  • onMatch : 일치하는 인스턴스를 찾을 경우 호출한다.
  • onComplete : 일치하는 것을 모두 찾고난 후에 호출한다.
Java.perform(function() {
  Java.choose(com.mypackage.name.class, {
    "onMatch" : function(instance) {
      console.log(instance.toString())
    },
    "onComplete" : function() {}
  })
})

Java.enumerateLoadedClasses(callbacks)

로드된 모든 클래스를 열거한다.

Java.perform(function() {
  Java.enumerateLoadedClasses({
    "onMatch" : function(className) {
      console.log(className)
    },
    "onComplete" : function() {}
  })
})

setImmediate(function)

프리다는 에뮬레이션이 느려질 경우, 시간초과 되어 연결을 자동으로 종료하는 경우가 있기 때문에 이를 막기 위해 사용한다.

setImmediate(function() { // prevent timeout
  console.log("[*] starting script");
  
  Java.perform(function() {
    myClass = Java.use("com.package.name.class.name");
    myClass.implementation = function(v) {
      // do something
    }
  })
})

오버로딩

오버로딩(Overloading)은 하나의 클래스 내에 동일한 이름의 메소드가 매개변수 정보를 달리 하여 여러 개 존재하는 것을 말한다.

오버로딩을 구현하기 위해 overload() 라는 것을 제공한다.

myClass.myMethod.overload().implementation = function() {
  // 입력받는 인수가 없는 메소드
  // do something
})

myClass.myMethod.overload("[B", "[B").implementation = function(param1, param2) {
  // 두 개의 바이트 배열을 인수로 입력 받는 메소드
  // do something
})

myClass.myMethod.overload("android.context.Context", "boolean").implementation = function(param1, param2) {
  // 앱의 context와 Boolean 값을 인수로 입력받는 메소드
  // do something
})
profile
안녕하세요 함께 공부합시다
post-custom-banner

0개의 댓글