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

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

上一个内容: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);
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中医舌苔笔记

舌诊时按照舌尖-舌中-舌根-舌侧的顺序进行观察。 先看舌体再看舌苔&#xff0c;30秒左右。 如果一次望舌判断不清&#xff0c;可令病人休息3~5分钟后&#xff0c;重新观察一次 舌诊脏腑部位分属图 舌体 胖嫩而边有齿痕为气虚、阳虚。 薄白而润为风寒&#xff1b; 薄白而燥…

CVE-2020-27194:eBPF verifier 整数截断导致的越界读写

前言 影响版本&#xff1a;5.8.x 内核分支&#xff0c;v5.8.15 以及更低的版本 编译选项&#xff1a;CONFIG_BPF_SYSCALL&#xff0c;config 所有带 BPF 字样的编译选项 漏洞概述&#xff1a;eBPF 验证程序中进行 or 操作时&#xff0c;scalar32_min_max_or 函数将 64 位的值赋…

Android开发社招面试总结,Android程序员面试必备的知识点

导语 学历永远是横在我们进人大厂的一道门槛&#xff0c;好像无论怎么努力&#xff0c;总能被那些985,211 按在地上摩擦&#xff01; 不仅要被“他们”看不起&#xff0c;在HR挑选简历&#xff0c;学历这块就直接被刷下去了&#xff0c;连证明自己的机会也没有&#xff0c;学…

社区分享|中华保险基于MeterSphere开展接口自动化测试

中华联合保险集团股份有限公司&#xff08;以下简称为“中华保险”&#xff09;始创于1986年&#xff0c;是全国唯一一家以“中华”冠名的国有控股保险公司。截至2022年12月底&#xff0c;中华保险总资产为1006.06亿元&#xff0c;在全国拥有超过2900个营业网点&#xff0c;员工…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

模仿Gitee实现站外链接跳转时进行确认

概述 如Gitee等网站&#xff0c;在有外部链接的时候如果不是同域则会出现一个确认页面。本文就带你看看这个功能应该如何实现。 效果 实现 1. 实现思路 将打开链接作为参数传递给一个中间页面&#xff0c;在页面加载的时候判断链接的域名和当前网站是否同域&#xff0c;同域…

web学习笔记(二十六)

目录 1.JS执行队列 1.1JS是单线程 1.2Web Worker 1.3同步和异步 1.4JS执行机制 2.location对象 2.1什么是location对象 2.2url包含的信息 2.3location对象属性 2.4location对象的方法 3.navigator对象和history对象 3.1navigator对象 3.2history对象 1.JS执行队…

基于深度学习的苹果叶片病害检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 可以任意更换主干结构&#xff0c;支持几百种网络主干。 数据集&#xff1a;     网上下载的数据集&#x…

Jmeter吞吐量控制器使用

场景&#xff1a;在同一个线程组里&#xff0c;有10个并发&#xff0c;7个做A业务&#xff0c;3个做B业务&#xff0c;要模拟这种场景&#xff0c;可以通过吞吐量模拟器来实现。 添加吞吐量控制器 用法1&#xff1a;Percent Executions 在一个线程组内分别建立两个吞吐量控制…

rtt的io设备框架面向对象学习-电阻屏LCD设备

目录 1.8080电阻屏LCD设备1.1 构造流程1.2 使用 2.spi电阻屏LCD3.i2c电阻屏LCD4.总结 电阻屏LCD通信接口有支持I2c、SPI和8080通信接口的&#xff0c;根据通信接口分立章节。 另外&#xff0c;lcd这块不像其他设备类&#xff0c;rtt没有实现lcd设备类的设备驱动框架层&#xf…

我们发布了一款类Wox和Alfred,全新的桌面端效率工具RunFlow,欢迎大家来体验

RunFlow是一款跨平台的生产力工具&#xff0c;可以启动应用程序和搜索文件等&#xff0c;类似于Windows平台的Wox和PowerToys&#xff0c;同样也类似于Mac平台的Alfred和Raycast。但我们并不与这些工具相同&#xff0c;我们有自己独特的新特性。下面&#xff0c;我们将向您详细…

仙宫云:细节控ComfyUI AI写实摄影+视频镜像

在使用comfyui工作流时经常遇到插件安装&#xff0c;模型下载的问题&#xff0c;为了方便大家使用和体验comfyui&#xff0c;我在仙宫云上部署了一个云端comfyui镜像包&#xff0c;开放给大家使用。 细节控ComfyUI AI写实摄影视频工作流&#xff1a; 镜像主页&#xff1a;仙宫…

Stable Diffusion V3测评

1.引言 3月5号&#xff0c;Stability AI发布了介绍Stable Diffusion V3的研究论文&#xff0c;链接地址&#xff1a;戳我 这是目前他们发布的最先进、功能最强大的图像生成器&#xff0c;与一年多前发布的令人印象深刻的 Stable Diffusion V2.1 相比有了大幅升级。SD3所带来的…

机器视觉 /从bottle.hdev示例程序开启HalconHDevelop征程

文章目录 概述示例程序bottle.hdev源码Step 0: PreparationsStep 1: Segmentation - 读取并显示图片Step 1: Segmentation - 创建并设置OCR模型Step 1: Segmentation - 文本分割与识别计算结果显示内存释放 导出为C代码导出为C代码配置 VS Halcon 环境VS程序执行结果HTuple hv…

代码随想录day13(1)栈与队列:用栈实现队列(leetcode232)

题目要求&#xff1a;使用栈实现push、pop、empty、peek&#xff08;返回队列首部元素&#xff09;。 思路&#xff1a;本题思路比较容易&#xff0c;即用两个栈模拟即可&#xff0c;pop时只需要先判断stackout栈是否为空&#xff0c;如果不空直接弹出&#xff0c;如果空就将s…

数据库-ER图教程

一.什么是E-R图 E-R图全称&#xff1a;“Entity-Relationship Approach”&#xff0c;是一种“实体-联系”方法。 E-R图的优点&#xff1a; 1.自然地描述现实世界。 2.图形结构简单。 3.设计者和用户易理解。 4.是数据库设计的中间步骤&#xff0c;易于向数据模型转换。 …

SSM框架,SSM框架的整合

SSM整合的介绍 微观&#xff1a;将Spring SpringMVC Mybatis框架应用到项目中 SpringMVC框架负责控制层Spring 框架负责整体和业务层的声明式事务管理MyBatis框架负责数据库访问层 宏观&#xff1a;Spring接管一切&#xff08;将框架核心组件交给Spring进行IoC管理&#xff09…

贝叶斯:最大似然估计与最大后验估计

最大似然估计 最大后验估计 《神经网络与深度学习》 Neural Networks and Deep Learning 邱锡鹏 P36-37

网康科技 NS-ASG 应用安全网关 SQL注入漏洞复现(CVE-2024-2022)

0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品,集成了SSL和IPSec,旨在保障业务访问的安全性,适配所有移动终端,提供多种链路均衡和选择技术,支持多种认证方式灵活组合,以及内置短信认证、LDAP令牌、USB KEY等多达13种认证方式。 0x02 漏洞概述 …

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

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