2

I want to hook socket function in libc on Android platform, and implement as Suterusu. Give some code below:

void hookrw_init ( void )
{
    __android_log_print(ANDROID_LOG_INFO, "hook_function", "Hooking socket\n");
    void *libcHandle = dlopen("/system/lib/libc.so", RTLD_NOW);
    __android_log_print(ANDROID_LOG_INFO, "hook_function", "open libc.so\n");
    if (libcHandle != 0) {
        socket_connect = (void *)dlsym(libcHandle, "connect");
    hijack_start(socket_connect, &on_connect);
 }

 static int on_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
    char *ip = inet_ntoa(((struct sockaddr_in *)addr)->sin_addr);
    int port = ((struct sockaddr_in *)addr)->sin_port;
    __android_log_print(ANDROID_LOG_INFO, "hook_function", "on_connect, ip=%s, port=%d\n", ip, port);

    hijack_pause(socket_connect);
    __android_log_print(ANDROID_LOG_INFO, "hook_function", "call connect on socket\n");
    int ret = socket_connect(sockfd, addr, addrlen);
    __android_log_print(ANDROID_LOG_INFO, "hook_function", "connect return=%d\n", ret);
    hijack_resume(socket_connect);

    return ret;
}

But the implement above is not thread safe, especially between hijack_pause and hijack_resume cannot hook socket connect function, and every pause/resume need to do cacheflush, It's maybe performance issue. Could you give me some advices?

SammyJiang
  • 83
  • 2
  • 8
  • Hey Sammy, were you able to get answer? Any update on this. I am also looking for the same. Please let me know if you have any. – Suman Oct 29 '14 at 10:49

0 Answers0