zoukankan      html  css  js  c++  java
  • windows | 虚表hook

    类中有虚函数就会存在虚表。

    主要是一种间接call:
    call dword ptr [xxxxxxx];

    因此就可以修改间接跳转的地址实现hook。

    主要步骤:

    1. 找到虚表
    2. 修改虚表的物理页属性可写
    3. 修改虚函数地址

    代码如下:

    #include <stdio.h>
    #include <windows.h>
    
    
    class Base{
    public:
    	virtual void output(){
    		printf("i am base 
    ");
    	}
    
    };
    
    
    void hook_print(){
    	printf("你被hook了
    ");
    }
    
    
    int main(int argc, char* argv[]){
    	Base *pb = new Base();     // 此对象的第一个DWORD指向虚表
    
    	DWORD *pVtAddr = (DWORD *)(*(DWORD*)pb);        // 强转类型指向虚表
    	// 由于虚表的属性是只读不可写,所以要改成可写
    	DWORD dwOldProct = 0;
    	VirtualProtect(pVtAddr, 4, PAGE_READWRITE, &dwOldProct);
    	*pVtAddr = (DWORD)hook_print;        // hook函数的地址
    
    	pb->output();
    	delete pb;
    	return 0;
    }
    

    本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/15164217.html

  • 相关阅读:
    requirejs 第一个实例
    ionic + cordova 环境搭建
    免安装mysql配置
    ConcurrentHashMap
    volatile和synchronized
    zookeeper集群安装
    题目
    Nginx
    CountDownLatch
    自己总结
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/15164217.html
Copyright © 2011-2022 走看看