吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3451|回复: 1
收起左侧

[转贴] 使您的动态模块不可释放(Anti-FreeLibrary)

[复制链接]
yanaying 发表于 2020-5-31 09:46
本帖最后由 yanaying 于 2020-5-31 09:47 编辑

使您的动态模块不可释放(Anti-FreeLibrary)2分钟阅读
假设您的产品将模块注入到目标进程中,如果目标进程知道您模块的存在,则可以调用FreeLibrary函数来卸载您的模块(假设引用计数为1)。保持注入状态的一种方法是,在FreeLibrary每次目标进程调用时挂接函数并检查传递的参数FreeLibrary。
有一种无需钩子即可获得相同结果的方法。当进程用于FreeLibrary释放已加载的模块时,FreeLibrary将调用LdrUnloadDll由导出的模块ntdll

在LdrUnloadDll函数内部,它检查结构的ProcessStaticImport字段LDR_DATA_TABLE_ENTRY以检查模块是否动态加载。检查发生在LdrpDecrementNodeLoadCountLockHeld函数内部:



如果ProcessStaticImport设置LdrpDecrementNodeLoadCountLockHeld了该字段,则返回而不释放已加载的模块


因此,如果我们设置了该ProcessStaticImport字段,FreeLibrary将无法卸载我们的模块:

在这种情况下,模块在"Hello"每次附加到流程以及"Bye!"分离时都会打印。注意:有一种官方支持的方法来执行相同的操作:GetModuleHandleExA带GET_MODULE_HANDLE_EX_FLAG_PIN标志调用。

"The module stays loaded until the process is terminated, no matter how many times FreeLibrary is called."

谢谢James Forshaw

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
材鸟 + 2 + 1 冷知识~赞了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

雨落惊鸿, 发表于 2020-5-31 10:55
学到了。。。
JuncoJet 发表于 2020-5-31 11:17
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 12:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表