有人可以帮我解释这些代码行吗?
char code[] = "paste your shellcode here";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
您在此处的代码是如何创建指向任意数据切片的函数指针然后调用它的示例。
在一个非常简单的意义上,我们正在分配一个字节数组(char []),二进制 shellcode 有效负载被粘贴到其中,通常作为转义的十六进制值。
这一行,int (*func)();
,声明了一个函数指针,它将返回一个整数。这是典型的,因为大多数代码都会在 EAX 中返回某种基于整数的退出代码。
这一行将func = (int (*)()) code;
字节数组代码转换为函数指针并将其分配给先前定义的函数指针'func'。
这一行(int)(*func)();
实际上调用了 shellcode,将执行转移到字节数组中的第一个内存位置。
这段代码实际上非常有用。您不会期望发现它用于利用系统;相反,此代码用于在开发过程中测试、调试和以其他方式试验 shellcode。使用它,您可以简单地粘贴您尝试测试的 shellcode,然后执行它。这使您的 shellcode 保持非常简单,排除了完整独立可执行文件的所有典型要求,但仍允许您对其进行测试,而无需确定要利用的漏洞。通过这种方式,您可以知道代码是否有效,而不会被尝试利用实际代码时出现的各种干扰。
你试过用谷歌搜索“在这里粘贴你的 shellcode”吗?返回的第一秒(现在这个问题是第一个 LOL)结果是Corelan Team 的 Exploit 编写教程第 9 部分:Win32 shellcoding 简介,其中全部解释了:
简而言之,它只是一个用于测试 shellcode 的小型实用 C 应用程序,稍后将在本教程的后续部分中用于此目的。其余的在教程中解释。