买东西 会有红字 购买成功字样
发现怎么改都改不了,按道理只要这个要显示 内存里都是有的
但这个东西内存里有 就是改不了 有可能这个内容是服务器发送过来的
这个地方通过封包的函数还是可以处理掉的
还可以试试看改写,但看了看发现不行。
但这个红色公告和之前的普通公告都是类似的,都是显示公告
在这下断点看看有没有被触发,发现没有,就往下找,这地方是生成类的
在这儿下断
买个东西 发现触发了断点 ,然后往上找 看看他对数据的调用是什么样的
发现到了这个地方 和之前白色公告返回的地方非常像 来对比一下:
不同的地方也就是 14 和 23 的去区别
在白色公告这改成14试试
发现公告变成了红色
再看看红字函数的调用情况
这是他的调用过程
对比发现所属的类都是一样的 两个函数调用的方式都是一样的
再找红字公告栏 直接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了