首页
社区
课程
招聘
[原创]仿写EAC的类RSA导入表非对称加密混淆(有源码)
发表于: 2天前 573

[原创]仿写EAC的类RSA导入表非对称加密混淆(有源码)

2天前
573

github地址

cc8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6j5h3W2D9k6h3q4^5K9q4)9J5c8V1g2m8b7#2)9#2k6V1I4A6K9$3g2Q4y4h3k6u0L8i4m8G2M7Y4c8Q4y4h3k6q4L8X3y4J5P5i4m8@1i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2K9h3&6Q4x3V1k6E0j5h3W2F1i4K6u0W2j5%4m8H3

问题背景

在现代的内核级安全解决方案中,通常需要用到一些未文档化的函数。这些函数可能通过MmGetSystemRoutineAddress、手动导入、解析SSDT或搜索特征码等各种方式被从系统中找到。找到它们后,为了防止重复查找,开发者通常会自行维护一套导入表。

例如下图中的qword_1401F12B0,就是驱动中自行维护的导入表数据。

图片描述

安全隐患

但这种数据存储方式实在是太脆弱了。这种数据通常都在驱动的.data节段,这使得对函数的hook变得非常简单。

图片描述

这种针对驱动自行维护的导入表数据的攻击并不罕见,就连微软也正在遭受这种攻击。在微软提供的win32k.sys驱动中,所有Shadow SSDT函数在Windows 11 24H2版本之前都是通过这种.data数据指针转发到win32kbase.sys或者win32kfull.sys中的真实函数。因此产生了一种针对SSSDT的攻击方式,名为"dataptr hook",至今仍然存在。

常规防御方案的局限性

如何防御这种攻击?或许你会想到自己写入后就让区段不可写,但是动态修改页面属性在Windows内核中是不受欢迎的。也有一种办法是在所有导入结束后为所有数据计算校验值,但攻击者可以通过逆向校验算法的方式为自己生成的地址计算出正确的校验值。

图片描述

例如在上图中,驱动通过sub_14007DAE0运行时解密被加密的函数地址数据,密钥为0xCD49623F3A849631。攻击者将自己要设置的地址通过相同密钥加密后替换,仍然可以达成攻击目的。

EasyAntiCheat的解决方案

而EasyAntiCheat(EAC)敏锐地察觉到了这一点,并设计了绝佳的解决方案。

EAC通过一套简易的类RSA非对称加密算法,在初始化这些导入函数时用私钥加密其地址。完成加密后,EAC从内存中销毁使用的私钥。此时任何人将无法再修改导入函数的地址,包括它自己。

后续的解密将使用公钥进行。

通过简化RSA算法,我们可以还原这一过程。目标是设计一种针对8字节数据值的简易RSA算法,使用私钥加密(签名),公钥解密(验签)。尽可能无依赖且执行较快。

图片描述 图片描述 图片描述

注意:该实现没有考虑任何密码学安全性,实际使用时对函数地址来说通常是够用的,如果你有其他加密需求请勿参考该代码。

github地址

0dfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6j5h3W2D9k6h3q4^5K9q4)9J5c8V1g2m8b7#2)9#2k6V1I4A6K9$3g2Q4y4h3k6u0L8i4m8G2M7Y4c8Q4y4h3k6q4L8X3y4J5P5i4m8@1i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2K9h3&6Q4x3V1k6E0j5h3W2F1i4K6u0W2j5%4m8H3


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2天前 被Saileaxh编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回