一个UnReal游戏的搜索物品速度分析
The Midnight Walkers 游戏搜索物品速度很慢, 我想分析和修改速度
- 搜索结束后会调用 Server_ItemSearching
- 往上跟踪发现 到 FTimerManager::Tick 调用, 应该是用了 FTimerManager__InternalSetTimer
- 找到 FTimerManager::Tick 使用的回调函数 sub_144A553C0
- 分析引用找到 0000000144A5987A lea rax, sub_144A553C0
- 核心跟踪
bp 0000000144A5987A 设置回调
run
bp 0000000143C6FF40 拦截FTimerManager__InternalSetTimer - 最后中断的位置就是游戏设置搜索需要时间的地方
前面根据界面显示, 搜索时间什么的, 用了很长时间, 与核心无法, 只是显示时间而已
界面显示分析过程:
- 用UE5DumpUI 找到 MWWidget_InGameInvenSearching 的成员 __currentTime 偏移 = 360
- 用UE5DumpUI 找到 UI_InGameInven_C,
- 找到 UI_InGameInven_C 的成员 c_wg_searching
- 用实际对象 +360 就是__currentTime
- 对地址断点写入, 可以找到更新函数
修改
.text:0000000144A599B1 F3 0F 10 05 2B 37 E0 01 movss xmm0, cs:flt_14685D0E4 ; -1.0
.text:0000000144A599B9 4C 8D 45 B7 lea r8, [rbp+57h+var_A0]
.text:0000000144A599BD 33 C0 xor eax, eax
.text:0000000144A599BF F3 0F 11 44 24 28 movss dword ptr [rsp+28h], xmm0
.text:0000000144A599C5 0F 28 DE movaps xmm3, xmm6
.text:0000000144A599C8 88 44 24 20 mov [rsp+0F0h+var_D0], al
.text:0000000144A599CC 48 8B D6 mov rdx, rsi
.text:0000000144A599CF 4C 89 7D C7 mov [rbp+57h+var_90], r15
.text:0000000144A599D3 49 8B CE mov rcx, r14
.text:0000000144A599D6 4C 89 7D CF mov [rbp+57h+var_88], r15
.text:0000000144A599DA 4C 89 7D D7 mov [rbp+57h+var_80], r15
.text:0000000144A599DE 4C 89 7D E7 mov [rbp+57h+var_70], r15
.text:0000000144A599E2 E8 29 69 21 FF call FTimerManager__InternalSetTimer_0
修改后
144A599B1 - F3 0F10 05 93D3E201 - movss xmm0,[146886D4C] { (0.20) }
144A599B9 - 4C 8D 45 B7 - lea r8,[rbp-49]
144A599BD - 33 C0 - xor eax,eax
144A599BF - F3 0F11 44 24 28 - movss [rsp+28],xmm0
144A599C5 - 0F28 D8 - movaps xmm3,xmm0
144A599C8 - 88 44 24 20 - mov [rsp+20],al
void FTimerManager::InternalSetTimer(
FTimerHandle & InOutTimerHandle,
FTimerUnifiedDelegate && InDelegate,
float InRate, // float‑1
bool InbLoop,
float InFirstDelay // float‑2
)

浙公网安备 33010602011771号