通过虚函数指针绕过虚函数的保护机制
来源:互联网 发布:网络剧特点 编辑:程序博客网 时间:2024/06/01 10:44
#include <iostream>using namespace std;class A{public: A() { a = 10; }private: virtual void Func1() { cout << "class A Func1" << endl; cout << a << endl; } virtual void Func2() { cout << "class A Func2" << endl; }private: int a;};int _tmain(int argc, _TCHAR* argv[]){ A a; //得到虚表的地址 int* v_ptrAdrs = *((int**)&a); //得到虚表中的第一个值 int* funcAddr = *((int**)v_ptrAdrs); typedef void (*gFUNC)(); A* pp = &a; //如果你用的是vs,可以通过汇编压入this指针,目前只在vs2008下测试过 __asm mov ecx, pp; //直接调用虚函数,此处绕过了private的保护 (*(gFUNC)funcAddr)(); return 0;}
当然,这只能是在没有参数的情况下才能调用成功,如果存在参数,那么还是会失败,下面我们修改一下类A,为函数添加一个入参:
class A{public: A() { a = 10; }public: virtual void Func1(int para) { cout << "class A Func1" << endl; cout << a*para << endl; } virtual void Func2() { cout << "class A Func2" << endl; }private: int a;};
我们通过汇编代码来查看为什么会失败,截取汇编代码如下:(*(gFUNC)funcAddr)(10);004144FD 8B F4 mov esi,esp 004144FF 6A 0A push 0Ah --入栈,压参1000414501 FF 55 DC call dword ptr [funcAddr] --调用函数,跟入函数内部,我们会发现,函数的最后会进行出栈操作00414504 83 C4 04 add esp,4 --出栈00414507 3B F4 cmp esi,esp 00414509 E8 BE CC FF FF call @ILT+455(__RTC_CheckEsp) (4111CCh)
通过上述汇编代码,就会发现,错误出在调用方式上,下面只要稍作改动就可以成功了。
int _tmain(int argc, _TCHAR* argv[]){ A a; //得到虚表的地址 int* v_ptrAdrs = *((int**)&a); //得到虚表中的第一个值 int* funcAddr = *((int**)v_ptrAdrs); typedef void (__stdcall *gFUNC)(int); A* pp = &a; //如果你用的是vs,可以通过汇编压入this指针,目前只在vs2008下测试过 __asm mov ecx, pp; //直接调用虚函数,此处绕过了private的保护 (*(gFUNC)funcAddr)(10); return 0;}
- 通过虚函数指针绕过虚函数的保护机制
- 虚函数绕过 GS保护 学习
- 整理攻击C++虚函数绕过GS保护
- C++虚函数系列之二:绕过class的访问机制访问虚函数
- 通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
- 通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
- 通过指针引用虚函数
- 绕过win2003堆栈保护机制的新方法
- 通过函数指针使用虚函数表中的函数
- 通过vtable指针访问声明为private的虚函数
- 虚函数的机制
- 虚函数的机制
- 通过交换虚函数表指针查看虚函数的实现方式
- 类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用
- 通过函数指针调用函数
- 通过函数指针调用函数
- 通过指针调用函数?
- C通过函数交换指针的值
- 混社会
- c#中的DateTime属性与方法
- HDU 1541 树状数组
- WebService
- Build a Simple Program Using Boost in(std::cin) : What does it mean?
- 通过虚函数指针绕过虚函数的保护机制
- 通过生日获取星座Python源码
- ACM必备(学完一个就加亮一个)不多,就这些!
- 各大网站 http server分析
- Java对象的序列化和反序列化
- 精通Javascript+jQuery视频下载地址
- mysql 练习之 Alter 用法总结
- 毕业生的程序员之路
- Microsoft SharePoint 共享文档training