Frida CLI
frida attach 방식
frida -U com.android.chrome
frida spawn 방식
frida -U -f com.android.chrome --no-pause
frida script 삽입
frida -U --no-pause -f com.android.chrome -l ~.js
Frida Script
Java.perform(fn)
현재 스레드가 가상머신에 연결되어 있는지 확인하고 함수를 호출
Java.perform(function() {
}
Java.use(className)
메소드 후킹시 사용
var myClass = Java.use(com.mypackage.name.class)
// 앱에서 사용하는 클래스와 연동되는 myClass를 정의
var myClassInstance = myclass.$new();
// myClass를 통해 객체 인스턴스 생성 및 정의
var result = myClassInstance.myMethod("param")
// 클래스 내부에 있는 메소드에 접근해 인자 값을 넘겨주고 해당 결과 값을 반환
myClass.myMethod.implementation = function(param) {
}
// 앱에서 정의된 메소드의 구현 내용을 재작성
Java.choose(className, callbacks)
힙에서 인스턴스화 된 객체 찾기 가능
Java.perform(function(){
Java.choose(com.mypackage.name.class,
{
"onMatch":function(instance){
console.log(instance.toString());
},
"onComplete":function(){}
})
})
Java.enumerateLoadedClasses(className, callbacks)
로드된 모든 클래스를 열거하고 모든 일치 항목을 출력
Java.perform(function() {
Java.enumerateLoadedClasses(
{
"onMatch" : function(className) {
console.log(className)
},
"onComplete":function() {}
})
})
Overload - 0 parameter
myClass.myMethod.overload().implementation = function(){
}
Overload - parameter categories
.overload()
.overload('int’)
.overload('boolean')
.overload('float')
.overload('[B') // byte array
.overload('[B', '[B', '[B')
.overload('java.io.File')
.overload('java.lang.String')
.overload('android.view.View')
.overload('android.app.Activity')
.overload('android.content.Context')
.overload('android.content.Context', 'java.lang.String')
.overload('java.lang.String', 'java.lang.String')
.overload('android.graphics.Bitmap')
.overload('java.util.List’)
.overload('android.content.Context', 'java.lang.String', 'java.lang.String')
.overload('android.app.Activity', 'int', 'int', 'int', 'boolean')
Java.setImmediate(fn)
프리다는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다. 이러한 경우를 방지하기 위해서 setImmediate()를 사용한다.
setImmediate(function(){
console.log("[*] Starting Script");
Java.perfrom(function(){
myClass = Java.use("com.package.name.class.name");
myClass.implementation = function(v) {
}
});
});