请问有人能帮我解释下面这些代码吗?
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;
将字节数组code强制转换为函数指针,并将其赋值给之前定义的函数指针“func”。
这行代码:(int)(*func)();
实际上调用了shellcode,将执行转移到字节数组中的第一个内存位置。
这段代码非常有用。您不会期望它被用于攻击系统;相反,此代码用于测试、调试和实验开发中的shellcode。使用它,您可以简单地粘贴要测试的shellcode,然后执行它。这使您可以保持shellcode非常简单,不需要完整的独立可执行文件所需的所有典型要求,但仍能让您在不需要识别漏洞以利用的情况下测试它。通过这种方式,您就能知道代码是否有效,而不会被试图利用实际代码时出现的各种干扰所分散注意力。
您是否尝试过在谷歌上搜索"在此粘贴您的Shellcode"?第一个二个(现在这个问题排在第一位,哈哈)返回结果是Corelan团队的Exploit编写教程第9部分:Win32 shellcoding入门,其中所有内容都有解释:
C99
下它无法编译;2. 在最后一行中,将其转换为int
是多余的,(*func)();
就足够了。 - SomeWittyUsername