2014-12-10 12 views
0

를 사용하여 안드로이드에서 C/C++ 방법 후크하는 방법, 안드로이드 JNI는 후크 예는 실제로 C 코드와 자바 메소드를 후킹한다.내가 Cydia를 기판의 가정을 확인 Cydia를 기판

는하지만 내가 원하는 즉 안드로이드에 libXXX.so의 방법은 C/C++ 방법을 후크하는 것입니다. /system/lib/libc.so의 fork() 메소드와 같습니다. Cydia 저자와 XDA의 정보는 Cydia가이 작업을 수행 할 수 있음을 보여줍니다. 인터넷을 통해 모든 것을 검색했지만 예제를 찾을 수 없습니다.

사람은 Cydia를를 사용하여 안드로이드에서 C/C++ 방법을 후크하는 방법을 말해 줄 수 있을까요?

답변

0

아니 정확히 대답 아니기 때문에,이를 넣어,하지만 어쩌면 그것이 올바른 방향으로 넣어 볼 수있는 곳 정말 확인합니다. 여기에 C로 작성된 fork()의 심/후크 코드가 있습니다.이 경우에는 샌드 박스 프로그램이 두 번 이상 포크로 찍혔는지 여부를 감지하도록 작성되었지만 필요에 따라 동작을 수정할 수 있습니다. 경우 사람에

#define MAKE_CALLTHROUGH(fx, libfx)           \ 
    do{                  \ 
     void *handle = NULL;             \ 
     if(!libfx){               \ 
      handle = dlopen("/lib64/libc.so.6", RTLD_LAZY);     \ 
      if(!handle){              \ 
       fputs(dlerror(), stderr);          \ 
       exit(1);              \ 
       return 0;              \ 
      }                 \ 
      libfx = dlsym(handle, fx);           \ 
      if(dlerror() != NULL){            \ 
       fprintf(stderr, "Could not make handle for function %s\n", fx);\ 
       exit(1);              \ 
      }                 \ 
     }                  \ 
    }while(0); 

const int MAX_FORKS = 2; 
int forks = 0; 

int fork(){ 
    static int (*libfork) (void) = NULL; 
    MAKE_CALLTHROUGH("fork", libfork); 
    if(forks++ > 2){ 
     fprintf(stderr, "Illegally exceeded 2 forks.\n"); 
     killpg(0, 9); 
    } 
    return libfork(); 
} 

궁금했다, 나는 이런 식으로 컴파일 :

gcc -g -Wall -Wextra -fPIC -c watchshim.c -o watchshim.o 
gcc -g -Wall -Wextra -fPIC -shared -ldl watchshim.o -o watchshim.so 

gcc -g -Wall -Wextra -pthread -o watch watch.c 
watchshim.c가 심/후크 코드가 포함 된 파일입니다

watch.cfork()이 shimmed되는 과정입니다 (그 watch의 모든 하위 프로세스에서도 shimmed입니다. "/lib64/libc.so.6"fork()이 포함 된 so입니다.이 프로젝트에서 여러 기능을 사용하고 있기 때문에 MAKE_CALLTHROUGH 매크로로 작성되었습니다.