환석이 2023. 3. 17. 01:04

1. Java.perform 

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

Java.perform(function(){
});

 

2. Java.use(ClassName) 

  - 메소드 후킹 시 사용한다.

  - Method가 static으로 설정이 되어 있을 경우 프로그램 실행 시 메모리가 올라오기 때문에 instance가 필요 없다 . 이럴 경우에는 java.use를 이용

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 : 앱에서 정의된 매소드의 구현 내용을 재작성한다.
}

 

3. Java.choose(className, callbacks)

    힙에서 인스턴스화 된 객체 찾기 가능

    Callbacks : onMatch, onComplete

    - onMatch : 실시간으로 인스턴스에 대해 호출

    - onComplete : function()의 모든 인스턴스가 열거될 때 호출

    -Method가 static이 아닌 모습을 확인 할 수 있다. 이러한 경우에는 java.choose를 통해서 instance를 이용해야 한다. 

Java.perform(function(){
    console.log("Starting Script!");
    var main;
    Java.choose(com.mypackage.name.class, {
    onMatch : function(instance){
        main = instance;
        console.log("Instance Matched!!");
        }, 
    onComplete : function(){
        console.log('Solved Challenge!!!!');
        }        
    });
    main.[method name()];
});

 

4. Java.setImmediate(fn)

    Frida는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다.

    이러한 경우를 방지하기 위해 setImmediate()를 사용한다.

    백그라운드로 자동으로 스크립트가 재실행되어 종료되지 않는다.

setImmediate(function(){
    console.log("[+] Starting script");

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

 

5. overload

    오버로딩(Overloading)을 구현하기 위하여 overload()를 제공한다.

    오버로딩은 하나의 클래스 내에 동일한 이름의 메소드가 매개변수 정보를 달리하여

    여러 개 존재하는 것을 말한다.

   

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

 

6. Java.enumerateLoadedClasses(className, callbacks)

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

 

로드된 모든 클래스를 열거하고 모든 일치 항목을 출력

-onMatch : 일치하는 것을 찾으면 호출

-onComplete : 가능한 일치(Match)를 모두 마치면 사용됨


출처 :

https://changkr28.tistory.com/entry/Frida-%EB%AC%B8%EB%B2%95

 

Frida 문법

# 목차 1. Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function(){ }); 2. Java.use(ClassName) 메소드 후킹 시 사용한다. var myClass = Java.use(com.mypackage.name.class) /

changkr28.tistory.com

https://cha3m.tistory.com/90

 

Frida 기본 설명

- Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function() { }); - Java.performNow() java단의 소스를 로드하기 전에 먼저 실행되는 script로 보인다. hooking 시점

cha3m.tistory.com