餐饮网站设计,最好的网站建设公司,变装 wordpress,外贸软件有用吗内容参考于#xff1a;易道云信息技术研究院VIP课
上一个内容#xff1a;数据包组织与发送过程逆向分析
码云地址#xff08;游戏窗口化助手 分支#xff09;#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git
码云版本号#xff1a;ec54e9ae1ca0efe96b87d5…内容参考于易道云信息技术研究院VIP课
上一个内容数据包组织与发送过程逆向分析
码云地址游戏窗口化助手 分支https://gitee.com/dye_your_fingers/sro_-ex.git
码云版本号ec54e9ae1ca0efe96b87d5dca1a2d0f873cba474
代码下载地址在 SRO_EX 目录下文件名为SRO_Ex-C还原网络通信系统发送功能.zip 链接https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg 提取码q9n5 --来自百度网盘超级会员V4的分享 HOOK引擎文件名为黑兔sdk.zip 链接https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw 提取码78h8 --来自百度网盘超级会员V4的分享 以 窗口化助手与游戏窗口同步移动 它的代码为基础进行修改
完成了C与游戏网络通信的函数对接
extern_all.cpp文件的修改
#pragma once
#include GameBase.h
#include CUI.h
#include CHelperUI.hextern CHelperUI* _ui_helper;
extern CUI* _ui;
extern GameBase* _pgamebase;
extern void InitClassProc(LPVOID proc_addr, unsigned value);
extern void InitClassProc(LPVOID proc_addr, unsigned* vtable, unsigned index);
新加extern_all.cpp文件
#include pch.h
#include extern_all.hvoid InitClassProc(LPVOID proc_addr, unsigned value)
{unsigned* uWrite (unsigned*)proc_addr;uWrite[0] value;
}void InitClassProc(LPVOID proc_addr, unsigned* vtable, unsigned index) {unsigned* addr (unsigned*)vtable[0];InitClassProc(proc_addr, addr[index]);
}
GameBase.h文件的修改删除了InitClassProc函数
#pragma once
#include Res.h
#include Control.h
#include AIM.h
#include ITEM.h
#include Core.h
#include Net.hclass GameBase
{
public:void Init();GameBase();PRes SRO_Res;PControl SRO_Control;PAIM SRO_Player;PCore SRO_Core;PNet SRO_Net;
};
GameBase.cpp文件的修改修改了 Init函数删除了InitClassProc函数
#include pch.h
#include GameBase.h
#include extern_all.hGameBase* _pgamebase;void GameBase::Init()
{unsigned* addrRead (unsigned*)0x1256E3C;SRO_Res (PRes)0x1036518;SRO_Control (PControl)addrRead[0];addrRead (unsigned*)0x1037D3C;SRO_Player (PAIM)addrRead[0];SRO_Core (PCore)0x1036590;addrRead (unsigned*)0x12A3AB0;SRO_Net (PNet)addrRead[0];InitClassProc(Res::_ReadTitle, 0x9A46C0);InitClassProc(Res::_ReadItemTitle, 0x9A4640);InitClassProc(Control::_NormalNotice, 0x848580);InitClassProc(Control::_NetNotice, 0x844E40);InitClassProc(Control::_ChatNotice, 0x844E80);InitClassProc(Control::_GetPPack, 0x866140);InitClassProc(Control::_UseItem, 0x85F640);InitClassProc(Control::_MangeItem, 0x864220);InitClassProc(ITEM::_GetItemRes, 0x995800);InitClassProc(Pack::_GetPackPack, 0x7722C0);InitClassProc(Pack::_GetEquipPack, 0x772300);InitClassProc(Core::_GetLvMaxExp, 0xA21F20);InitClassProc(NetData::_MakeData, 0x47F550);}//void GameBase::InitClassProc(LPVOID proc_addr, unsigned value)
//{
// unsigned* uWrite (unsigned*)proc_addr;
// uWrite[0] value;
//}GameBase::GameBase()
{_pgamebase this;// Init();// 初始化机制完成游戏与我们dll的对接
}新加NetData类
NetData.cpp文件
#include pch.h
#include NetData.hNetData::PROC_P_D NetData::_MakeData{};
void NetData::MakeData(LPVOID data, unsigned len)
{return(this-*_MakeData)(data, len);
}NetData.h文件
#pragma once
typedef class NetData
{typedef void (NetData::* PROC_P_D)(LPVOID, unsigned);
public:static PROC_P_D _MakeData;void MakeData(LPVOID, unsigned);
}*PNetData; 新加Net类
Net.cpp文件
#include pch.h
#include Net.h
#include extern_all.hNet::P_PROC_D_D Net::_CreateNetData{};
Net::PROC_P Net::_SendData{};
PNetData Net::CreateNetData(unsigned type, unsigned option)
{InitClassProc(Net::_CreateNetData, vTable, 0x9);return (this-*_CreateNetData)(type, option);
}void Net::SendData(LPVOID data)
{InitClassProc(Net::_SendData, vTable, 0xB);return (this-*_SendData)(data);
}Net.h文件
#pragma once
#include NetData.h
typedef class Net
{typedef PNetData(Net::* P_PROC_D_D)(unsigned, unsigned);typedef void(Net::* PROC_P)(LPVOID);unsigned* vTable; // 虚表static P_PROC_D_D _CreateNetData;static PROC_P _SendData;
public:PNetData CreateNetData(unsigned type, unsigned option);void SendData(LPVOID);
}*PNet;