Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 粉碎C++;VPTR_C++ - Fatal编程技术网

C++ 粉碎C++;VPTR

C++ 粉碎C++;VPTR,c++,C++,我正在上计算机安全课,我正在阅读。 在bo3.cpp中,作者创建自己的VTABLE,并覆盖VPTR以指向他的VTABLE。 为此,他需要VTABLE的地址,在本例中,VTABLE是对象的地址。 我感到奇怪的是,所有这些都是在被利用的代码中执行的。我是一个初学者,但我认为这种技术不能在实践中使用,因为我们不能编辑源代码并重新编译它。有没有办法在代码之外构建VTABLE并覆盖VPTR(例如,使用缓冲区溢出)(无需编辑易受攻击的源代码) 更新:假设有漏洞的程序要求输入字符串,我可以用它覆盖VPTR。我

我正在上计算机安全课,我正在阅读。 在bo3.cpp中,作者创建自己的VTABLE,并覆盖VPTR以指向他的VTABLE。 为此,他需要VTABLE的地址,在本例中,VTABLE是对象的地址。 我感到奇怪的是,所有这些都是在被利用的代码中执行的。我是一个初学者,但我认为这种技术不能在实践中使用,因为我们不能编辑源代码并重新编译它。有没有办法在代码之外构建VTABLE并覆盖VPTR(例如,使用缓冲区溢出)(无需编辑易受攻击的源代码)


更新:假设有漏洞的程序要求输入字符串,我可以用它覆盖VPTR。我编写自己的代码,在其中创建VTABLE,并打印VTABLE地址。我运行代码并将我的VTABLE地址(重复次数足以覆盖目标VPTR)作为字符串输入传递给易受攻击的程序。这样行吗?有更好/更简单的方法吗?

是的,您可以使用该技术

常见的方式是如何在C++中实现动态多态性(虚拟继承)与隐藏的VTABLE指针成员。然后,该成员出现在所有具有虚拟函数的对象中。它通常位于对象的最开始处

如果为对象调用虚函数,则程序将从指向vtable的虚函数调用函数。因此,如果您设法用数据覆盖对象的开头,那么您可以使vtable指针指向其他任何地方,并实现执行其他内容而不是虚拟成员函数


如果程序没有写入可执行内存(或执行可写内存)的权限,则不可能使用该漏洞,但大多数广泛使用的操作系统并非如此。

如果您能够以某种方式写入目标内存(
WriteProcessMemory
、DLL注入和好友、缓冲区溢出等),那么,即使没有源代码,一切都是可能的(复杂程度各不相同)。如果目标进程不能以任何方式写入,那么就不可能。您正在使用在线C++安全类吗?你能粘贴URL吗?@ PrANITKOTHARIONC,C++漏洞是我选择的演讲主题。@ FravZ1看到这是多么的PS3 USB越狱(其实并不重要,如果它是C跳表或C++ VTABLE),我确信这项技术可以在实践中使用,你可能会发现有趣的。