[英]Cydia Substrate Android: MSHookFunction crashes with Fatal signal 11
[英]How to hook C/C++ methods in Android using Cydia Substrate
我檢查了Cydia Substrate的主頁,作者提供的Android Jni Hook示例實際上是將Java方法與C代碼掛鈎。
但是我想要的是鈎住C / C ++方法,即Android中libXXX.so中的方法。 就像/system/lib/libc.so中的fork()方法一樣。 Cydia作者和XDA提供的信息似乎表明Cydia可以做到這一點。 我在整個Internet上進行了搜索,但找不到示例。
誰能告訴我如何使用Cydia掛鈎Android中的C / C ++方法?
不太確定該放在何處,因為這並不是一個正確的答案,但是也許它將使您朝着正確的方向發展。 這是一些用C編寫的shim / hooks 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
是包含shim / hook代碼的文件,而watch.c
是對fork()
進行填充的過程fork()
在watch
所有子進程中也進行"/lib64/libc.so.6"
。 "/lib64/libc.so.6"
是so
包含原始fork()
我已經MAKE_CALLTHROUGH
寫為一個宏,因為我在我在使用該項目勻場多種功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.