19.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据类型配置功能的实现

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

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

上一个内容:18.数据分析工具数据与消息配置的实现

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

码云版本号:440645b4b825f730ffe847ce06c253820f35f41f

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

以 18.数据分析工具数据与消息配置的实现 它的代码为基础进行修改

删除下图中的添加菜单

只保留修改和删除

然后在给第一个菜单下,添加创建消息数据,如下图

添加一个事件处理

新加一个Dialog

控件

设置过的属性

给Dialog添加类

添加变量

消息名称添加变量

数据编号添加变量:txtId

然后发现多了一个数据编号,然后把它给删了,删除之后的Dialog

数据名称添加变量

背景颜色添加变量

字体颜色添加变量

输出到日志文件添加变量:IsTxt

单独输出到文件添加变量:IsTxtAlone

这里漏掉一个选项,输出到列表显示,添加变量 IsShowUI

效果图:

新加CSetData.cpp文件

// CSetData.cpp: 实现文件
//#include "pch.h"
#include "DataAnly.h"
#include "CSetData.h"
#include "afxdialogex.h"// CSetData 对话框IMPLEMENT_DYNAMIC(CSetData, CDialogEx)CSetData::CSetData(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_SETDATA, pParent), txtName(_T("")), txtId(_T("")), txtDataName(_T("")), txtBackColor(_T("")), txtFontColor(_T("")), IsTxt(FALSE), IsTxtAlone(FALSE)
{}CSetData::~CSetData()
{
}void CSetData::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT3, txtName);DDX_Text(pDX, IDC_EDIT1, txtId);DDX_Text(pDX, IDC_EDIT2, txtDataName);DDX_Text(pDX, IDC_EDIT5, txtBackColor);DDX_Text(pDX, IDC_EDIT6, txtFontColor);DDX_Check(pDX, IDC_CHECK1, IsTxt);DDX_Check(pDX, IDC_CHECK2, IsTxtAlone);DDX_Control(pDX, IDC_CHECK3, IsShowUI);
}BEGIN_MESSAGE_MAP(CSetData, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CSetData::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON6, &CSetData::OnBnClickedButton6)
END_MESSAGE_MAP()// CSetData 消息处理程序void CSetData::OnBnClickedButton1()
{/*颜色选择Dialog对象*/CColorDialog color;color.m_cc.Flags |= CC_RGBINIT;/*color.DoModal() 打开一个颜色选择对话框*/if (color.DoModal() == IDOK) {txtBackColor.Format(L"%X", color.m_cc.rgbResult);UpdateData(false);}
}void CSetData::OnBnClickedButton6()
{/*颜色选择Dialog对象
*/CColorDialog color;color.m_cc.Flags |= CC_RGBINIT;/*color.DoModal() 打开一个颜色选择对话框*/if (color.DoModal() == IDOK) {txtFontColor.Format(L"%X", color.m_cc.rgbResult);UpdateData(false);}
}

新加CSetData.h文件

#pragma once// CSetData 对话框class CSetData : public CDialogEx
{DECLARE_DYNAMIC(CSetData)public:CSetData(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CSetData();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_SETDATA };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString txtName;CString txtId;CString txtDataName;CString txtBackColor;CString txtFontColor;BOOL IsTxt;BOOL IsTxtAlone;CButton IsShowUI;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton6();
};

CSet.cpp文件的修改:修改了 OnSetMsg函数,新加 OnAddDataType函数(它是菜单创建消息数据的鼠标单击处理函数)

// 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)ON_COMMAND(ID_32777, &CSet::OnAddDataType)
END_MESSAGE_MAP()// CSet 消息处理程序void CSet::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnOK();
}void CSet::OnBnClickedCancel()
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnCancel();
}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.txtTypeName);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)==L"是");if (wndMsgSet.DoModal() == IDOK) {lstMsgType.SetItemText(nMsgSel, 0, wndMsgSet.txtName);lstMsgType.SetItemText(nMsgSel, 1, wndMsgSet.txtDefine);lstMsgType.SetItemText(nMsgSel, 2, wndMsgSet.txtTypeName);lstMsgType.SetItemText(nMsgSel, 3, txtBool[wndMsgSet.IsTxt]);}}
}void CSet::OnDelMsg()
{if (nMsgSel > -1) {lstMsgType.DeleteItem(nMsgSel);}
}void CSet::OnAddDataType()
{if (nMsgSel > -1) {wndDataSet.DoModal();}
}

CSet.h文件的修改:新加 OnAddDataType函数,nMsgSel变量

#pragma once
#include "CSetMsg.h"
#include "CSetData.h"// CSet 对话框class CSet : public CDialogEx
{DECLARE_DYNAMIC(CSet)public:CSet(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CSet();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_SET };
#endifprotected: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;CSetData wndDataSet;CString txtBool[2]{ L"否", L"是" };int nMsgSel; // 消息定义列表选中行索引afx_msg void OnSetMsg();afx_msg void OnDelMsg();afx_msg void OnAddDataType();
};

CSetMsg.cpp文件的修改:修改了 SetDatas函数、OnInitDialog函数

// 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(nsel); // 设置下拉菜单默认值return TRUE;
}BEGIN_MESSAGE_MAP(CSetMsg, CDialogEx)ON_BN_CLICKED(IDOK, &CSetMsg::OnBnClickedOk)
END_MESSAGE_MAP()// CSetMsg 消息处理程序void CSetMsg::OnBnClickedOk()
{UpdateData(true);txtTypeName = txtNameArys[lstType.GetCurSel()];CDialogEx::OnOK();
}void CSetMsg::SetDatas(CString& _name, CString& _define, CString& _Type, bool _IsTxt)
{txtName = _name;txtDefine = _define;int i = 0;for (i = 0; i < 3; i++){if (txtNameArys[i] == _Type) {break;}}if (i > 2)i = 0;IsTxt = _IsTxt;nsel = i;//lstType.SetCurSel(i);// UpdateData(false);
}

CSetMsg.h文件的修改:新加 nsel变量,修改SetDatas函数

#pragma once// CSetMsg 对话框class CSetMsg : public CDialogEx
{DECLARE_DYNAMIC(CSetMsg)public:CSetMsg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CSetMsg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_SETMSGTYPE };
#endifprotected: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 txtTypeName;CString txtNameArys[3]{ L"数据包", L"文字-ASCII", L"文字-UTF-16" };void SetDatas(CString& _name, CString& _define, CString& _Type, bool _IsTxt);int nsel; // 消息定义选中行里的类型列的值
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos9环境部署MySQL的PXC

前期理解 pxc就是将多个mysql数据库整合为一个集群&#xff0c;每台服务器上的mysql数据库会实时同步&#xff0c;而且节点与节点之间&#xff0c;他们相互的关系是对等的。PXC 最关注的是数据的一致性&#xff0c;对待事物的行为时&#xff0c;要么在所有节点上执行&#xff…

练习 5 Web [GXYCTF2019]BabyUpload

[GXYCTF2019]BabyUpload 猜测直接上传txt会被过滤&#xff0c;提示“上传类型也太露骨了吧&#xff01;”按经验传入一个"muma.phtml" 提示过滤了“ph”相关的后缀 传入muma.jpg等图像格式&#xff0c;提示表明复原并检测了文件内容 审查文件后缀Context-type 不能…

SSD LDPC软错误探测方案解读

上一篇文档中,基于SSD LDPC(Low-Density Parity-Check Codes)原理背景和纠错能力作了简单的介绍。 扩展阅读: 关于SSD LDPC纠错能力的基础探究 浅析LDPC软解码对SSD延迟的影响 本篇结合SMI发布的研究成果,通过SSD控制内部LDPC更底层的架构,来解读如何增强软错误探测能力…

外包干了8天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

java017 - Java抽象类

1、概述 一般情况&#xff0c;动物是抽象的&#xff0c;所以不能被new,比如你在Animal类中定义一个成员方法eat,你不能定义具体内容&#xff0c;比如吃鱼或者吃白菜&#xff0c;因为动物是抽象的。 一个没有方法体的方法&#xff0c;应该定义为抽象方法&#xff0c;而类中如果…

应用层协议--HTTP

目录 一.HTTP是什么&#xff1f; 二.HTTP的请求和响应 a.请求&#xff1a; b.响应&#xff1a; 三.URL 四.Header 1.Host 2. Content-Length 3. Content-Type a. 请求 b. 响应 4. Referer 5. User-Agent 6. Cookie 一.HTTP是什么&#xff1f; HTTP是一种应用层协议&#xff0c…

2024-3-7 市场分歧视角

昨天安奈儿市场带领市场情绪一致&#xff0c;新型工业化方向独占鳌头&#xff0c;日内高潮节点尾盘老龙 克来机电涨停&#xff0c;昨晚很多老师在YY老龙是不是要二波了&#xff0c;呵呵。 今天市场分歧从竞价就开始了&#xff0c;隔夜单我记忆中 天奇股份88亿&#xff0c;上海…

Leetcode 239:滑动窗口最大值

题意 大小为 k 的滑动窗口从整数数组 nums 的最左侧移到最右侧&#xff0c;只能看到滑动窗口中的 k 个数字&#xff0c;窗口每次向右移动一位。 返回滑动窗口的最大值。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输出&#xff1a;[3,3,5,5,6,7] …

网工内推 | 上市公司售前,大专以上即可,最高15K*13薪,补贴多

01 北京神州新桥科技有限公司 招聘岗位&#xff1a;售前工程师 职责描述&#xff1a; 1、完成项目的售前技术支持工作&#xff1b; 2、 配合销售进行新产品及解决方案的推广工作&#xff1b; 3、 配合销售完成用户的售前技术交流方案准备、现场技术交流、技术方案宣讲等工作…

如何在小程序中绑定身份证

在小程序中绑定身份证信息是一项常见的需求&#xff0c;特别是在需要进行实名认证或者身份验证的场景下。通过绑定身份证信息&#xff0c;可以提高用户身份的真实性和安全性&#xff0c;同时也为小程序提供了更多的个性化服务和功能。下面就介绍一下怎么在小程序中绑定居民身份…

几何工具的使用

Geometry - Creation 创建几何 CogCreateCircleTool&#xff1a;创建圆CogCreateEllipseTool:创建椭圆CogCreateLineBisectPointsTool&#xff1a;带有两个点的平行线CogCreateLineParallelTool:在某一点创建某条线的平行线CogCreateLinePerpendicularTool:在某一点创建某条线…

JVM内存分配机制

JVM内存分配机制 对象的创建 对象创建的主要流程 1.类加载检查 虚拟机遇到一条new的指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相…