- 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 |