如果没有工具我们就创造工具
一个数据包是怎么组织、解读的,可以通过逆向分析去分析,但是通过逆向分析去分析只适用于一两个数据,大量的数据分析的话成本太高了。
技术这个东西从语法会了,再到追求技巧,代码怎么写速度快,再往后就开始追求感觉上的东西,到后面看一眼,猜一下,就能知道个八九不离十。--第六感
拿到一段数据,客户端解读,不同的数据客户端解读方式不太可能不一样,有解读方式那肯定要有解读的图纸,没有提前的规划那也要有系统性的解读
- 如果用的是图纸:A数据包用的a号图纸去解读 把这个数据包定义成结构体,放到结构体里就行,拿到结构体的定义就行了
- 系统性方法: 我们就要将系统性的方法破解出来,写成算法,然后用这种系统性的方法去还原数据,组织数据
正常拿个文本去看也没啥问题,但就是比较累
分析工具的设计
- 显示通信数据包内容,根据数据包类型进行分别显示
- 能够显示鼠标选中的所有可能内容 (就是各种表示形式)
- 能够输出内容到文件
- 争取能应用到不同的项目中(所有网络通信核心就2个,第一:数据包,第二: 长度,最多加个类型)
- 拥有过滤机制
直接创建一个新项目
UI绘制略
BOOL CDataAnlyDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* p)
{
lstView.InsertItem(0, (LPCTSTR)p->lpData);
return CDialogEx::OnCopyData(pWnd, p);
}
添加个消息。
wchar_t buff[]{ L"正在连接网络" };
COPYDATASTRUCT copydata{};
copydata.dwData = 0;
copydata.cbData = sizeof(buff);
copydata.lpData = buff;
HWND hwnd = FindWindow(L"#32770", L"DataAnly");
SendMessage(hwnd, WM_COPYDATA, 0, (LPARAM)©data);//别的程序就要提供cwnd
在那个Connect的Hook的地方写入上面这段。
测试可以发送过来数据
bool MsgType[5]
{
true,true,false,false,false
};
wchar_t MsgName[5][0xFF]
{
L"发送", //data 000
L"接收",//data 000
L"发送解析",
L"接收解析",
L"日志"
};
/*
0 发送数据
1 接收数据
2 发送数据解析
3 接收数据解析
4 日志
*/
再把这个功能封装好
#include "pch.h"
#include "CAnly.h"
#ifdef AnlyLRESULT CAnly::SendData(int type, void* buff, unsigned len)
{
COPYDATASTRUCT copydata{};
copydata.dwData = type;
copydata.cbData = len;
copydata.lpData = buff;
HWND hWnd = FindWindow(L"#32770", L"DataAnly");
if (hWnd)return SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)©data);
return 0;
}
#endif
完善到HOOK的一系列函数中 测试下
bool GameWinSock::OnSend(char* buf, unsigned len)
{
#ifdef Anly
anly ->SendData(0,buf,len);
#endif
return (this->*_OnSend)(buf,len);
}bool GameWinSock::OnRecving(char* buf, unsigned len)
{
#ifdef Anly
anly->SendData(1, buf, len);
#endif
return true;
}
登录这个数据机关枪一样射过来了
数据量极大,但功能也是初步做好了丢丢