본문 바로가기
보안 및 개발/MOBILE

Frida 기본 설명

by CH@3M 2020. 4. 20.

- Java.perform

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

Java.perform(function() {

});

 

- Java.performNow()

java단의 소스를 로드하기 전에 먼저 실행되는 script로 보인다.

hooking 시점을 맞춰주기 위해 주로 사용한다.

 

- Java.use(ClassName)

메소드 후킹시 사용한다.

var myClass = Java.use(com.mypackage.name.class)
// 앱에서 사용하는 클래스와 연동되는 myClass를 정의한다.

var myClassInstance = myclass.$new();
// myClass를 통해 객체 인스턴스 생성 및 정의를 한다.

var result = myClassInstance.myMethod("param")
// 클래스 내부에 있는 메소드에 접근해 인자 값을 넘겨주고 해당 결과 값을 result에 받는다.

myClass.myMethod.implementation = function(param) {
// .implementation : 앱에서 정의된 메소드의 구현 내용을 재작성 한다.
}

 

- Java.choose

Method가 static이 아닐 경우 instance를 이용해야 한다. 인스턴스화 된 객체에 사용한다.

Java.perform(function() {
	var main;
    Java.choose("com.mypackage.classname",
    {
    	onMatch : function(instance) {
        	main = instance;
            console.log("[*] Found : " + instance.toString());
        },
        onComplete : function() {
        }
     });
});

  -onMatch : 실시간으로 인스턴스에 대해 호출
  -onComplete : function()의 모든 인스턴스가 열거될 때 호출

 

- Java.setImmediate(fn)

setImmediate(function() { //prevent timeout
  console.log("[*] Starting script");

  Java.perform(function() {
    myClass = Java.use("com.package.name.class.name");
    myClass.implementation = function(v) {

    }
  })
})

Frida는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다.
이러한 경우를 방지하기 위해서 setImmediate()를 사용한다.
이를 사용하게되면, 백그라운드로 자동으로 스크립트가 재실행되어 종료되지 않는다.

 

- Java.enumerateLoadedClasses(className, callbacks)

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

로드된 모든 클래스를 열거하고 모든 일치 항목을 출력
  -onMatch : 일치하는 것을 찾으면 호출
  -onComplete : 가능한 일치(Match)를 모두 마치면 사용됨

 

참고 링크

https://aboutsc.tistory.com/164

https://rootable.tistory.com/entry/Frida-%EC%83%81%EC%84%B8-%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9D

반응형

'보안 및 개발 > MOBILE' 카테고리의 다른 글

[Android] Smali 코드  (0) 2020.05.06
adb: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]  (0) 2020.04.20
[Android] so파일 로드하는 sample app  (0) 2020.04.16
[Frida] trace  (0) 2020.03.26
화면캡쳐 우회  (0) 2020.03.18