免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
上一个内容: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_TIME
enum { IDD = IDD_PAGE_0 };
#endif
protected:
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_TIME
enum { IDD = IDD_MAIN };
#endif
protected:
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();
};