Как подключить методы C/C++ в Android с помощью Cydia Substrate
Я проверил дом Cydia Substrate, пример Android Jni Hook, предоставленный автором, на самом деле перехватывает Java-метод с C-кодом.
Но я хочу подключить метод C/C++, то есть метод в libXXX.so в Android. Как и метод fork() в /system/lib/libc.so. Информация от автора Cydia и XDA, кажется, показывает, что Cydia может сделать это. Я искал по всему Интернету, но не могу найти пример.
Может кто-нибудь сказать мне, как подключить метод C/C++ в Android с помощью Cydia?
1 ответ
Не совсем уверен, где это поставить, потому что это не совсем ответ, но, возможно, это укажет вам правильное направление. Вот некоторый код, который прокладывает / ловит 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
это файл, содержащий код shim/hook, и watch.c
это процесс, в котором fork()
Shimmed (он также Shimmed во всех дочерних процессов watch
, "/lib64/libc.so.6"
это so
содержащий оригинал fork()
, я имею MAKE_CALLTHROUGH
написано как макрос, потому что я использовал несколько функций в проекте, в котором я использовал это.