免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
上一个内容:101.游戏安全项目-创建人物对象结构
效果图:
以 101.游戏安全项目-创建人物对象结构 它的代码为基础进行修改
首先给编辑框添加一个变量
它的属性
htdMfcDll.cpp文件的修改
LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l)
{if (nCode == 0){if ((l & (1 << 31)) == 0){if (PtheApp->bal)PtheApp->bal->DisKeybord(w);switch (w){case VK_HOME:if (PtheApp->wndMain == NULL){PtheApp->wndMain = new CUI();PtheApp->wndMain->Create(IDD_MAIN);}if (PtheApp->bal == NULL) {PtheApp->bal = new CBAL(PtheApp->wndMain);}break;}}}return CallNextHookEx(keyHook, nCode, w, l);
}
CUIWnd_0.cpp文件的修改
void CUIWnd_0::ShowPlayerInfos(wchar_t* val)
{tctInfos = val;UpdateData(FALSE);
}
CUI.cpp文件的修改
void CUI::ShowInfos(wchar_t* val)
{CUIWnd_0* ui0 = (CUIWnd_0*)Pages[0];ui0->ShowPlayerInfos(val);
}
CGAME.cpp文件
#include "pch.h"
#include "CGAME.h"CGAME::CGAME()
{player = (PAIM)0x4cef08;
}
CBAL.cpp文件
#include "pch.h"
#include "CBAL.h"
CBAL* _balThis;
void _stdcall UIShow(HWND, UINT,UINT_PTR, DWORD) {if (_balThis)_balThis->ShowInfos();
}CBAL::CBAL(CUI* _ui)
{_balThis = this;ui = _ui; game = new CGAME();if(ui)SetTimer(ui->m_hWnd, 10000, 10, UIShow);
}void CBAL::DisKeybord(WPARAM w)
{switch (w){case VK_HOME:if (ui)ui->ShowWindow(_bui = !_bui);break;default:break;}
}void CBAL::ShowInfos()
{AIM* p = game->player;CStringA txt;txt.Format("昵称:[%s]\r\n", p->Name);CStringA txtInfoA;txtInfoA += txt;txt.Format("等级:[%d]\r\n", p->Level);txtInfoA += txt;txt.Format("经验:[%d/%d]\r\n", p->Exp, p->MaxExp);txtInfoA += txt;txt.Format("生命:[%d/%d]\r\n", p->HP, p->MAxHP);txtInfoA += txt;txt.Format("内力:[%d/%d]\r\n", p->MP, p->MaxMP);txtInfoA += txt;txt.Format("体力:[%d/%d]\r\n", p->TP, p->MaxTP);txtInfoA += txt;txt.Format("坐标:[x:%d y:%d]\r\n", p->x, p->y);txtInfoA += txt;CString txtW;txtW = txtInfoA;ui->ShowInfos(txtW.GetBuffer());
}
htdMfcDll.h文件
// htdMfcDll.h: htdMfcDll DLL 的主标头文件
//#pragma once#ifndef __AFXWIN_H__#error "在包含此文件之前包含 'pch.h' 以生成 PCH"
#endif#include "resource.h" // 主符号
#include "CUI.h"
#include "CBAL.h"// ChtdMfcDllApp
// 有关此类实现的信息,请参阅 htdMfcDll.cpp
//class ChtdMfcDllApp : public CWinApp
{
public:ChtdMfcDllApp();// 重写
public:virtual BOOL InitInstance();CUI* wndMain{};CBAL* bal{};DECLARE_MESSAGE_MAP()
};
CUIWnd_0.h文件
#pragma once
#include "afxdialogex.h"// CUIWnd_0 对话框class CUIWnd_0 : public CDialogEx
{DECLARE_DYNAMIC(CUIWnd_0)public:CUIWnd_0(CWnd* pParent = nullptr); // 标准构造函数virtual ~CUIWnd_0();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_PAGE_0 };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString tctInfos;void ShowPlayerInfos(wchar_t* val);afx_msg void OnEnChangeEdit1();
};
CUI.h文件
#pragma once
#include "afxdialogex.h"
//增加页面头文件
#include "CUIWnd_0.h"
#include "CUIWnd_1.h"
//游戏辅助UI类
// CUI 对话框
#define MAX_PAGE_MAIN 3
class CUI : public CDialogEx
{DECLARE_DYNAMIC(CUI)public:CUI(CWnd* pParent = nullptr); // 标准构造函数virtual ~CUI();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MAIN };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()CDialogEx* Pages[MAX_PAGE_MAIN];short CurPage = 0;
public:CTabCtrl mTab;virtual BOOL OnInitDialog();bool InstallPage(CDialogEx* wnd, int IDD_WND, CString&& _Name, BOOL IsShow=FALSE);afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult);void ShowInfos(wchar_t* val);
};
CGAME.h文件
#pragma once
#include <htdHook2.h>
#include "AIM.h"
//游戏底层对接类
class CGAME
{
public:CGAME();PAIM player;htd::hook::htdHook2 hook;
};
AIM.h文件
#pragma once
typedef class AIM {int unknownB1[4];
public:int HP; // 生命值int MAxHP; // 最大生命值int TP; // 体力int MaxTP; // 最大体力int MP; // 内力int MaxMP; // 最大内力int Act; // 攻击力int Def; // 防御力int SF; // 身法int Level; // 等级
protected:int unknownB31;
public:int Exp; // 经验值int MaxExp; // 最大经验值
protected:int unknownB37[2];
public:int Face; // 面向
protected:int unknownB46[2];
public:int x; // x坐标int y; // y坐标
protected:int unknownB43[36];
public :char Name[32]; // 名称char Body[32]; // 身体配置char Die[32]; // 尸体
protected:int unknownB58[16];int unknownB52[475];}*PAIM;
CBAL.h文件
#pragma once
//游戏外挂逻辑类
#include "CUI.h"
#include "CGAME.h"
class CBAL
{CUI* ui;bool _bui{};CGAME* game;
public:CBAL(CUI* _ui = nullptr) ;~CBAL() {};void DisKeybord(WPARAM w);void ShowInfos();
};