티스토리 뷰

반응형
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함수를 무시하고 내가 정의한 함수를 실행하도록 한다.
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함