您的位置:首页 > 文旅 > 美景 > 66.FreeLibrary隐藏模块

66.FreeLibrary隐藏模块

2024/10/6 8:21:37 来源:https://blog.csdn.net/qq_36301061/article/details/140782520  浏览:    关键词:66.FreeLibrary隐藏模块

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院

上一个内容:65.破坏特征码防止内存定位查杀

65.破坏特征码防止内存定位查杀它的实现在驱动层还是可以看到辅助模块的,应用层有应用层的权限,在应用层可以做的事情就那么一点,当加载一个模块会登记到几个链表中,这几个链表在 65.破坏特征码防止内存定位查杀 里已经处理了,实际上在驱动层还是存在这种类似的链表,在应用层拿驱动层链表是没有办法的,然后有一种方式可以在应用把模块彻底抹除让驱动层再也检测不出来,这个方式也是有破解的方法不过难度是比较大的,这个方式最好的地方是不会用到驱动,首先先了解卸载一个模块是怎样卸载的,一般卸载模块是通过FreeLibrary,然后使用Ollydbg.exe加载一个进程看一下FreeLibrary函数

打开进程之后按ctrl 加 g 直接输入FreeLibrary跳转到FreeLibrary函数

跳到FreeLibrary函数

FreeLibrary函数它能够卸载一个模块,不是一用FreeLibrary函数这个模块就立马从内存中消失的,在 PLDR_DATA_TABLE_ENTRY 结构里有一个计数器,当模块加载一次计数器就加1,卸载一次就减1,然后直到计数器位0的时候再回去擦除内存、擦除链表等操作

下图红框位置通过函数名(LdrUnloadDll)可以看出这是卸载一个模块,但是卸载之后还有其余操作(计数器变成0会继续执行)

然后往下看可以看到抹除链表(LdrRemoveLoadAsDataTable)、解除资源(LdrUnloadAlternateResourcceModule)、抹除内存(ZwUnmapViewOfSection)

每个程序在内存中都有自己的内存映射,ZwUnmapViewOfSection函数可以把内存映射取消掉,然后卸载一个模块的流程是首先减少计数,计数减少到0之后就开始擦除一系列信息,擦除完信息之后就开始把内存也擦除掉,然后在做其它的收尾工作,使用FreeLibrary隐藏模块就是把 ZwUnmapViewOfSection 给拦截掉不让它执行,只有内存还在我们就还可以调用模块中的代码,也就是把模块所有信息都给抹除掉了但是没有注销内存空间,然后由于模块以及被加载到进程的内存中所以只要模块的内存空间不注销那还是可以继续使用。然后在高版本操作系统(win10及以上)FreeLibrary是被处理过的操作系统调用卸载模块函数不会走FreeLibrary函数,在win7操作系统可以,win10如果使用后面写,但是隐藏的原理与上述一样。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com