当前位置:   article > 正文

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

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函数(数据定义列表鼠标右击事件处理函数)

  1. #pragma once
  2. #include "CSetMsg.h"
  3. // CSet 对话框
  4. class CSet : public CDialogEx
  5. {
  6. DECLARE_DYNAMIC(CSet)
  7. public:
  8. CSet(CWnd* pParent = nullptr); // 标准构造函数
  9. virtual ~CSet();
  10. // 对话框数据
  11. #ifdef AFX_DESIGN_TIME
  12. enum { IDD = IDD_SET };
  13. #endif
  14. protected:
  15. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  16. // 生成的消息映射函数
  17. virtual BOOL OnInitDialog();
  18. DECLARE_MESSAGE_MAP()
  19. public:
  20. CListCtrl lstMsgType;
  21. CListCtrl lstDataType;
  22. afx_msg void OnBnClickedOk();
  23. afx_msg void OnBnClickedCancel();
  24. afx_msg void OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult);
  25. afx_msg void OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult);
  26. afx_msg void OnAddMsgType();
  27. public:
  28. CSetMsg wndMsgSet;
  29. CString txtBool[2]{ L"否", L"是" };
  30. int nMsgSel;
  31. afx_msg void OnSetMsg();
  32. afx_msg void OnDelMsg();
  33. };

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

  1. // CSet.cpp: 实现文件
  2. //
  3. #include "pch.h"
  4. #include "DataAnly.h"
  5. #include "CSet.h"
  6. #include "afxdialogex.h"
  7. #include "extern_all.h"
  8. // CSet 对话框
  9. IMPLEMENT_DYNAMIC(CSet, CDialogEx)
  10. CSet::CSet(CWnd* pParent /*=nullptr*/)
  11. : CDialogEx(IDD_SET, pParent)
  12. {
  13. }
  14. CSet::~CSet()
  15. {
  16. }
  17. void CSet::DoDataExchange(CDataExchange* pDX)
  18. {
  19. CDialogEx::DoDataExchange(pDX);
  20. DDX_Control(pDX, IDC_LIST1, lstMsgType);
  21. DDX_Control(pDX, IDC_LIST2, lstDataType);
  22. }
  23. BOOL CSet::OnInitDialog()
  24. {
  25. CDialogEx::OnInitDialog();
  26. SetListView(&lstMsgType);
  27. SetListView(&lstDataType);
  28. lstMsgType.InsertColumn(0, L"名称", 0, 100);
  29. lstMsgType.InsertColumn(1, L"宏定义", 0, 100);
  30. lstMsgType.InsertColumn(2, L"类型", 0, 100); // 数据和文本,文本直接显示,数据有点复杂看之后实现位置
  31. lstMsgType.InsertColumn(3, L"输出到文件", 0, 100);
  32. lstDataType.InsertColumn(0, L"消息类型", 0, 100);
  33. lstDataType.InsertColumn(1, L"数据编号", 0, 100);
  34. lstDataType.InsertColumn(2, L"数据名称", 0, 100);
  35. lstDataType.InsertColumn(3, L"显示颜色", 0, 100);
  36. lstDataType.InsertColumn(4, L"输出到文件", 0, 100);
  37. lstDataType.InsertColumn(5, L"单独输出", 0, 100);
  38. return TRUE;
  39. }
  40. BEGIN_MESSAGE_MAP(CSet, CDialogEx)
  41. ON_BN_CLICKED(IDOK, &CSet::OnBnClickedOk)
  42. ON_BN_CLICKED(IDCANCEL, &CSet::OnBnClickedCancel)
  43. ON_NOTIFY(NM_RCLICK, IDC_LIST1, &CSet::OnNMRClickList1)
  44. ON_NOTIFY(NM_RCLICK, IDC_LIST2, &CSet::OnNMRClickList2)
  45. ON_COMMAND(ID_32771, &CSet::OnAddMsgType)
  46. ON_COMMAND(ID_32772, &CSet::OnSetMsg)
  47. ON_COMMAND(ID_32773, &CSet::OnDelMsg)
  48. END_MESSAGE_MAP()
  49. // CSet 消息处理程序
  50. void CSet::OnBnClickedOk()
  51. {
  52. // TODO: 在此添加控件通知处理程序代码
  53. CDialogEx::OnOK();
  54. }
  55. void CSet::OnBnClickedCancel()
  56. {
  57. // TODO: 在此添加控件通知处理程序代码
  58. CDialogEx::OnCancel();
  59. }
  60. int iii = 0;
  61. void CSet::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
  62. {
  63. LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  64. // TODO: 在此添加控件通知处理程序代码
  65. *pResult = 0;
  66. nMsgSel = p->iItem;
  67. /*
  68. GetMessagePos函数可以,获取光标位置
  69. 返回值低16位是x,高16位是y
  70. */
  71. DWORD dwPos = GetMessagePos();
  72. CPoint point(LOWORD(dwPos), HIWORD(dwPos));
  73. CMenu menu;
  74. menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
  75. CMenu* pop = menu.GetSubMenu(0);// 获取第一个菜单,也就是现在的消息设置这个菜单
  76. // 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
  77. pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
  78. }
  79. void CSet::OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult)
  80. {
  81. LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  82. // TODO: 在此添加控件通知处理程序代码
  83. *pResult = 0;
  84. /*
  85. GetMessagePos函数可以,获取光标位置
  86. 返回值低16位是x,高16位是y
  87. */
  88. DWORD dwPos = GetMessagePos();
  89. CPoint point(LOWORD(dwPos), HIWORD(dwPos));
  90. CMenu menu;
  91. menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
  92. CMenu* pop = menu.GetSubMenu(1);// 获取第一个菜单,也就是现在的消息设置这个菜单
  93. // 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
  94. pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
  95. }
  96. void CSet::OnAddMsgType()
  97. {
  98. if (wndMsgSet.DoModal() == IDOK) {
  99. lstMsgType.InsertItem(0, wndMsgSet.txtName);
  100. lstMsgType.SetItemText(0, 1, wndMsgSet.txtDefine);
  101. lstMsgType.SetItemText(0, 2, wndMsgSet.txtNameArys[wndMsgSet.lstType.GetCurSel()]);
  102. lstMsgType.SetItemText(0, 3, txtBool[wndMsgSet.IsTxt]);
  103. }
  104. }
  105. void CSet::OnSetMsg()
  106. {
  107. if (nMsgSel > -1) {
  108. wndMsgSet.SetDatas(lstMsgType.GetItemText(nMsgSel, 0), lstMsgType.GetItemText(nMsgSel, 1), lstMsgType.GetItemText(nMsgSel, 2), lstMsgType.GetItemText(nMsgSel, 3));
  109. wndMsgSet.DoModal();
  110. }
  111. }
  112. void CSet::OnDelMsg()
  113. {
  114. if (nMsgSel > -1) {
  115. lstMsgType.DeleteItem(nMsgSel);
  116. }
  117. }

新加CSetMsg.cpp文件:

  1. // CSetMsg.cpp: 实现文件
  2. //
  3. #include "pch.h"
  4. #include "DataAnly.h"
  5. #include "CSetMsg.h"
  6. #include "afxdialogex.h"
  7. // CSetMsg 对话框
  8. IMPLEMENT_DYNAMIC(CSetMsg, CDialogEx)
  9. CSetMsg::CSetMsg(CWnd* pParent /*=nullptr*/)
  10. : CDialogEx(IDD_SETMSGTYPE, pParent)
  11. , IsTxt(FALSE)
  12. , txtDefine(_T(""))
  13. , txtName(_T(""))
  14. {
  15. }
  16. CSetMsg::~CSetMsg()
  17. {
  18. }
  19. void CSetMsg::DoDataExchange(CDataExchange* pDX)
  20. {
  21. CDialogEx::DoDataExchange(pDX);
  22. DDX_Control(pDX, IDC_COMBO1, lstType);
  23. DDX_Check(pDX, IDC_CHECK1, IsTxt);
  24. DDX_Text(pDX, IDC_EDIT1, txtDefine);
  25. DDX_Text(pDX, IDC_EDIT3, txtName);
  26. }
  27. BOOL CSetMsg::OnInitDialog()
  28. {
  29. CDialogEx::OnInitDialog();
  30. /*
  31. 下面的三行代码是给下拉菜单添加选项
  32. lstType.AddString(L"数据包");
  33. lstType.AddString(L"文字-ASCII");
  34. lstType.AddString(L"文字-UTF-16");
  35. */
  36. lstType.AddString(txtNameArys[0]);
  37. lstType.AddString(txtNameArys[1]);
  38. lstType.AddString(txtNameArys[2]);
  39. lstType.SetCurSel(0); // 设置下拉菜单默认值
  40. return TRUE;
  41. }
  42. BEGIN_MESSAGE_MAP(CSetMsg, CDialogEx)
  43. ON_BN_CLICKED(IDOK, &CSetMsg::OnBnClickedOk)
  44. END_MESSAGE_MAP()
  45. // CSetMsg 消息处理程序
  46. void CSetMsg::OnBnClickedOk()
  47. {
  48. UpdateData(true);
  49. CDialogEx::OnOK();
  50. }
  51. void CSetMsg::SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt)
  52. {
  53. txtName = _name;
  54. txtDefine = _define;
  55. int i = 0;
  56. for (int i = 0; i < 3; i++)
  57. {
  58. if (txtNameArys[i] == _Type) {
  59. break;
  60. }
  61. }
  62. if (i > 2)i = 0;
  63. lstType.SetCurSel(i);
  64. IsTxt = _IsTxt == L"是";
  65. UpdateData(false);
  66. }

新加CSetMsg.h文件:

  1. #pragma once
  2. // CSetMsg 对话框
  3. class CSetMsg : public CDialogEx
  4. {
  5. DECLARE_DYNAMIC(CSetMsg)
  6. public:
  7. CSetMsg(CWnd* pParent = nullptr); // 标准构造函数
  8. virtual ~CSetMsg();
  9. // 对话框数据
  10. #ifdef AFX_DESIGN_TIME
  11. enum { IDD = IDD_SETMSGTYPE };
  12. #endif
  13. protected:
  14. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  15. virtual BOOL OnInitDialog();
  16. DECLARE_MESSAGE_MAP()
  17. public:
  18. CComboBox lstType;
  19. BOOL IsTxt;
  20. afx_msg void OnBnClickedOk();
  21. CString txtDefine;
  22. CString txtName;
  23. CString txtNameArys[3]{ L"数据包", L"文字-ASCII", L"文字-UTF-16" };
  24. void SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt);
  25. };

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号