# 목차
1. Java.perform
현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다.
Java.perform(function(){
});
2. 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 : 앱에서 정의된 매소드의 구현 내용을 재작성한다.
}
3. Java.choose(className, callbacks)
힙에서 인스턴스화 된 객체 찾기 가능
Callbacks : onMatch, onComplete
- onMatch : 실시간으로 인스턴스에 대해 호출
- onComplete : function()의 모든 인스턴스가 열거될 때 호출
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(){
//입력받는 인수가 없는 메소드
}
참고 사이트
cha3m.tistory.com/90
'Android' 카테고리의 다른 글
FridaLab_frida challenge 3 풀이 (0) | 2020.10.27 |
---|---|
FridaLab_frida challenge 2 풀이 (0) | 2020.10.25 |
APK 서명(인증서 생성 및 서명) (0) | 2020.10.03 |
Toast 팝업 Smali 코드 (0) | 2020.10.03 |
Ubuntu에 APMSetup 설치 (0) | 2015.03.04 |