bytedance / bhook

:fire: ByteHook is an Android PLT hook library which supports armeabi-v7a, arm64-v8a, x86 and x86_64.
https://github.com/bytedance/bhook/tree/main/doc#readme
MIT License
2.05k stars 315 forks source link

通过hook pthread_create 来获取(java+native)线程的创建,但是有大部分的线程没有被hook到,是什么原因呢? #20

Closed beyondckw closed 2 years ago

beyondckw commented 2 years ago

在应用启动的时候开始hook,还是有大部分的线程没有被hook到,是什么原因呢? bytehook_hook_all(nullptr, "pthread_create", reinterpret_cast<void*>(pthread_create_hook), nullptr,nullptr);

caikelun commented 2 years ago

是不是执行hook之前那些线程已经创建了?可以hook之前先dump一下 /proc/self/task,然后分析下。

beyondckw commented 2 years ago

不是的,大部分都是hook之后才创建的,你们有用bhook来hook线程吗?

caikelun commented 2 years ago

不是的,大部分都是hook之后才创建的,你们有用bhook来hook线程吗?

我们hook很多地方,也包括线程的创建。你贴下完整一些的代码?包括proxy函数。

beyondckw commented 2 years ago

类似这样,帮忙看下

void start_hook(){ bytehook_hook_all(nullptr, "pthread_create",reinterpret_cast<void *>(pthread_create_hook),nullptr, nullptr); }

int pthread_create_hook(pthread_t *thread_id, const pthread_attr_t* attr,void* (*start_routine) (void *), void* arg) {
    INDEX ++;
    int rc = pthread_create(thread_id, attr,reinterpret_cast<void *(*)(void *)>(method_proxy), nullptr);
    if(rc){
        LOG_E("error to create thread");
    }
    return rc;
}

void method_proxy(){
    LOG_E("success to create thread");
}
caikelun commented 2 years ago

@beyondckw proxy函数写法不对,先看下文档吧:https://github.com/bytedance/bhook/blob/main/doc/quickstart.zh-CN.md#%E7%BC%96%E5%86%99-proxy-%E5%87%BD%E6%95%B0%E4%BB%A3%E7%90%86%E5%87%BD%E6%95%B0

s1rius commented 2 years ago

@beyondckw 最近正好用bhook练手hook了线程创建,可以参考下 android-thread-inspector

beyondckw commented 2 years ago

@beyondckw proxy函数写法不对,先看下文档吧:https://github.com/bytedance/bhook/blob/main/doc/quickstart.zh-CN.md#%E7%BC%96%E5%86%99-proxy-%E5%87%BD%E6%95%B0%E4%BB%A3%E7%90%86%E5%87%BD%E6%95%B0

好的,谢谢哈

beyondckw commented 2 years ago

@beyondckw 最近正好用bhook练手hook了线程创建,可以参考下 android-thread-inspector

谢谢~