Example #1
0
        public bool ResolvePointerPath(HookProcess process)
        {
            IntPtr nextAddress = baseAddress;
            bool   asmStart    = false;

            foreach (var offset in PointerPath)
            {
                try {
                    baseAddress = new IntPtr(nextAddress.ToInt64() + offset);
                    if (baseAddress == IntPtr.Zero)
                    {
                        return(false);
                    }

                    if (!asmStart)
                    {
                        nextAddress = baseAddress + process.GetInt32(new IntPtr(baseAddress.ToInt64())) + 4;
                        asmStart    = true;
                    }
                    else
                    {
                        nextAddress = process.ReadPointer(baseAddress);
                    }
                } catch {
                    return(false);
                }
            }
            return(true);
        }
        public override object GetData(HookProcess process)
        {
            IntPtr pointer  = (IntPtr)process.GetInt64(baseAddress);
            string chattext = string.Empty;

            if (pointer != IntPtr.Zero)
            {
                int len = process.GetInt32(pointer, Offsets["OffsetInputLength"]);
                if (len <= 501)  // ???
                {
                    IntPtr pointer2 = (IntPtr)process.GetInt64(pointer, Offsets["OffsetInputText"]);
                    if (pointer2 != IntPtr.Zero)
                    {
                        chattext = process.GetString(pointer2, 0, len);
                    }
                }
            }
            SigChatInputData data = new SigChatInputData {
                open = (pointer != IntPtr.Zero),
                text = chattext,
            };

            return((object)data);
        }