18.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据与消息配置的实现

news2024/11/24 10:04:57

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

上一个内容:17.数据分析工具配置功能的实现

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

码云版本号:7d38fa038df5816c559b6bda85e4f67dca4f45d3

代码下载地址,在 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的分享

以 17.数据分析工具配置功能的实现 的代码为基础进行修改

如果不知道现在做的什么事,那么就跟着做完,然后看成品效果

新加一个菜单资源

然后选择下图中的内容

然后就会得到,下图中的东西

它的内容

然后给消息定义列表添加一个事件:

添加一个鼠标右键单击事件

类注意不要选错了,上一个内容中使用当前窗户创建的类叫做CSet,所以也要把这个鼠标右键单击事件放到CSet里

新加Dialog

然后把id改成 IDD_SETMSGTYPE 这个

给它添加的控件

下拉框的属性

给它添加一个类

叫做CSetMsg

然后给下拉菜单添加一个变量

lstType

再给复选框添加一个变量

再给宏名称定义的输入框添加一个变量

再给消息名称输入框添加变量

然后菜单添加事件

增加

修改

删除

宏定义说明:

在调用发送消息的时候,会发送一个数字代表类型,这个宏定义就是用来决定接收那些类型的数据,这样的一个意思

效果图:

CSet.h文件的修改:新加 txtBool变量、nMsgSel变量(获取消息定义列表选中行)、OnAddMsgType函数(右键菜单里的增加按钮点击事件处理函数)、OnSetMsg函数(右键菜单里的修改按钮点击事件处理函数)、OnDelMsg函数(右键菜单里的删除按钮点击事件处理函数)、OnNMRClickList1函数(消息定义列表鼠标右击事件处理函数)、OnNMRClickList2函数(数据定义列表鼠标右击事件处理函数)

#pragma once
#include "CSetMsg.h"

// CSet 对话框

class CSet : public CDialogEx
{
	DECLARE_DYNAMIC(CSet)

public:
	CSet(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CSet();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_SET };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持	
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();

	DECLARE_MESSAGE_MAP()
public:
	CListCtrl lstMsgType;
	CListCtrl lstDataType;
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCancel();
	afx_msg void OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnAddMsgType();
public:
	CSetMsg wndMsgSet;
	CString txtBool[2]{ L"否", L"是" };
	int nMsgSel;
	afx_msg void OnSetMsg();
	afx_msg void OnDelMsg();
};

CSet.cpp文件的修改:新加 OnAddMsgType函数(右键菜单里的增加按钮点击事件处理函数)、OnSetMsg函数(右键菜单里的修改按钮点击事件处理函数)、OnDelMsg函数(右键菜单里的删除按钮点击事件处理函数),OnNMRClickList1函数(消息定义列表鼠标右击事件处理函数),OnNMRClickList2函数(数据定义列表鼠标右击事件处理函数)

// CSet.cpp: 实现文件
//

#include "pch.h"
#include "DataAnly.h"
#include "CSet.h"
#include "afxdialogex.h"
#include "extern_all.h"

// CSet 对话框

IMPLEMENT_DYNAMIC(CSet, CDialogEx)

CSet::CSet(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_SET, pParent)
{

}

CSet::~CSet()
{
}

void CSet::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, lstMsgType);
	DDX_Control(pDX, IDC_LIST2, lstDataType);
}

BOOL CSet::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	SetListView(&lstMsgType);
	SetListView(&lstDataType);
	
	lstMsgType.InsertColumn(0, L"名称", 0, 100);
	lstMsgType.InsertColumn(1, L"宏定义", 0, 100);
	lstMsgType.InsertColumn(2, L"类型", 0, 100); // 数据和文本,文本直接显示,数据有点复杂看之后实现位置
	lstMsgType.InsertColumn(3, L"输出到文件", 0, 100);

	lstDataType.InsertColumn(0, L"消息类型", 0, 100);
	lstDataType.InsertColumn(1, L"数据编号", 0, 100);
	lstDataType.InsertColumn(2, L"数据名称", 0, 100);
	lstDataType.InsertColumn(3, L"显示颜色", 0, 100);
	lstDataType.InsertColumn(4, L"输出到文件", 0, 100);
	lstDataType.InsertColumn(5, L"单独输出", 0, 100);

	return TRUE;
}


BEGIN_MESSAGE_MAP(CSet, CDialogEx)
	ON_BN_CLICKED(IDOK, &CSet::OnBnClickedOk)
	ON_BN_CLICKED(IDCANCEL, &CSet::OnBnClickedCancel)
	ON_NOTIFY(NM_RCLICK, IDC_LIST1, &CSet::OnNMRClickList1)
	ON_NOTIFY(NM_RCLICK, IDC_LIST2, &CSet::OnNMRClickList2)
	ON_COMMAND(ID_32771, &CSet::OnAddMsgType)
	ON_COMMAND(ID_32772, &CSet::OnSetMsg)
	ON_COMMAND(ID_32773, &CSet::OnDelMsg)
END_MESSAGE_MAP()


// CSet 消息处理程序


void CSet::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialogEx::OnOK();
}


void CSet::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialogEx::OnCancel();
}

int iii = 0;
void CSet::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	nMsgSel = p->iItem;
	/*
		GetMessagePos函数可以,获取光标位置
		返回值低16位是x,高16位是y
	*/
	DWORD dwPos = GetMessagePos();
	CPoint point(LOWORD(dwPos), HIWORD(dwPos));
	CMenu menu;
	menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
	CMenu* pop = menu.GetSubMenu(0);// 获取第一个菜单,也就是现在的消息设置这个菜单
	// 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
	pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
}


void CSet::OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	
	/*
	GetMessagePos函数可以,获取光标位置
	返回值低16位是x,高16位是y
*/
	DWORD dwPos = GetMessagePos();
	CPoint point(LOWORD(dwPos), HIWORD(dwPos));
	CMenu menu;
	menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
	CMenu* pop = menu.GetSubMenu(1);// 获取第一个菜单,也就是现在的消息设置这个菜单
	// 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
	pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}


void CSet::OnAddMsgType()
{
	if (wndMsgSet.DoModal() == IDOK) {
		lstMsgType.InsertItem(0, wndMsgSet.txtName);
		lstMsgType.SetItemText(0, 1, wndMsgSet.txtDefine);
		lstMsgType.SetItemText(0, 2, wndMsgSet.txtNameArys[wndMsgSet.lstType.GetCurSel()]);
		lstMsgType.SetItemText(0, 3, txtBool[wndMsgSet.IsTxt]);
	}
}


void CSet::OnSetMsg()
{
	if (nMsgSel > -1) {
		
		wndMsgSet.SetDatas(lstMsgType.GetItemText(nMsgSel, 0), lstMsgType.GetItemText(nMsgSel, 1), lstMsgType.GetItemText(nMsgSel, 2), lstMsgType.GetItemText(nMsgSel, 3));
		wndMsgSet.DoModal();
	}
}


void CSet::OnDelMsg()
{
	if (nMsgSel > -1) {
		lstMsgType.DeleteItem(nMsgSel);
	}
}

新加CSetMsg.cpp文件:

// CSetMsg.cpp: 实现文件
//

#include "pch.h"
#include "DataAnly.h"
#include "CSetMsg.h"
#include "afxdialogex.h"


// CSetMsg 对话框

IMPLEMENT_DYNAMIC(CSetMsg, CDialogEx)

CSetMsg::CSetMsg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_SETMSGTYPE, pParent)
	, IsTxt(FALSE)
	, txtDefine(_T(""))
	, txtName(_T(""))
{

}

CSetMsg::~CSetMsg()
{
}

void CSetMsg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_COMBO1, lstType);
	DDX_Check(pDX, IDC_CHECK1, IsTxt);
	DDX_Text(pDX, IDC_EDIT1, txtDefine);
	DDX_Text(pDX, IDC_EDIT3, txtName);
}

BOOL CSetMsg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	/*
	  下面的三行代码是给下拉菜单添加选项
		lstType.AddString(L"数据包");
		lstType.AddString(L"文字-ASCII");
		lstType.AddString(L"文字-UTF-16");
	*/
	lstType.AddString(txtNameArys[0]);
	lstType.AddString(txtNameArys[1]);
	lstType.AddString(txtNameArys[2]);
	lstType.SetCurSel(0); // 设置下拉菜单默认值
	return TRUE;
}


BEGIN_MESSAGE_MAP(CSetMsg, CDialogEx)
	ON_BN_CLICKED(IDOK, &CSetMsg::OnBnClickedOk)
END_MESSAGE_MAP()


// CSetMsg 消息处理程序


void CSetMsg::OnBnClickedOk()
{
	UpdateData(true);
	CDialogEx::OnOK();
}

void CSetMsg::SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt)
{
	txtName = _name;
	txtDefine = _define;
	int i = 0;
	for (int i = 0; i < 3; i++)
	{
		if (txtNameArys[i] == _Type) {
			break;
		}
	}
	if (i > 2)i = 0;
	lstType.SetCurSel(i);
	IsTxt = _IsTxt == L"是";
	UpdateData(false);
}

新加CSetMsg.h文件:

#pragma once


// CSetMsg 对话框

class CSetMsg : public CDialogEx
{
	DECLARE_DYNAMIC(CSetMsg)

public:
	CSetMsg(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CSetMsg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_SETMSGTYPE };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	virtual BOOL OnInitDialog();
	DECLARE_MESSAGE_MAP()
public:
	CComboBox lstType;
	BOOL IsTxt;
	afx_msg void OnBnClickedOk();
	CString txtDefine;
	CString txtName;
	CString txtNameArys[3]{ L"数据包", L"文字-ASCII", L"文字-UTF-16" };
	void SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库搭建11.2

数据库之搭建 1、rpm -qa|grep 服务名称 案例&#xff1a;rpm -qa|grep mysql 2、将所有msyql的包删除干净 删除方法&#xff1a; &#xff08;1&#xff09;yum remove mysql * 删除linux中的数据库 &#xff08;2&#xff09;yum erase 包名 &#xff0…

微前端之什么是微前端

什么是微前端 微前端分类 基于路由的微前端&#xff1a;组件化微前端&#xff1a;iframe嵌入式微前端&#xff1a; 优点缺点 动态加载/懒加载微前端&#xff1a;微应用容器化方案&#xff1a; 微前端解决方案 single-spa阿里巴巴 Cloud Alfaiframe 方案Web ComponentsModule Fe…

蓝桥杯-Set

目录 HashSet类常用方法 1 add(Object obj)方法 2 size() 方法 3 remove(Object obj)方法 4 contains()方法 5 clear() 方法 例题实战 set 一个不允许出现重复的元素&#xff0c;并且无序的集合&#xff0c;主要有HashSet实现类。 在判断重复元素的时候&#xff0c;Set集…

springcloud:3.5测试慢调用熔断降级

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…

java 中 string常用方法及相关的例子

我将为您详细讲解 Java 中 String 类的常用方法及其相关例子。String 类是 Java 中最常用的类之一&#xff0c;它代表字符串&#xff0c;提供了许多用于操作字符串的方法。 1. 字符串比较 - equals(Object obj): 比较字符串的内容是否相等。 - equalsIgnoreCase(String str): 比…

【官宣】2024广州国际酒店工程家具及商业空间展览会

2024广州国际酒店工程家具及商业空间展览会 Guangzhou International Hotel Engineering Furniture and commercial space exhibition 2024 时间&#xff1a;2024年12月19-21日 地点&#xff1a;中国进出口商品交易会展馆 承办单位&#xff1a;广州佛兴英耀展览服务有…

9.12零钱兑换(LC518-M)(开始完全背包,与01背包的不同仅在于遍历顺序)

算法&#xff1a; 这是一道典型的背包问题&#xff0c;一看到钱币数量不限&#xff0c;就知道这是一个完全背包。 但本题和纯完全背包不一样&#xff0c;纯完全背包是凑成背包最大价值是多少&#xff0c;而本题是要求凑成总金额的物品组合个数&#xff01; 动规五步曲&#…

[Redis]——数据一致性,先操作数据库,还是先更新缓存?

目录 一、操作缓存和数据库时有三个问题需要考虑&#xff1a; 1.删除缓存还是更新缓存&#xff1f; 2.如何保证缓存与数据库的操作同时成功或失效 3.先操作缓存还是先操作数据库&#xff08;多线程并发问题&#xff09; 二、 缓存更新的最佳策略 一、操作缓存和数据库时有…

网络学习:Vlan间路由

目录 一、vlan间路由实现的方法 二、精确匹配转发&#xff08;交换机&#xff09;流程 三、最长匹配转发&#xff08;路由器&#xff09; 四、交换机最长匹配转发 五、总结 一、vlan间路由实现的方法 方法1&#xff1a;使用路由器的物理接口 特点&#xff1a;在路由器上…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型&#xff0c;然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

Linux 之二:CentOS7 的 IP 常用命令和配置及 xshell 基本使用方法

1. 进入虚拟机 点击右键---进入终端--输入 ip adrr 或 ifconfig 查看ip地址 下面输入命令 ifconfig&#xff08;注意&#xff1a;不是 ipconfig &#xff09; 或 ip addr 来查看当前系统 IP 查看到IP 后&#xff0c;比如&#xff1a;上面是 192.168.184.137 1.1 IP 常用命令…

(文末送书)《低代码平台开发实践:基于React》

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…

LeetCode234.回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 输入&#xff1a;head [1,2] 输出&#xff1a;false 思…

mysql 时间精度问题

timestamp到2038年&#xff0c;还有14年时间&#xff0c;一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…

5. gin集成Gorm

文章目录 一&#xff1a;连接DB二&#xff1a;增删改查三&#xff1a;使用PostMan测试 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/24-gin-learning 本节主要介绍如何使用gin集成gorm&#xff0c;并完成用户的创建、修改、删除、查询等功能 …

使用Http请求下载文件带来的问题

java.io.IOException: Broken pipe 当使用http请求的方式将文件作为响应内容给浏览器&#xff0c;这个时候如果浏览器未开启自动下载(浏览器可能会终止这个tcp连接)&#xff0c;文件不会下载成功&#xff0c;但是这个时候请求已经到达服务器&#xff0c;如果这个时候&#xff0…

《Vite 报错》ReferenceError: module is not defined in ES module scope

ReferenceError: module is not defined in ES module scope 解决方案 postcss.config.js 要改为 postcss.config.cjs&#xff0c;也就是 .cjs 后缀。 原因解析 下图提示&#xff0c;packages.json 中的属性 type 设置为 module。所有 *.js 文件现在都被解释为 ESM&#xff…

数据结构(七)——线性表的基本操作

&#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609; 在csdn获奖荣誉: &#x1f3c6;csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ …

vscode c/c++ 检测到 #include 错误。请更新 includePath。

问题背景 使用vscode打开项目后&#xff0c;头文件显示红色波浪线&#xff0c;没有引入。 检测到 #include 错误。请更新 includePath。已为此翻译单元(xxx)禁用波形曲线。 解决方法 gcc -v -E -x c - 显示所有头文件路径。 打开c_cpp_properties.json文件&#xff0c;粘贴…

python+django+vue电影票订购系统dyvv4

电影院订票信息管理系统综合网络空间开发设计要求。目的是将电影院订票通过网络平台将传统管理方式转换为在网上操作&#xff0c;方便快捷、安全性高、交易规范做了保障&#xff0c;目标明确。电影院订票信息管理系统可以将功能划分为用户和管理员功能[10]。 语言&#xff1a;…