9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作

这篇具有很好参考价值的文章主要介绍了9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内容参考于:易道云信息技术研究院VIP课

上一个内容:游戏底层功能对接类GameProc的实现

码云地址(master 分支):https://gitee.com/dye_your_fingers/titan

码云版本号:44c54d30370d3621c1e9ec3d7fa1e2a028e773e9

代码下载地址,在 titan 目录下,文件名为:titan-接管游戏连接服务器的操作.zip

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg

提取码:q9n5

--来自百度网盘超级会员V4的分享

HOOK引擎,文件名为:黑兔sdk升级版.zip

链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw

提取码:78h8

--来自百度网盘超级会员V4的分享

以 游戏底层功能对接类GameProc的实现 它的代码为基础进行修改

HOOK下图红框位置:0x10617046(通过之前分析找到的)

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

然后在注入的时候做HOOK发现,会崩溃,然后发现hook的点没有被游戏加载,解决办法我们在HOOK之前手动的把模块加载进入,不等游戏加载了

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

黑兔sdk升级:首先点击属性

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

找到下图红框位置,主要时看$(htd)\indude,如果下图红框位置不显示 $(htd)\indude

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

而显示不同选项,如下图红框

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

这时把配置这一行设置成跟下图一样,就好了

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

下载完升级版的黑兔std头文件可能无法正常加载到项目中,所以要手动加,首先检查它的目录对不对,如下图红框,我这里是对的,我的头文件就放在了那里

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

如果不对,首先点击下图红框位置

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

选择头文件所在目录,这样就把头文件设置好了

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

然后设置dll库,库目录是下图红框位置,手动设置方法与上方设置头文件一样

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

全部搞完之后,选择下图重新扫描解决方案,就不会报红了(就算报红也能编译通过)

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

这里补充一个东西:就是当执行了黑兔SDK,但是在创建项目的时候下图红框里的东西不存在

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

首先不打开项目启动 Visual Studio 然后选择选项:

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

然后看下图红框里的目录

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

查看目录中是否有下图红框里的两个文件,如果没有就复制到上图红框目录下

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络

如下图

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作,网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析,游戏,安全,网络


GameProc.cpp文件的修改:新加 _OnConnect函数,修改了 InitInterface函数、LoadBase函数

#include "pch.h"
#include "GameProc.h"
#include "extern_all.h"

// typedef bool(GameWinSock::* U)(char*, unsigned);



bool _OnConnect(HOOKREFS2) {
	/*
		根据虚函数表做HOOK的操作
		截取 ecx 获取 winsock 的值(指针)
	*/
	unsigned* vtable = (unsigned*)_EDX;
	//WinSock = (GameWinSock *)_ECX;
	/*
		联合体的特点是共用一个内存
		由于 GameWinSock::OnConnect 的 OnConnect函数是 GameWinSock类的成员函数
		直接 vtable[0x34 / 4] = (unsigned)&GameWinSock::OnConnect; 这样写语法不通过
		所以使用联合体,让语法通过
	*/
	union {
		unsigned value;
		bool(GameWinSock::* _proc)(char*, unsigned);
	} vproc;

	/*
		vproc._proc = &GameWinSock::OnConnect;  这一句是把我们自己写的调用connect函数的地址的出来
	*/ 
	vproc._proc = &GameWinSock::OnConnect; 
	/*
		InitClassProc函数里做的是给指针赋值的操作
		InitClassProc(&GameWinSock::_OnConnect, vtable[0x34/4]);这一句的意思是把
		GameWinSock类里的_OnConnect变量的值赋值成vtable[0x34/4],这个 vtable[0x34/4] 是虚表里的函数
		vtable[0x34/4]是游戏中调用connect函数的函数地址,经过之前的分析调用connect是先调用了虚表中的
		一个函数,然后从这个函数中调用了connect函数
	*/
	InitClassProc(&GameWinSock::_OnConnect, vtable[0x34/4]);
	CString str;
	str.Format(L"===vtable:%X", vtable[0x34 / 4]);
	AfxMessageBox(str);
	DWORD oldPro,backProc;
	VirtualProtect(vtable, 0x100, PAGE_EXECUTE_READWRITE, &oldPro);
	vtable[0x34 / 4] = vproc.value;
	VirtualProtect(vtable, 0x100, oldPro, &backProc);
	return true;
}

GameProc::GameProc()
{
	hooker = new htd::hook::htdHook2();
	Init();
	InitInterface();
}

void GameProc::LoadBase()
{
	LoadLibraryA("fxnet2.dll");
}

void GameProc::Init()
{
}



void GameProc::InitInterface()
{
	LoadBase();
	MessageBoxA(0, "1", "1", MB_OK);
	hooker->SetHook((LPVOID)0x10617046, 0x1, _OnConnect, 0, true);
}

新加GameWinSock.h文件:

#pragma once
class GameWinSock
{
	typedef bool(GameWinSock::* PROC)(char*, unsigned);
public:
	static PROC _OnConnect;
	bool OnConnect(char* ip, unsigned port);
};

新加GameWinSock.cpp文件:

#include "pch.h"
#include "GameWinSock.h"
#include "extern_all.h"

GameWinSock::PROC GameWinSock::_OnConnect{};
// 这个函数拦截了游戏的连接
bool GameWinSock::OnConnect(char* ip, unsigned port)
{
    // this是ecx,HOOK的点已经有ecx了
    WinSock = this;
    MessageBoxA(0, ip, ip, MB_OK);
	bool b = (this->*_OnConnect)(ip, port);
	// 下方注释的代码时为了防止多次注入,导致虚函数地址不恢复问题导致死循环,通过一次性HOOK也能解决
	/*unsigned* vtable = (unsigned*)this;
	vtable = (unsigned*)vtable[0];
	union {
		unsigned value;
		bool(GameWinSock::* _proc)(char*, unsigned);
	} vproc;

	vproc._proc = _OnConnect;

	DWORD oldPro, backProc;
	VirtualProtect(vtable, 0x100, PAGE_EXECUTE_READWRITE, &oldPro);
	vtable[0x34 / 4] = vproc.value;
	VirtualProtect(vtable, 0x100, oldPro, &backProc);*/

    return b;
}

htdMfcDll.cpp文件的修改:修改了 InitInstance函数

// htdMfcDll.cpp: 定义 DLL 的初始化例程。这是一个MFC的dll
//

#include "pch.h"
#include "framework.h"
#include "htdMfcDll.h"
#include "extern_all.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 注释掉下方宏,以入口点注入的方式注入
// #define WNDHOOK
#ifdef WNDHOOK
typedef struct htdDll
{
	HHOOK     keyHook;
	unsigned  KbdProc;
	unsigned  SetDll;

}*PHtdDll;
void htdSetDll(htdDll hDll);
htdDll mDll;
#endif

BEGIN_MESSAGE_MAP(ChtdMfcDllApp, CWinApp)
END_MESSAGE_MAP()


// ChtdMfcDllApp 构造

ChtdMfcDllApp::ChtdMfcDllApp()
{
	
}

ChtdMfcDllApp theApp;
ChtdMfcDllApp* PtheApp;

HHOOK keyHook;
LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l);

BOOL ChtdMfcDllApp::InitInstance()
{
	CWinApp::InitInstance();
	PtheApp = this;
#ifdef WNDHOOK
	mDll.KbdProc = (DWORD)(KeyCallBack);
	mDll.SetDll = 0;
#else
	keyHook = SetWindowsHook(WH_KEYBOARD, KeyCallBack);// 代码一开始,在这注册一个键盘事件的钩子
#endif
	PGameProc = new GameProc();
	return TRUE;
}

// 钩子处理事件
LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l)
{

	if (nCode == 0)
	{
		if ((l & (1 << 31)) == 0)
		{
			switch (w)
			{
			case VK_HOME:

				if (PtheApp->wndMain == NULL)
				{

					PtheApp->wndMain = new CUI();
					PtheApp->wndMain->Create(IDD_MAIN);

				}

				PtheApp->wndMain->ShowWindow(TRUE);
				break;
			}
		}
	}
	return CallNextHookEx(keyHook, nCode, w, l);
}
#ifdef WNDHOOK
void htdInit(htdDll* hDll)
{
	hDll->KbdProc = mDll.KbdProc;
	hDll->keyHook = mDll.keyHook;
	hDll->SetDll = mDll.SetDll;
}

void htdSetDll(htdDll hDll)
{
	mDll = hDll;
}
#else
void htdInit()
{
}
#endif

新加extern_all.h文件:

/*
	此文件是用来存放全局变量、全局函数(通用函数)
*/
#pragma once
#include "GameWinSock.h"
#include "GameProc.h"

extern 	GameWinSock* WinSock;
extern GameProc* PGameProc;
extern void InitClassProc(LPVOID proc_addr, unsigned value);

新加extern_all.cpp文件

/*
	此文件是用来存放全局变量、全局函数(通用函数)
*/
#include "pch.h"
#include "extern_all.h"
GameWinSock* WinSock = nullptr;
GameProc* PGameProc = nullptr;

void InitClassProc(LPVOID proc_addr, unsigned value)
{
	unsigned* writer = (unsigned*)proc_addr;
	writer[0] = value;
}

 文章来源地址https://www.toymoban.com/news/detail-837246.html

到了这里,关于9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难免 有代码缺少、无法运行 的情况,但是确实学到了不少真本事,主要是了解老师的架构思想。 b站课程地址 课程我自己是跟着学完了的,本文是个人笔记记录和好课

    2024年02月02日
    浏览(57)
  • 游戏同步+游戏中的网络模块

    原文链接:游戏开发入门(九)游戏同步技术_游戏数据同步机制流程怎么开发-CSDN博客 游戏开发入门(十)游戏中的网络模块_游戏开发组网-CSDN博客 3.同步技术的基本常识: a.同步给谁? 某个用户: 如私聊的聊天信息 同屏 内的所有玩家:发给同一个区域内的所有玩家 同一

    2024年02月22日
    浏览(44)
  • 无网络游戏1 小恐龙部分

    众所周知Python代码可以在没有网络的状态下运行,所以我们要做一个无网络的游戏。 这是一个非常简单的程序适合初学者学。 那些第三方库是: 很简单了 但这块我为新手准备了注释. 把它们放在同一个目录下 照片是:        1.png       2.png       3.png 切换着来,我用列

    2024年04月22日
    浏览(44)
  • 【简单3d网络游戏制作】——基于Unity

    目录 Demo展示 前期知识点准备 1.delegate委托 2.通信协议 3.List容器 4.dictionary容器 5.MethodInfo类 进入创作 c/s通用通信协议: 客户端  1.场景搭建 2.BaseHuman刨析(Sync+Ctrl)         Ctrl脚本         Sync完整代码          BaseHuman完整代码 3.NetManager刨析 4.Main刨析       

    2024年02月05日
    浏览(56)
  • Unity游戏开发客户端面经——网络(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 网络 常问问题总结,有帮助的可以收藏。 区别 UDP TCP 是否连接 不连接 面向连接 是否可靠 不可靠 可靠传输(传输过程中会丢失,但会重发)使用

    2024年02月01日
    浏览(45)
  • 游戏AI行为决策——HTN(分层任务网络)

    Hierarchical Task Network(分层任务网络),简称HTN,与行为树、GOAP一样,也是一种行为决策方法。在《地平线:零之曙光》、《变形金刚:塞伯坦的陨落》中都有用它来制作游戏敌人的AI (我一个都没玩过捏 。比起其它行为决策方法,HTN有个十分鲜明的特点: 推演 。 HTN允许我

    2024年02月02日
    浏览(65)
  • Unity之NetCode多人网络游戏联机对战教程(1)

    官网链接:https://docs-multiplayer.unity3d.com/netcode/current/about/ Netcode for GameObjects(NGO)是专为Unity构建的高级网络库。它能够在网络会话中将 GameObject 和 世界数据 同时发送给多名玩家。使用NGO不必关心低级协议和网络框架。 打开一个unity项目,在菜单栏中选择 Window Package Manager

    2024年02月07日
    浏览(59)
  • 低成本动作捕捉解决方案及虚幻VR网络游戏开发

    大家好,我叫人宅,很高兴和大家一起分享一下本套直播课程。 课程名称:元宇宙VR技术研发 低成本动作捕捉解决方案及虚幻VR网络游戏开发 主要介绍: 在过去我们做动画,需要具备动画师能力才可以去做,K了一天动画,差不多就几秒。如果是公司,需要招聘动画师,每位动

    2023年04月11日
    浏览(40)
  • JavaScript做一个贪吃蛇小游戏,无需网络直接玩。

    用JavaScript做一个贪吃蛇小游戏,无需网络 = 打开即可玩。 直接按上下左右键就可以玩起来了 欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精

    2024年03月21日
    浏览(53)
  • 电魂网络:游戏行业走出寒冬,电竞产业迎来新机遇

    2023年,电魂网络迎来业务发展的全新拐点。作为一家长期深耕电竞产业的游戏公司,电魂网络在游戏研发、赛事运营、人才培养、产业链布局等方面均形成了领先优势,为公司的持续发展奠定了良好的基础。 在此基础上,电魂网络积极应对行业变化,抓住杭州亚运会等重大

    2023年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包