《0 Day安全软件漏洞分析 2版》--6.3章节中攻击C++虚函数的实战

最近在看0 day这本书,虽然这本书很老了,但是里面的技术还是可以学习一下的,不时的学习新技术,也要学习曾经的老技术,这本书中大部分的环境都是windows XP下,使用的VC++ 6.0编辑器,我是觉得那个编辑真难用,可能使用惯了VS 2015了,因为觉得难用,所以书中大部分的实验我都没有尝试去实验,就是看懂了就算过去了,这次我对这个攻击C++虚函数的这个比较感兴趣,就决定动手试试,原理看懂了之后还是比较有意思的。

环境:windows 7 X64、VS 2015

先说下原理吧,就把书中的内容摘抄下来,先理解下虚函数和虚表

(1)C++类的成员函数在声明时,若使用关键字 virtual 进行修饰,则被称为虚函数。
(2)一个类中可能有很多个虚函数。
(3)虚函数的入口地址被统一保存在虚表(Vtable)中。
(4)对象在使用虚函数时,先通过虚表指针找到虚表,然后从虚表中取出最终的函数入口地址进行调用。
(5)虚表指针保存在对象的内存空间中,紧接着虚表指针的是其他成员变量。
(6)虚函数只有通过对象指针的引用才能显示出其动态调用的特性。

原理:

修改对象中的虚表指针或修改虚表中的虚函数指针,那么在程序调用虚函数时就会跑去执行 shellcode。

代码:

编译时需要关闭GS、DEP选项。

#include "stdafx.h"
#include "iostream"

//shellcode是使用kali系统下的msfvenom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值