一个UnReal游戏的搜索物品速度分析

The Midnight Walkers 游戏搜索物品速度很慢, 我想分析和修改速度

  1. 搜索结束后会调用 Server_ItemSearching
  2. 往上跟踪发现 到 FTimerManager::Tick 调用, 应该是用了 FTimerManager__InternalSetTimer
  3. 找到 FTimerManager::Tick 使用的回调函数 sub_144A553C0
  4. 分析引用找到 0000000144A5987A lea rax, sub_144A553C0
  5. 核心跟踪
    bp 0000000144A5987A 设置回调
    run
    bp 0000000143C6FF40 拦截FTimerManager__InternalSetTimer
  6. 最后中断的位置就是游戏设置搜索需要时间的地方

前面根据界面显示, 搜索时间什么的, 用了很长时间, 与核心无法, 只是显示时间而已
界面显示分析过程:

  1. 用UE5DumpUI 找到 MWWidget_InGameInvenSearching 的成员 __currentTime 偏移 = 360
  2. 用UE5DumpUI 找到 UI_InGameInven_C,
  3. 找到 UI_InGameInven_C 的成员 c_wg_searching
  4. 用实际对象 +360 就是__currentTime
  5. 对地址断点写入, 可以找到更新函数

修改

.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
)
posted @ 2026-08-24 15:02  Yofoo  阅读(3)  评论(0)    收藏  举报