[提问]逆向Unity游戏时, 如何判断Hook函数的参数类型?

IDA 代码如下:

__int64 __fastcall NetworkManager__Connect(__int64 result, __int64 a2, signed int a3)
{
  __int64 v3; // x19
  signed int v4; // w20
  __int64 v5; // x21

  v3 = result;
  if ( a2 )
  {
    v4 = a3;
    v5 = a2;
    result = System_String__get_Length(a2, 0LL);
    if ( v4 >= 1 && (signed int)result >= 1 )
    {
      *(_QWORD *)(v3 + 24) = v5;
      *(_DWORD *)(v3 + 32) = v4;
    }
  }
  *(_DWORD *)(v3 + 140) = 1;
  return result;
}

dump.cs的函数如下:

// RVA: 0x1060F70 Offset: 0x1060F70 VA: 0x101060F70
public void Connect(string IP = "", int Port = 0) { }

根据庆神的帖子做 MSHookFunction Hook, 但参数类型上有些困扰, 请问如何判断参数类型?

1 个赞

result :NetworkManager
__int64 a2:string IP
signed int a3:int Port

大部分的基本数据类型的出入参函数都可以hook, 但是一些C#特有的类型就不大好处理,类似 List之类的

都是指针。一律按long来处理

2 个赞