Chuyu-Team / YY-Thunks

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

__security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 #91

Closed lygstate closed 1 month ago

mingkuang-Chuyu commented 1 month ago

不要一直开issue行不行?如果你有很多问题,可以来群里跟我聊。

__security_cookie_yy_thunks 目的是为了规避在_YY_initialize_winapi_thunks之前就调用YY-Thunks函数时潜在的崩溃风险。

毕竟YY-Thunks函数指针全部是加密的,如果cookie出现非预期更新,那么会导致解密后的指针不可预期……而使用自己的__security_cookie_yy_thunks,什么时候更新就完全可预期。

lygstate commented 1 month ago

不要一直开issue行不行?如果你有很多问题,可以来群里跟我聊。

群里面是无法跟踪的

__security_cookie_yy_thunks 目的是为了规避在_YY_initialize_winapi_thunks之前就调用YY-Thunks函数时潜在的崩溃风险。

毕竟YY-Thunks函数指针全部是加密的,如果cookie出现非预期更新,那么会导致解密后的指针不可预期……而使用自己的__security_cookie_yy_thunks,什么时候更新就完全可预期。

cookie 不会出现非预期更新

mingkuang-Chuyu commented 1 month ago

建议你换位思考一下吧,认真的想一想我上面说的话。

cookie是不会随意更新,但是 __security_cookie_yy_thunks被调用的时机是不可控的(虽然安排到了初始化节,但是你能保证其他人不写这种初始化节吗?)

调用被yY-Thunks hook的调用函数时机更也是不可控的,这完全取决于用户,更极端化,万一CRT初始化cookie时,就调用了这样函数呢?

理论上整个调用期间完全就有可能cookie前后发生改变(yY-Thunks的视角),现在的做法是为了避免任何形式的意外,同时最终保证函数指针依然被加密。

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: Yonggang Luo @.> Sent: Thursday, May 30, 2024 2:03:42 AM To: Chuyu-Team/YY-Thunks @.> Cc: mingkuang @.>; State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

不要一直开issue行不行?如果你有很多问题,可以来群里跟我聊。

群里面是无法跟踪的

__security_cookie_yy_thunks 目的是为了规避在_YY_initialize_winapi_thunks之前就调用YY-Thunks函数时潜在的崩溃风险。

毕竟YY-Thunks函数指针全部是加密的,如果cookie出现非预期更新,那么会导致解密后的指针不可预期……而使用自己的__security_cookie_yy_thunks,什么时候更新就完全可预期。

cookie 不会出现非预期更新

― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/91#issuecomment-2137979987, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZO454JLTYSSNVGSPB3ZEYJ75AVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZXHE3TSOJYG4. You are receiving this because you modified the open/close state.Message ID: @.***>

mingkuang-Chuyu commented 1 month ago

另外,有问题就来群里问吧。如果基于创建新这类新的bug,直接删除。

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: 徐 鹏捷 @.> Sent: Thursday, May 30, 2024 8:55:56 AM To: Chuyu-Team/YY-Thunks @.>; Chuyu-Team/YY-Thunks @.> Cc: State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

建议你换位思考一下吧,认真的想一想我上面说的话。

cookie是不会随意更新,但是 __security_cookie_yy_thunks被调用的时机是不可控的(虽然安排到了初始化节,但是你能保证其他人不写这种初始化节吗?)

调用被yY-Thunks hook的调用函数时机更也是不可控的,这完全取决于用户,更极端化,万一CRT初始化cookie时,就调用了这样函数呢?

理论上整个调用期间完全就有可能cookie前后发生改变(yY-Thunks的视角),现在的做法是为了避免任何形式的意外,同时最终保证函数指针依然被加密。

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: Yonggang Luo @.> Sent: Thursday, May 30, 2024 2:03:42 AM To: Chuyu-Team/YY-Thunks @.> Cc: mingkuang @.>; State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

不要一直开issue行不行?如果你有很多问题,可以来群里跟我聊。

群里面是无法跟踪的

__security_cookie_yy_thunks 目的是为了规避在_YY_initialize_winapi_thunks之前就调用YY-Thunks函数时潜在的崩溃风险。

毕竟YY-Thunks函数指针全部是加密的,如果cookie出现非预期更新,那么会导致解密后的指针不可预期……而使用自己的__security_cookie_yy_thunks,什么时候更新就完全可预期。

cookie 不会出现非预期更新

― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/91#issuecomment-2137979987, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZO454JLTYSSNVGSPB3ZEYJ75AVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZXHE3TSOJYG4. You are receiving this because you modified the open/close state.Message ID: @.***>

lygstate commented 1 month ago

另外,有问题就来群里问吧。如果基于创建新这类新的bug,直接删除。 获取Outlook for Androidhttps://aka.ms/AAb9ysg ____ From: 徐 鹏捷 @.> Sent: Thursday, May 30, 2024 8:55:56 AM To: Chuyu-Team/YY-Thunks @.>; Chuyu-Team/YY-Thunks @.> Cc: State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91) 建议你换位思考一下吧,认真的想一想我上面说的话。 cookie是不会随意更新,但是 security_cookie_yy_thunks被调用的时机是不可控的(虽然安排到了初始化节,但是你能保证其他人不写这种初始化节吗?) 调用被yY-Thunks hook的调用函数时机更也是不可控的,这完全取决于用户,更极端化,万一CRT初始化cookie时,就调用了这样函数呢? 理论上整个调用期间完全就有可能cookie前后发生改变(yY-Thunks的视角),现在的做法是为了避免任何形式的意外,同时最终保证函数指针依然被加密。 获取Outlook for Androidhttps://aka.ms/AAb9ysg ____ From: Yonggang Luo @.> Sent: Thursday, May 30, 2024 2:03:42 AM To: Chuyu-Team/YY-Thunks @.> Cc: mingkuang @.>; State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91) 不要一直开issue行不行?如果你有很多问题,可以来群里跟我聊。 群里面是无法跟踪的 security_cookie_yy_thunks 目的是为了规避在_YY_initialize_winapi_thunks之前就调用YY-Thunks函数时潜在的崩溃风险。 毕竟YY-Thunks函数指针全部是加密的,如果cookie出现非预期更新,那么会导致解密后的指针不可预期……而使用自己的__security_cookie_yy_thunks,什么时候更新就完全可预期。 cookie 不会出现非预期更新 ― Reply to this email directly, view it on GitHub<#91 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZO454JLTYSSNVGSPB3ZEYJ75AVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZXHE3TSOJYG4. You are receiving this because you modified the open/close state.Message ID: @.***>

那你直接删了好了,你不觉得你的言辞有问题么?

lygstate commented 1 month ago

你不加思索的就界定此问题要删掉简直莫名其妙,还有 我认为正确处理方式是调用 security_init_cookie ,而不是创建一个不知所谓的security_cookie_yy_thunks, 如果security_init_cookie 没有调用,那么security_cookie_yy_thunks的值将是未初始化的,安全性何来? 既然你都给__security_cookie_yy_thunks赋值了,那么调用__security_init_cookie可以同事满足所有需求

mingkuang-Chuyu commented 1 month ago

我什么时候说了这个贴要删掉?我说你的如果你开其他issue提问,那么我就删你的新贴,回复你之前说的产物记录的事情。

我为什么要调用?security_init_cookie而且理由我也提到了,你无法保证security_init_cookie里面不调用yY-Thunks,你希望无限递归,堆栈耗尽吗?无法保证__security_init_cookie里面不调用系统API。

另外,我调用security_init_cookie有啥用?CRT后续任然会调security_init_cookie,然后cookie不就被更新了。到时又会发生什么?

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: Yonggang Luo @.> Sent: Thursday, May 30, 2024 2:50:44 PM To: Chuyu-Team/YY-Thunks @.> Cc: mingkuang @.>; State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

你不加思索的就界定此问题要删掉简直莫名其妙,还有 我认为正确处理方式是调用 security_init_cookie ,而不是创建一个不知所谓的security_cookie_yy_thunks, 如果security_init_cookie 没有调用,那么security_cookie_yy_thunks的值将是未初始化的,安全性何来? 既然你都给__security_cookie_yy_thunks赋值了,那么调用__security_init_cookie可以同事满足所有需求

― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/91#issuecomment-2138802884, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZMB7TEYGJ5EKIOH5HLZE3D4JAVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZYHAYDEOBYGQ. You are receiving this because you modified the open/close state.Message ID: @.***>

lygstate commented 1 month ago

我什么时候说了这个贴要删掉?我说你的如果你开其他issue提问,那么我就删你的新贴,回复你之前说的产物记录的事情。

无逻辑关系, 我这不是提问,就是报告bug,如果你觉得github issue 不能使用就应该关闭,唯一指定qq作为交流渠道

产物记录 跟这个issue有关系吗?

我为什么要调用?security_init_cookie而且理由我也提到了,你无法保证security_init_cookie里面不调用yY-Thunks,你希望无限递归,堆栈耗尽吗?无法保证security_init_cookie里面不调用系统API。 另外,我调用security_init_cookie有啥用?CRT后续任然会调__security_init_cookie,然后cookie不就被更新了。到时又会发生什么?

那你就更不应该使用__security_cookie_yy_thunks=__security_cookie,这是多此一举,搞个半拉子,

合理的方式是实现一个自己的 security_init_cookie,比如 security_init_cookie_yy

当然,如果你是那种不接受别人意见的人,当我没说

MouriNaruto commented 1 month ago

@lygstate

那你就更不应该使用__security_cookie_yy_thunks=__security_cookie,这是多此一举,搞个半拉子

这个反而是合理的……因为 YY-Thunks 的设计目标之一是非侵入式替换

毛利

MouriNaruto commented 1 month ago

而且 YY-Thunks 不应该和当前可执行文件实例的 C 运行时的行为联动……YY-Thunks 对于你当前的可执行文件更像是系统 API 实现的角色

毛利

MouriNaruto commented 1 month ago

为了防止潜在的冲突 YY-Thunks 不能依赖当前可执行文件实例的 C/C++ 运行时的设施

就像 Windows 的 kernelbase.dll kernel32.dll 依赖的并不是 msvcrt.dll 的 C 运行时库函数(毕竟 msvcrt.dll 依赖了 kernel32.dll),而是 ntdll.dll 的 C 运行时库函数那样

这种事情想想就知道是常识性事务……

毛利

lygstate commented 1 month ago

为了防止潜在的冲突 YY-Thunks 不能依赖当前可执行文件实例的 C/C++ 运行时的设施

就像 Windows 的 kernelbase.dll kernel32.dll 依赖的并不是 msvcrt.dll 的 C 运行时库函数(毕竟 msvcrt.dll 依赖了 kernel32.dll),而是 ntdll.dll 的 C 运行时库函数那样

就这意思 __security_cookie 是C运行时库一部分,不要依赖它,会降低安全性

这种事情想想就知道是常识性事务……

毛利

MouriNaruto commented 1 month ago

就这意思 __security_cookie 是C运行时库一部分,不要依赖它,会降低安全性

所以鸭子做了一个自己的 security cookie 给 YY-Thunks 部分用,应该不影响 C 运行时,毕竟 C 运行时会用自己的 cookie(倒是严格来说 Windows 那边 security cookie 是属于 Windows SDK 的一部分……)

毛利

MouriNaruto commented 1 month ago

目前来看这个家伙主要是用于指针加密,YY-Thunks 支持的老系统不保证有 DecodePointer 和 EncodePointer,于是需要 YY-Thunks 自己的实现……而且不能依赖 C 运行库的 obj 你也知道,于是就自己做了……虽然 SDK 有 security cookie 的 obj

毛利

MouriNaruto commented 1 month ago

当然初始化成 __security_cookie 也是没啥问题的(毕竟要是当前 CRT 实例初始化了 Windows SDK 提供的 security cookie 的 obj 的话,可以白嫖相关结果)

毛利

MouriNaruto commented 1 month ago

当然我看出了点问题,之前 YY-Thunks 没有接管 DllMain 的话之前做法没啥问题,但是现在的话……估计还是要来一份自己的 cookie 生成

毛利

mingkuang-Chuyu commented 1 month ago

毛利的担忧点是有道理的,现在接管就DllMain ,就会导致GetProc被执行二次,从存在性能问题。

至于加入DllMain接管之前,复用__security_cookie并没有问题。反正CRT已经给我初始化了一份,我为什么不顺其拿来用,复用?不但省去cookie生成,而且可以减少YY-Thunks大小。

虽然__security_cookie可能不是所有编译器都有,但是关系不大,用VC6的一些人应该本来也就不那么重视安全性,对不对?顶多也就VC6没有函数加密而已。

如果是反馈问题,请提出方案的负面影响。

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: Kenji Mouri (Qi Lu) @.> Sent: Thursday, May 30, 2024 10:41:22 PM To: Chuyu-Team/YY-Thunks @.> Cc: mingkuang @.>; State change @.> Subject: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

当然我看出了点问题,之前 YY-Thunks 没有接管 DllMain 的话之前做法没啥问题,但是现在的话……估计还是要来一份自己的 cookie 生成

毛利

― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/91#issuecomment-2139750454, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZI72KBOPHW7W2N5SKTZE43BFAVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZZG42TANBVGQ. You are receiving this because you modified the open/close state.Message ID: @.***>

lygstate commented 1 month ago

虽然__security_cookie可能不是所有编译器都有,但是关系不大,用VC6的一些人应该本来也就不那么重视安全性,对不对?顶多也就VC6没有函数加密而已。

我说的并不是VC6,而是基于vs2015(or upper)+UCRT,如果在XP下运行,在DllMain未被调用时,__security_cookie将未被初始化,会是一个很小的值,不安全

mingkuang-Chuyu commented 1 month ago

这没有明显的安全问题,因为后续任然会被重新加密(CRT初始化时)。

当然这时存在一点性能问题,因为函数地址会被获取2次。


发件人: Yonggang Luo @.> 发送时间: 2024年5月31日 10:58 收件人: Chuyu-Team/YY-Thunks @.> 抄送: mingkuang @.>; State change @.> 主题: Re: [Chuyu-Team/YY-Thunks] __security_cookie_yy_thunks 的目的是什么 为何不直接使用__security_cookie替代 (Issue #91)

虽然__security_cookie可能不是所有编译器都有,但是关系不大,用VC6的一些人应该本来也就不那么重视安全性,对不对?顶多也就VC6没有函数加密而已。

我说的并不是VC6,而是基于vs2015(or upper)+UCRT,如果在XP下运行,在DllMain未被调用时,__security_cookie将未被初始化,会是一个很小的值,不安全

― Reply to this email directly, view it on GitHubhttps://github.com/Chuyu-Team/YY-Thunks/issues/91#issuecomment-2141148347, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEX7GZOTWT7RWKEUVMBSKADZE7RMJAVCNFSM6AAAAABIPJ5YPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBRGE2DQMZUG4. You are receiving this because you modified the open/close state.Message ID: @.***>