2014-12-10 3 views
0

Я проверил дом Cydia Substrate, пример Jni Hook, представленный автором, фактически подключает Java-метод с помощью кода C.Как подключить методы C/C++ в Android с помощью Cydia Substrate

Но я хочу подключить метод C/C++, т. Е. Метод в libXXX.so в Android. Как метод fork() в /system/lib/libc.so. Информация от автора Cydia и XDA, похоже, показывает, что Cydia может это сделать. Я искал по всему Интернету, но не могу найти пример.

Может ли кто-нибудь сказать мне, как подключить C/C++-метод в Android с помощью Cydia?

ответ

0

Не уверен, где это положить, потому что это не совсем ответ, но, возможно, он поместит вас в правильном направлении. Вот некоторый код, который перемычки/крючки fork(), написанный на C. В этом случае он был записан для обнаружения, если изолированная программа была развернута более двух раз, но вы, очевидно, могли бы изменить поведение по мере необходимости.

#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.c это процесс, в котором fork() является подкладками (это также поддерживается на всех дочерних процессах watch. "/lib64/libc.so.6" - это so, содержащий оригинал fork(). У меня есть MAKE_CALLTHROUGH, написанный как макрос, потому что я выполнял несколько функций в проекте, в котором я использовал это.