Frida 문법
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
Frida 기본 설명
- Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function() { }); - Java.performNow() java단의 소스를 로드하기 전에 먼저 실행되는 script로 보인다. hooking 시점
cha3m.tistory.com