VEH 异常处理函数进行免杀测试 admin 119797文章 95评论 2024年6月20日18:17:16评论16 views字数 1490阅读4分58秒阅读模式 想第一时间看到我们的大图推送吗?赶紧把我们设为星标吧!这样您就不会错过任何精彩内容啦!感谢您的支持!🌟 免责声明 文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。 言归正传,让我们开始吧! 前言 在Windows平台上,有两种主要的异常处理机制:VEH(Vectored Exception Handling)和SEH(Structured Exception Handling)。 VEH(Vectored Exception Handling): VEH是一种基于事件的异常处理机制,它允许程序能够拦截和处理系统级别的异常事件。 VEH允许开发人员注册异常处理程序,这些处理程序将在异常发生时被调用,从而允许程序有机会处理异常事件。 VEH可以用于全局异常处理,允许程序拦截和处理来自任何线程的异常。 SEH(Structured Exception Handling): SEH是一种结构化的异常处理机制,它允许程序员编写异常处理代码,以应对程序中的异常情况。 SEH使用_try、_except 和_finally 块来捕获和处理异常。 SEH通常用于应用程序内部的异常处理,允许程序员以结构化的方式处理特定代码块中的异常情况。 区别和优先级: VEH和SEH都是用于处理异常情况的机制,但它们的使用场景和优先级略有不同。 VEH通常用于全局异常处理,允许程序拦截和处理来自任何线程的异常,因此具有更高的优先级。 SEH通常用于应用程序内部的异常处理,以结构化的方式处理特定代码块中的异常情况,因此在特定代码块中的异常处理中具有更高的优先级。 这里我们使用到的就是VEH这个异常处理,来进行免杀测试,这个是老技术了,我这里炒炒冷饭,不过虽然老,但是使用效果还是不错的。这里我们不过多说了。 AV,EDR会定期扫描内存,但是不会全部都去扫描一遍,他会针对敏感区域主要是,属性带有X的,也就是具有可执行权限的内存区域。思路就是不断变换内存属性,需要时改成带有可执行,不需要就去掉。 我们在执行了shellcode以后他会去调用两个API,VirtualAlloc和sleep,当然这里你也是可以通过C2porfile去修改,一般默认是这样的。当执行sleep的时候就是我们不需要可执行权限的时候,所以我们需要hooksleep函数,在执行sleep时将内存属性修改,当执行到需要执行权限的时候就会报错,0xC05,这是权限访问错误,这里就出现异常了,就需要使用到VEH异常处理将内存属性改成可执行的,以便进行后续执行,但是我们需要知道具体是那一块内存,就需要VirtualAlloc函数,为什么是VirtualAlloc函数我开头就说了,cs默认的就是这个函数去申请内存这里我们hook,就是拿到申请地址,这样我们就完成一套动作,需要的时候修改为可读可写可执行,不需要就改成可读可写。 hooksleep函数: 这里我们可以看到自己的函数中是先将挂钩取消再调用原来的函数进行工作,然后再次复钩。 hookVirtualAlloc函数: 思路是一样的,但是这里我们获取到shellcode自己申请的内存的地址,我们可以通过VEH去修改他的内存属性。 VEH以及is_Exception(判断触发异常的地址是否在我们需要的范围内): 设置事件以及主函数代码: 这里就是完整的代码,过某绒杀毒软件是没有太大问题,可以尝试使用其他技术结合过更多杀软。 该文章思路等等均是借鉴其他大佬的。 原文始发于微信公众号(泾弦安全):VEH 异常处理函数进行免杀测试 点赞 http://cn-sec.com/archives/2848373.html 复制链接 复制链接 左青龙 微信扫一扫 右白虎 微信扫一扫
评论