惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
SecWiki News
SecWiki News
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
博客园 - 【当耐特】
H
Heimdal Security Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cybersecurity and Infrastructure Security Agency CISA
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threatpost
月光博客
月光博客
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
T
Troy Hunt's Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
D
DataBreaches.Net
O
OpenAI News
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
小众软件
小众软件
V
Vulnerabilities – Threatpost
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
Martin Fowler
Martin Fowler
美团技术团队
P
Privacy International News Feed

Hack

想得到一个论坛账号,官方价格太贵了 - V2EX appleid 钓鱼网站 - V2EX hacknew 上欧美人在谈论鸦片战争 - V2EX
逆向 u3d 游戏 - V2EX
harry890829 · 2023-09-12 · via Hack

一个老游戏的私服,但是我一个手机玩家,平时又是用的 mac ,所以导致挂机非常麻烦,于是有了想要自己写一个简单的 client

目前进度是已经从 GameAssembly.dll 中,已经解出来了 Assembly-CSharp.dll
从项目中,已经提取出加密的 lua 脚本,发现了使用异或加密,并且进行了解密
通过阅读 lua 里面的内容发现,lua 是游戏内容的核心,使用了 protobuf ,不过并不复杂
发现 lua 组包后,并不是最终发送的节点,调用了 XNetMgr:SendBytes 函数
通过 Assembly-CSharp.dll 中的偏移量,用 idapro 加载 GameAssembly.dll ,找到对应的函数

简单代码如下:
//XNetMgr:SendBytes
__int64 __fastcall sub_1802EE980(__int64 a1, __int64 a2)
{
__int64 v4; // rbx
__int64 v5; // rcx

if ( !byte_18198A8A4 )
{
sub_1800AD520(20235i64);
byte_18198A8A4 = 1;
}
if ( !*(_QWORD *)(a1 + 16) )
{
v4 = ((__int64 (__fastcall *)(__int64))sub_1800F8640)(qword_1819C2058);
sub_18025EDB0(v4, 0i64);
*(_QWORD *)(a1 + 16) = v4;
}
v5 = *(_QWORD *)(a1 + 16);
if ( !v5 )
sub_1800E5F10();
return sub_18025EB90(v5, a2, 0i64);
}

__int64 __fastcall sub_18025EB90(__int64 a1, __int64 a2)
{
__int64 v4; // rax
__int64 v5; // r14
__int64 v6; // rcx
__int64 v7; // r15
__int64 v8; // r12
int v10; // [rsp+30h] [rbp-10h] BYREF
__int64 v11; // [rsp+40h] [rbp+0h]
__int64 v12; // [rsp+50h] [rbp+10h]
int *v13; // [rsp+60h] [rbp+20h]
int v14; // [rsp+68h] [rbp+28h]
char v15; // [rsp+B8h] [rbp+78h] BYREF

v12 = -2i64;
if ( !byte_181989FC6 )
{
sub_1800AD520(23908i64);
byte_181989FC6 = 1;
}
v15 = 0;
v13 = &v10;
v14 = -1;
v4 = qword_1819C2058;
if ( (*(_BYTE *)(qword_1819C2058 + 295) & 2) != 0 && !*(_DWORD *)(qword_1819C2058 + 216) )
{
il2cpp_runtime_class_init_0(qword_1819C2058);
v4 = qword_1819C2058;
}
v11 = **(_QWORD **)(v4 + 184);
v5 = v11;
v15 = 0;
sub_18099E060(v11, &v15, 0i64);
v6 = *(_QWORD *)(a1 + 16);
if ( v6 && (unsigned __int8)sub_18056C4B0(v6, 0i64) )
{
v7 = *(_QWORD *)(a1 + 24);
if ( !a2 )
sub_1800E5F10(0i64);
v8 = sub_1800F8640(qword_1819AA028);
sub_180E242C0(v8, a1, qword_1819BC580, 0i64);
if ( !v7 )
sub_1800E5F10(0i64);
(*(void (__fastcall **)(__int64, __int64, _QWORD, _QWORD, __int64, _QWORD, _QWORD))(*(_QWORD *)v7 + 600i64))(
v7,
a2,
0i64,
*(unsigned int *)(a2 + 24),
v8,
0i64,
*(_QWORD *)(*(_QWORD *)v7 + 608i64));
v14 = 0;
v10 = 94;
}
else
{
sub_18025E000(a1, 104i64, qword_1819DC270);
v14 = 0;
v10 = 94;
}
if ( v15 )
sub_18099E080(v5, 0i64);
return 0i64;
}

猜测这部分代码为发送核心,不过这种伪代码不知道该怎么看,或者说,怎么通过 idapro 把这个运行起来,我自己单步分析一下,应该能够知道这个东西是怎么回事了

求教一下后续如何进行