逆向实用干货分享,Hook技术第二讲,之虚表HOOK

正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK

昨天的博客链接: http://www.cnblogs.com/iBinary/p/8001749.html

PS: 今天所讲内容和昨天没有管理,不过理解了昨天的帖子结合今天的知识,你就可以找东西练手了,比如你可以结合的知识,随便找一款C++写的游戏,将它的虚表HOOK了,这样你想干啥就干啥 ^_^

一丶认识虚表指针以及虚表

讲解之前我们要认识一下类在内存中的表现形式,以及认识虚表指针.

1.首先我们知道,当类中有虚函数的时候,则会生成虚表指针,虚表指针指向了虚表,虚表中保存的则是当前类中所有虚函数的函数地址.

内存结构图:

  

第一个是类的内存结构,第二个是虚表.

那么我们就有想法了,当我们调用虚函数的时候,会通过虚表指针,找到虚表,而后找到虚函数地址

那么现在我们是否可以将虚函数的地址改为我们的函数地址.

聪明: 其实就是很简单,理解了内存结构,理解了虚表指针,虚表那么就可以进行操作了.

我们只需要将虚表中的虚函数地址更改成我们的即可.

上面都是原理,下面说一下步骤

总共分为三个步骤

.获得虚表指针
.修改虚表的内存保护属性
.修改虚表中的虚函数地址为我们的函数地址. 很简单三步

高级代码:

  

#include "stdafx.h"
#include <windows.h>
class MyTest
{
public:
MyTest();
~MyTest();
void print();
virtual void ShowHelloWorld();
int m_Number;
}; MyTest::MyTest()
{
printf("MyTest::MyTest()\r\n"); } MyTest::~MyTest()
{
printf("MyTest::~MyTest()\r\n");
} void MyTest::ShowHelloWorld()
{
printf("Hello World!\n");
} void ShowData() //我们将虚表中的函数地址换为我们的函数地址
{
printf("有木有被坑的感觉\r\n");
} void MyTest::print()
{
printf("void MyTest::print()\r\n");
} int main(int argc, char* argv[])
{
MyTest test;
MyTest &obj = test; //可以虚调用 int DwAddress = *(int *)&test; //第一步,获取自己的虚表指针 obj.ShowHelloWorld(); //虚函数调用,测试作用 DWORD dwOld = ; //第二步修改虚表指针的内存保护属性,下方更改虚表
VirtualProtect((void *)DwAddress,0x1000,PAGE_EXECUTE_READWRITE,&dwOld);//修改内存保护属性,其地址是虚表指针地址 (*(int *)DwAddress) = (int)ShowData;//第三步,HOOK,也就是将我们的函数地址,写入到虚表中. obj.ShowHelloWorld(); //重新调用,看看是否被HOOK
return ;
}

上面代码可以直接拷贝粘贴, VS2013测试成功.

贴上测试图:

这里只是简单的HOOK了一下自己类的虚表,你可以通过自己的分析,找到别的进程中的虚表,然后更改.

当然这个HOOK很简单,也有自己的适用场合,俗话说,各种HOOK,注入等等一系列的操作,都在最适合自己的场合能发挥出最大的作用.

逆向实用干货分享,Hook技术第二讲,之虚表HOOK的更多相关文章

  1. 逆向实用干货分享,Hook技术第一讲,之Hook Windows API

    逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...

  2. PC逆向之代码还原技术,第二讲寻找程序入口点

    PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...

  3. Hook技术之API拦截(API Hook)

    一.实现过程 1.钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统. 2.在消息没有到达目的窗口前,钩子就捕获消息(即钩子函数先得到控制权). 3.钩子可以加工处理该消息,即钩子机制允许应 ...

  4. HOOK技术的一些简单总结

    好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术. 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常 ...

  5. Hook技术

    hook钩子: 使用技术手段在运行时动态的将额外代码依附现进程,从而实现替换现有处理逻辑或插入额外功能的目的. 它的技术实现要点有两个: 1)如何注入代码(如何将额外代码依附于现有代码中). 2)如何 ...

  6. 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)

    32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议 ...

  7. 逆向课程第二讲,寻找main入口点

    逆向课程第二讲,寻找main入口点 一丶识别各个程序的入口点 入门知识,识别各个应用程序的入口点 (举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本) 1.识别VC6. ...

  8. 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究

    20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...

  9. 最强最全干货分享:Android开发书籍、教程、工具等

    最全干货分享,本文收集整理了Android开发所需的书籍.教程.工具.资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益. 入门<Learning Android(中文版)& ...

随机推荐

  1. OSW 快速安装部署

    关于在运行Oracle的环境下部署OSW具体好处不再多说,只需要知晓,在日常Oracle定位各类故障,osw的数据可以协助诊断问题.MOS很多文档也多处提到需要osw的监控数据. 一.前期资料准备 1 ...

  2. Linux文档的压缩与打包

    linux系统中的后缀名其实要不要无所谓,但是对于压缩文件来讲必须要带上.这是为了判断压缩文件是由哪种压缩工具所压缩,而后才能去正确的解压缩这个文件.Linux压缩文件常见的后缀名所对应的压缩工具: ...

  3. LeetCode 205. Isomorphic Strings (同构字符串)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  4. python函数说明内容格式错误

    def levlTwo(levloneList,levlOneNum): """ 入参levloneList 一级城市列表 入参levlOneNum 用户选择的城市序号 ...

  5. OR in Matrix

    OR in Matrix Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submi ...

  6. Spring AOP分析(2) -- JdkDynamicAopProxy实现AOP

    上文介绍了代理类是由默认AOP代理工厂DefaultAopProxyFactory中createAopProxy方法产生的.如果代理对象是接口类型,则生成JdkDynamicAopProxy代理:否则 ...

  7. display:none,float小秘密

    一个元素不管是块元素还是行内元素   在添加了 display:none 之后,就变成了不可见的块元素,可以给他添加长度和高度   在float之后内联元素也会隐性成为  inline-block   ...

  8. React + Node 单页应用「一」前端搭建

    项目地址 预览地址 原文地址 记录最近做的一个 demo,前端使用 React,用 React Router 实现前端路由,Koa 2 搭建 API Server, 最后通过 Nginx 做请求转发. ...

  9. Python爬虫入门:Cookie的使用

    大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...

  10. 如何让只支持IE浏览器的jsp转为可以支持chrome

    如果你的项目只能使用IE浏览器打开,你想让其支持chrome的话,可以试一下下面的代码哦: function showLayerDialog(url,paramFuction){ top.layer. ...