Chuyu-Team / YY-Thunks

Fix DecodePointer, EncodePointer,RegDeleteKeyEx etc. APIs not found in Windows XP RTM.
MIT License
496 stars 102 forks source link

Windows XP系统添加动态TLS支持 #83

Closed mingkuang-Chuyu closed 1 month ago

mingkuang-Chuyu commented 1 month ago

原始回复

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

任务列表

✔表示已经处理问题

  • [x] 解决无法处理之前已经启动的线程没有分配Tls内存问题。
  • [x] Fls相关接口使用Tls重新改造,解决部分场景Callback丢失以及减少内存开销。
  • [x] NuGet版YY_Thunks在XP模式时自动为DLL开启自定义入口点DllMainCRTStartupForYY_Thunks
  • [x] 提供 __pfnDllMainCRTStartupForYY_Thunks weak符号,满足DLL自定义入口点定制。
mingkuang-Chuyu commented 1 month ago

https://github.com/Chuyu-Team/YY-Thunks/releases/tag/v1.0.10-Beta8 已经发布

mingkuang-Chuyu commented 1 month ago

https://github.com/Chuyu-Team/YY-Thunks/releases/tag/v1.0.10-Beta8 已经发布

lygstate commented 1 month ago

nice work

lygstate commented 1 month ago

这个改入口的方式 是否可以替换成 Thunks LoadLibraryA/LoadLibraryW LoadLibraryExA/LoadLibraryExW 毕竟标准用法肯定是 这四个函数, 这样不需要篡改每一个 dll的入口了

mingkuang-Chuyu commented 1 month ago

不能。

因为单纯的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: @.***>