自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)

买东西 会有红字 购买成功字样

自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)_第1张图片

发现怎么改都改不了,按道理只要这个要显示 内存里都是有的

但这个东西内存里有 就是改不了 有可能这个内容是服务器发送过来的

这个地方通过封包的函数还是可以处理掉的

还可以试试看改写,但看了看发现不行。

但这个红色公告和之前的普通公告都是类似的,都是显示公告

在这下断点看看有没有被触发,发现没有,就往下找,这地方是生成类的 

自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)_第2张图片

在这儿下断 

买个东西 发现触发了断点  ,然后往上找 看看他对数据的调用是什么样的

自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)_第3张图片

发现到了这个地方  和之前白色公告返回的地方非常像  来对比一下:

自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)_第4张图片

 不同的地方也就是 14  和 23 的去区别

在白色公告这改成14试试

发现公告变成了红色 

再看看红字函数的调用情况

自动化助手的添加(红字公告的逆向分析&C++实现函数调用以及菜单呼出)_第5张图片

这是他的调用过程 

对比发现所属的类都是一样的  两个函数调用的方式都是一样的

再找红字公告栏  直接ret 调红字函数发现公告栏还显示,那么还要再找这个公告栏函数

通过观察参数发现是

 分析发现ebp表示公告的 颜色RGB表示

再用C++来实现分析好的函数

定义:

#pragma once
#include"SRO_String.h"
typedef class Notice
{
	typedef void (Notice::* PROC_PSROSTR)(PSROSTRING);
	typedef void (Notice::* PROC_D_WSTR_D_D)(int, wchar_t*, int, int);
public:
	static PROC_PSROSTR _NormalNotice;//公告函数
	static PROC_PSROSTR _NetNotice; //server公告
	static PROC_D_WSTR_D_D  _ChatNotice;//聊天框公告
public:
	void NormalNotice(PSROSTRING _txt);
	void NetNotice(PSROSTRING _txt);
	void ChatNotice( wchar_t* _txt, int color=0xFFFFAEC3,int type1=0x03, int type2=0x01);


}*PNotice;

实现:

#include "pch.h"
#include "Notice.h"

Notice::PROC_PSROSTR		Notice::_NormalNotice{};//公告函数
Notice::PROC_PSROSTR		Notice::_NetNotice{};
Notice::PROC_D_WSTR_D_D		Notice::_ChatNotice{};//聊天框公告

void Notice::NormalNotice(PSROSTRING _txt)
{
	(this->*_NormalNotice)(_txt);
}

void Notice::NetNotice(PSROSTRING _txt)
{
	(this->*_NetNotice)(_txt);
}

//type1 0x3   type2 0x01
void Notice::ChatNotice(wchar_t* _txt, int color, int type1, int type2)
{
	(this->*_ChatNotice)( type1,_txt, color, type2);
}

再调整初始化位置:

就可以发现 

 功能已经完成了调用

在对接游戏菜单:

	_pgamebase->Init();
	DWORD* desp = (DWORD*)_ESP;
	if (vip)
	{
		_ui->UIShow();
		return false;
	}
	else
	{
		if (desp[1] == 1)
		{
			_pgamebase->SRO_Notice->NetNotice(&vip_notice);
			_pgamebase->SRO_Notice->ChatNotice(vip_notice.wcstr(), 0xFFFF0000);
			_pgamebase->SRO_Notice->NormalNotice(&vip_notice);
		}
		
		return true;
	}

来呼出界面

发现窗口关闭的时候 如果是点 × 来关闭无法触发标志位变化

就要添加消息响应就OK了 

你可能感兴趣的:(c++,安全)