簡體   English   中英

如何使用Cydia Substrate在Android中掛鈎C / C ++方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM