20260730

0332睡到0926睡到1122,睡觉好舒服。夜里发现是frida不知道我所trace函数的返回值类型所以默认返回rax而不是xmm0,ts中又没法通过cpuContext获取后者,看来还是得replace了?

longlong TSKBattleNote$$GetDamageRateValue(longlong param_1,longlong param_2,undefined4 param_3,undefined param_4,longlong param_5)是计算最终伤害的函数,传入计算减伤与加伤前的伤害,

1
2
  lVar6 = TSKBattleNote$$GetSkillEffect(param_1,StringLiteral_4609,0);
  lVar7 = TSKBattleNote$$GetSkillEffect(param_1,StringLiteral_4607,0);

函数中要用到这两个妙妙小数值,前者是DmgUp,后者是DamageDown。看到这命名直接没了力气。

非static函数在method.implementation = function (...args: any[]) {获取到的args不包含该类本身,但在调用

1
2
3
4
5
  const original = new NativeFunction(
    method.virtualAddress,
    returnType,
    argTypes
  ) as any;

的时候要传入this.handle,为什么。

bridge 做的

il2cpp bridge中如果 const GetSkillEffect = defence.method("GetSkillEffect");这个函数有同样传参个数的重载那么无法获取另一个..因为method的函数签名是method<T extends Il2Cpp.Method.ReturnType>(name: string, parameterCount?: number): Il2Cpp.BoundMethod<T>;。而非静态函数又无法通过defence.class.methods.find(...)去找并invoke..

没能找到计算伤害具体的行为,上述的两个Effect并不是常用的易伤,常用的是DmgUpAllyRateBit,但代码中没找到,头大大。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计