有人可以帮我解释一下这些代码吗?
char code[] = "paste your shellcode here";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
Run Code Online (Sandbox Code Playgroud)
您在此处获得的代码是如何创建指向任意数据片段的函数指针然后调用它的示例.
在一个非常简单的意义上,我们分配一个字节数组(char []),二进制shellcode有效负载被粘贴到其中,通常作为转义的十六进制值.
这一行int (*func)();声明了一个返回整数的函数指针.这是典型的,因为大多数代码都会在EAX中返回某种基于整数的退出代码.
该行将func = (int (*)()) code;字节数组代码转换为函数指针,并将其分配给先前定义的函数指针"func".
该行(int)(*func)();实际上调用shellcode,将执行转移到字节数组中的第一个内存位置.
这段代码实际上非常有用.你不会期望它发现它曾用于开发系统; 相反,此代码用于在开发期间测试,调试和以其他方式试验shellcode.使用它,您只需粘贴您要测试的shellcode,然后执行它.这使您可以保持shellcode非常简单,排除完整独立可执行文件的所有典型要求,但仍允许您对其进行测试,而无需确定要利用的漏洞.通过这种方式,您可以知道代码是否正常运行,而不会被尝试利用实际代码时出现的各种分散注意力.