Closed mingkuang-Chuyu closed 1 month ago
nice work
这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW 毕竟标准用法肯定是 这四个函数, 这样不需要篡改每一个 dll的入口了
不能。
因为单纯的Thunk LoadLibrary* 无法控制DllMain的调用时机,如果目标DLL在DllMain中就立马访问TLS呢?
而且也无法保证一定可以接收线程回调通知,如果LoadDll这个模式本身是一个动态加载的DLL,这个情况又怎么办?
发件人: Yonggang Luo @.> 发送时间: 2024年5月29日 11:19 收件人: Chuyu-Team/YY-Thunks @.> 抄送: mingkuang @.>; State change @.> 主题: Re: [Chuyu-Team/YY-Thunks] Windows XP系统添加动态TLS支持 (Issue #83)
这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW 毕竟标准用法肯定是 这四个函数, 这样不需要篡改每一个 dll的入口了
― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/83#issuecomment-2136441529, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZNJL6SSTVXFYEQUEJDZEVCKZAVCNFSM6AAAAABIAWNQAGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZWGQ2DCNJSHE. You are receiving this because you modified the open/close state.Message ID: @.***>
原始回复
tls那一套暴力修复其实也简单: 1.分配一个新的AddressOfIndex 给要处理的dll模块,在peb的LDR里面修改好。 2.遍历存在的线程,给每个线程的teb处理一遍,ThreadLocalStoragePointer 指向一个你自己申请的TLS列表,拷贝原理的数据,增加一个新的节点复制自己的tls数据。 3.处理创建的线程,处理逻辑同2. 4.处理线程退出逻辑,清理自己的创建内存,还原ThreadLocalStoragePointer 指针
【吃🦐的】大头虾米 9:32:28 https://github.com/cxxzhang/FixTls/blob/main/FixTls/FixTls.cpp#L120
【吃🦐的】大头虾米 9:32:45 https://github.com/cxxzhang/FixTls/blob/main/FixTls/FixTls.cpp#L219
任务列表