游戏外挂:劫持技术

简介: 1.  安装DetoursExpress30.msi,点击安装,安装后的目录结构如下: 在sample里面有例子,可供查看使用 2.第一步,打开VS2013开发人员命令提示(E:\Installed\MicrosoftVisual Studio 12.0\Common7\Tools\Shortcuts\VS2013 开发人员命令提示),进入Detours安装目录下的src目录,

1.  安装DetoursExpress30.msi,点击安装,安装后的目录结构如下:


在sample里面有例子,可供查看使用

2.第一步,打开VS2013开发人员命令提示(E:\Installed\MicrosoftVisual Studio 12.0\Common7\Tools\Shortcuts\VS2013 开发人员命令提示),进入Detours安装目录下的src目录,效果图如下:


2.新建项目,暂定项目名称是“劫持”

3.lib知识点

选中解决翻案à添加à新建项目à常规,输入lib名称


创建一个1.c文件


同理,添加一个1.h,内容如下

void msg();

添加一个1.c,内容如下:

#include<Windows.h>

 

void msg()

{

    MessageBoxA(0, "11111", "2222", 0);

}

右击项目à属性à常规à配置类型à静态库.lib

 

然后,生成à生成lib,执行完成后发现资源目录里面的Debug目录下就有lib.lib文件了。

 

如果想在劫持项目中使用自己写的静态链接库。右击劫持项目à属性à链接器à常规à输入à附加依赖库,在最前面添加   lib.lib;  截图如下:

 

将lib.lib文件放到源文件同级目录下,截图如下:

 

在劫持项目里的hello.c文件中添加函数声明

#include <stdio.h>

#include <stdlib.h>

voidmsg();

 

void main()

{

    printf("hello world");

    getchar();

}

这时候运行的时候就可以调用了lib.lib了。

 

动态库随时加载,随时注入。

静态库只有在编译的时候才可以调用。

 

4.使用detours做劫持(将项目改成release模式),其中项目结构如下(下面是劫持自己的过程):

A放文件有:

detours.h   (src下)

detours.lib  (lib.X86下)

detver.h    (src下)

将上面的文件放在源文件目录下即可

B.添加

#include"detours.h"  //载入头文件

#pragma comment(lib, "detours.lib")//表明要使用静态库

 

C:定义一个新的函数取代旧的函数。

int  newsystem(const char *_Command) //新的函数

{

    return 0;

}

 

D:添加Hook()方法和UnHook();

 

E:设置上detours.lib,方法是:右击项目à属性à链接器à输入à附加依赖项。截图:

 

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#include "detours.h" //载入头文件

#pragma comment(lib,"detours.lib")//表明要使用的静态库

//detour在realse模式生效

//创建函数指针等于地址,加上静态防止影响其它的源文件

static int(*oldsystem)(constchar* _Command) =system;

 

int newsystem(constchar * _Command) //新的函数

{

    return 0;

}

 

//开始拦截

void Hook()

{

    DetourRestoreAfterWith();//恢复原来状态,

    DetourTransactionBegin();//拦截开始

    DetourUpdateThread(GetCurrentThread());//刷新当前线程

    //这里可以连续多次调用DetourAttach,表明HOOK多个函数

 

    DetourAttach((void **)&oldsystem,newsystem);//实现函数拦截

    DetourTransactionCommit();//拦截生效

}

 

//取消拦截

void UnHook()

{

    DetourTransactionBegin();//拦截开始

    DetourUpdateThread(GetCurrentThread());//刷新当前线程

    //这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK

    DetourDetach((void **)&oldsystem,newsystem); //撤销拦截函数

    DetourTransactionCommit();//拦截生效

}

 

 

void main()

{

    system("calc");

    printf("%p,%p,%p",system, newsystem, oldsystem);

    Hook();

    printf("\n%p,%p,%p",system, newsystem, oldsystem);

    system("calc");

    getchar();

}

 

现象是加了Hook()之后只弹出了一次计算机窗口,如果去掉了Hook()方法,则出现两个计算器窗口。

 

5、劫持应用

A:创建一个基于窗口的MFC的应用程序->然后拖一个button->双击buttonà添加代码,事件代码如下:

void C劫持测试2Dlg::OnBnClickedButton1()

{

     // TODO:  在此添加控件通知处理程序代码

     #include<stdlib.h>

     system("calc");

}

窗口截图如下:


B:选中解决方案,新建一个常规空项目(项目名称:劫持其他程序),这时候要写一个库劫持MFC程序

将detours中的各种相关文件放到源文件下面。截图如下:


C:修改项目的依赖项:右击项目-->属性-->链接器-->输入-->附加依赖项-


D:将项目改成dll项目,也就是,修改配置属性里面的常规的目标文件名和配置类型,截图如下:


1、编写dll内容:

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#include<string.h>

 

#include"detours.h"

#pragma comment(lib, "detours.lib")

 

static int(*poldsystem)(constchar * _Command) =system;//存储函数指针地址

 

int  newsystem(const char *_Command)

{

    //tasklist

    printf("%s",_Command); //禁止你干活

    return 0;

}

//开始拦截

void Hook()

{

    DetourRestoreAfterWith();//恢复原来状态

    DetourTransactionBegin();//拦截开始

    DetourUpdateThread(GetCurrentThread());//刷新当前线程

    //这里可以连续多次调用DetourAttach,表明HOOK多个函数

    DetourAttach((void **)&poldsystem,newsystem);//实现函数拦截

    DetourTransactionCommit();//拦截生效

}

 

//导出函数,可以加载的时候调用

_declspec(dllexport)void  go()

{

    MessageBoxA(0, "1", "2", 0);

    Hook();

}

E:生成dll文件,然后使用dllInject工具将它注入到应用里面。

 

6:劫持系统的原理是劫持CreateProcess()函数。同样也是编写dll文件。

 

 

 

目录
相关文章
|
人工智能 自然语言处理 语音技术
创新场景丨下一个iPhone 时刻,AI+AR 加速虚实融合世界的到来
仅仅以大模型通用能力帮助 AR 眼镜实现了多个场景下的交互还不够,关键在于大模型没有针对 AR 眼镜的需求做深度的定制和匹配。
|
网络协议 算法 网络安全
EVE-NG:一种强大的网络模拟器和实验平台
随着网络技术的飞速发展,网络安全和网络性能问题越来越受到人们的关注。在这个领域,EVE-NG是一种广受欢迎的网络模拟器和实验平台。
|
NoSQL MongoDB 数据库
【MongoDB 专栏】MongoDB 的并发控制与锁机制
【5月更文挑战第11天】MongoDB的并发控制和锁机制保证数据一致性和性能。全局锁用于特殊情况如数据库初始化,限制并发性能;文档级锁提供更高的并发性,针对单个文档锁定。乐观并发控制利用版本号检查减少锁竞争。在分布式环境下,需协调多节点锁,优化包括合理设计数据模型、调整锁配置和利用分布式事务。未来,MongoDB将持续改进这些机制以应对复杂需求。了解并发控制原理对于数据库开发者至关重要。
627 2
【MongoDB 专栏】MongoDB 的并发控制与锁机制
|
缓存 JavaScript 前端开发
8种方法解决vue创建项目报错:command failed: npm install --loglevel error
该文章提供了八种解决Vue项目创建时遇到的`command failed: npm install --loglevel error`错误的方法,包括清理缓存、更换npm源、重新安装Node.js等措施。
8种方法解决vue创建项目报错:command failed: npm install --loglevel error
|
存储 安全 Android开发
深入探索安卓与iOS的安全性对比
在这篇文章中,我们将探讨安卓和iOS两大操作系统在安全性方面的不同之处。通过分析它们的安全架构、更新机制以及用户数据保护策略,我们可以更好地理解它们各自的优势和不足。无论是对于普通用户还是专业开发者,了解这些信息都是非常有益的。
|
存储 小程序 容器
如何制作一个微信答题小程序?
如何制作一个微信答题小程序?
643 0
|
存储 SQL 关系型数据库
MySQL Workbench支持哪些数据库引擎
【10月更文挑战第17天】MySQL Workbench支持哪些数据库引擎
379 0
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
负载均衡 安全 数据安全/隐私保护
|
API 调度
FreeRTOS深入教程(中断管理)
FreeRTOS深入教程(中断管理)
955 0