【问题标题】:Does mingw allow executing byte array without page_execute?mingw 是否允许在没有 page_execute 的情况下执行字节数组?
【发布时间】:2018-08-21 13:29:56
【问题描述】:

我查看了 metasploit Meterpreter 源代码,发现它通过将 shell 代码强制转换为函数指针来执行 shell 代码,而没有将页面保护设置为 page_execute ,我还在 github 上看到了一些源代码,比如 nullcrypter 和 但是在 Visual Studio 中,如果我尝试这样做,它会导致访问冲突,如 microsoft 文档中所述,这对于 mingw 来说是不是特别的东西,或者背后有一些技巧

【问题讨论】:

标签: c winapi memory mingw-w64


【解决方案1】:

没有将页面保护设置为 page_execute

这是不正确的;来自您的代码:

unsigned char* exec = (unsigned char*)VirtualAlloc(NULL, PAYLOAD_LENGTH/2 ,0x1000,0x40);
//...
((void (*)())exec)();

请注意,VirtualAlloc 的最后一个参数是0x40,即PAGE_EXECUTE_READWRITE,因此无论编译器如何,您都会从一开始就获得可执行的内存。 MinGW 在这方面没有什么特别的,可执行位已经可以了。

如果此代码在 VC++ 中失败,可能是由于其他一些不兼容问题 - 当有效负载代码为 32 位时,您可能正在 64 位模式下编译?

【讨论】:

  • 但在 venom 项目中没有使用 virtualalloc 或 virtualprotect
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2010-11-10
  • 2021-01-12
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多