티스토리 뷰
반응형
Java.available : 현재 프로세스에 JavaVM이 로드되어 있는지 Boolean값
Java.androidVersion : 실행중인 Android 버전을 지정하는 문자열값
Java.enumerateLoadedClasses(callbacks) : 현재 로드된 클래스를 열거한다.
여기서 callbacks는 onMatch, onComplete를 지정하는데,
onMatch는 로드된 각 클래스에 대해 호출하고, onMatch: function(className)을 통해 className을 지정할 수 있다. 그리고 onComplete는 모든 클래스가 열거 될 때 호출된다.
Java.scheduleOnMainThread(fn) : fn은 VM의 메인스레드에서 동작한다. (흐음.....?)
Java.choose(className, callbacks) : Java Heap을 스캔하여 클래스의 라이브 인스턴스를 열거.
마찬가지로 callbacks에 onMatch, onComplete를 지정해서 해당 포인트에 원하는 함수를 호출할 수 있다.
Java.array(type, elements) : 자바 배열을 만든다. JS배열처럼 동작하지만 JAVA API를 사용할 수 있다.
Java.perform(function() {
Java.enumerateLoadedClasses( {
onMatch: function(className) {
send(className); // or console.log(className);
},
onComplete: function() {}
});
});
Interceptor.attach(target, callbacks[, data]) : 함수 호출을 차단한다.
이것은 호출을 가로채고자 하는 함수의 주소를 지정한다.
Module.getExportByName()과 같은 것을통해 함수의 주소를 찾으면 된다.
callbacks 함수는 onEnter(args), onLeave(retval)을 포함한다.
retval은 retval.replace(1337)와 같이 변경이 가능하다.
Interceptor.replace(target, replacement[, data]) : 함수를 target에서 replacement로 대체한다.
var openPtr = Module.getExportByName('libc.so', 'open');
var open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);
Interceptor.replace(openPtr, new NativeCallback(function (pathptr, flags) {
var path = pathptr.readUtf8String();
var fd = open(pathPtr, flags);
return fd;
});
이를 통해 기존 open함수를 무시하고 내가 정의한 함수를 실행하도록 한다.
반응형
'Android > Hacking' 카테고리의 다른 글
[Android] adb 명령어 정리 (0) | 2020.10.08 |
---|---|
[Android] Android Studio 를 이용한 동적디버깅 (0) | 2019.11.06 |
[Android] adb를 통한 Log 확인하기. (0) | 2019.10.30 |
[Android] Frida를 이용한 Hooking 방법. (0) | 2019.10.30 |
[Android] Frida 설치방법 (0) | 2019.10.30 |