コード例 #1
0
            public async Task <string> GetFullName()
            {
                if (!FullName.Empty())
                {
                    return(FullName);
                }

                var cClass = await GetClass();

                if (!cClass.IsValid())
                {
                    return("(null)");
                }

                string temp = string.Empty;

                for (UEObject outer = await GetOuter(); outer.IsValid(); outer = await outer.GetOuter())
                {
                    temp = temp.Insert(0, $"{await outer.GetName()}.");
                }

                FullName = $"{await cClass.GetName()} {temp}{await GetName()}";

                return(FullName);
            }
コード例 #2
0
        private static bool ReadUObject(IntPtr uObjectAddress, out UEObject retUObj)
        {
            var tmp = new UObject();

            retUObj = new UEObject(tmp);

            return(Utils.IsValidRemoteAddress(uObjectAddress) && tmp.ReadData(uObjectAddress).Result);
        }
コード例 #3
0
            public async Task <string> GetInstanceClassName()
            {
                if (!IsValid())
                {
                    return(string.Empty);
                }

                UEObject obj = ObjectsStore.GetByAddress(GetAddress(), out bool found);

                return(found ? await(await obj.GetClass()).GetNameCpp() : string.Empty);
            }
コード例 #4
0
ファイル: Engine.cs プロジェクト: shalzuth/RemnantESP
 public UEObject this[String key]
 {
     get
     {
         var      fieldAddr = Engine.Instance.GetFieldAddr(ClassAddr, ClassAddr, key);
         var      fieldType = Engine.Instance.GetFieldType(fieldAddr);
         var      offset    = (UInt32)Engine.Instance.GetFieldOffset(fieldAddr);
         UEObject obj;
         if (fieldType == "ObjectProperty" || fieldType == "ScriptStruct")
         {
             obj = new UEObject(Engine.Memory.ReadProcessMemory <UInt64>(Address + offset))
             {
                 FieldOffset = offset
             }
         }
         ;
         else if (fieldType == "ArrayProperty")
         {
             obj            = new UEObject(Address + offset);
             obj._classAddr = Engine.Memory.ReadProcessMemory <UInt64>(fieldAddr + 0x10);
         }
         else if (fieldType.Contains("Bool"))
         {
             obj            = new UEObject(Address + offset);
             obj._classAddr = Engine.Memory.ReadProcessMemory <UInt64>(fieldAddr + 0x10);
             var boolMask = Engine.Memory.ReadProcessMemory <UInt64>(fieldAddr + 0x70);
             boolMask = (boolMask >> 16) & 0xff;
             var fullVal = Engine.Memory.ReadProcessMemory <Byte>(Address + offset);
             obj._value = ((fullVal & boolMask) == boolMask) ? 1u : 0;
         }
         else if (fieldType.Contains("Function"))
         {
             obj             = new UEObject(fieldAddr);
             obj.BaseObjAddr = Address;
         }
         else
         {
             obj            = new UEObject(Address + offset);
             obj._classAddr = Engine.Memory.ReadProcessMemory <UInt64>(fieldAddr + 0x70);
         }
         if (obj.Address == 0)
         {
             return(null);
             //var classInfo = Engine.Instance.DumpClass(ClassAddr);
             //throw new Exception("bad addr");
         }
         return(obj);
     }
 }
コード例 #5
0
            public async Task <UEObject> GetPackageObject()
            {
                if (Package != null)
                {
                    return(Package);
                }

                // Package Is The Last Outer
                for (UEObject outer = await GetOuter(); outer.IsValid(); outer = await outer.GetOuter())
                {
                    Package = outer;
                }

                return(Package ?? (Package = await ObjectsStore.GetByAddress(Object.ObjAddress)));
            }
コード例 #6
0
ファイル: Engine.cs プロジェクト: shalzuth/RemnantESP
        public void DumpActors()
        {
            var sb = new System.Text.StringBuilder();

            var World  = new UEObject(Engine.GWorld);
            var Levels = World["Levels"];

            for (var levelIndex = 0u; levelIndex < Levels.Num; levelIndex++)
            {
                var Level  = Levels[levelIndex];
                var Actors = new Engine.UEObject(Level.Address + 0xA8);
                for (var i = 0u; i < Actors.Num; i++)
                {
                    var Actor = Actors[i];
                    var debug = GetFullName(Actor.Address) + " || " + Actor.ClassName + " || " + DumpClass(Actor.ClassAddr);
                    sb.AppendLine(i + " : " + debug);
                }
            }
            System.IO.File.WriteAllText("actors.txt", sb.ToString());
        }
コード例 #7
0
ファイル: Engine.cs プロジェクト: shalzuth/RemnantESP
        public String DumpClass(UInt64 classAddr)
        {
            var sb   = new StringBuilder();
            var name = GetFullName(classAddr);

            sb.Append(classAddr.ToString("X") + " : " + name);
            var pcAddr = classAddr;
            var c      = 0;

            while ((pcAddr = Memory.ReadProcessMemory <UInt64>(pcAddr + 0x40)) > 0 && c++ < 20)
            {
                var super = GetFullName(pcAddr);
                sb.Append(" : " + super);
            }
            sb.AppendLine();

            pcAddr = classAddr;
            //while ((pcAddr = Memory.ReadProcessMemory<UInt64>(pcAddr + 0x40)) > 0)
            while (true)
            {
                var field = pcAddr + 0x40;
                while (true)
                {
                    var nextField = Memory.ReadProcessMemory <UInt64>(field + 0x28);
                    if (nextField == field)
                    {
                        break;
                    }
                    field = nextField;
                    if (field == 0)
                    {
                        break;
                    }
                    var fieldName = GetFullName(field);
                    var f         = Memory.ReadProcessMemory <UInt64>(field + 0x70);
                    var fType     = GetName(Memory.ReadProcessMemory <Int32>(f + 0x18));
                    var fName     = GetName(Memory.ReadProcessMemory <Int32>(field + 0x18));
                    var offset    = Memory.ReadProcessMemory <Int32>(field + 0x44);
                    if (fType == "None" && String.IsNullOrEmpty(fName))
                    {
                        break;
                    }
                    var fieldObj = new UEObject(field);
                    if (fieldObj.ClassName == "Class CoreUObject.Function")
                    {
                        sb.AppendLine("  " + fType + " " + fName + "(" + fieldObj.ClassName + ") : 0x" + offset.ToString("X"));
                        var funcParams = field + 0x20u;
                        while ((funcParams = Memory.ReadProcessMemory <UInt64>(funcParams + 0x28u)) > 0)
                        {
                            sb.AppendLine("      " + GetFullName(funcParams));
                        }
                    }
                    else
                    {
                        sb.AppendLine("  " + fType + " " + fName + "(" + fieldObj.ClassName + ") : 0x" + offset.ToString("X"));
                    }
                }
                pcAddr = Memory.ReadProcessMemory <UInt64>(pcAddr + 0x40);
                if (pcAddr == 0)
                {
                    break;
                }
            }
            return(sb.ToString());
        }
コード例 #8
0
 protected bool Equals(UEObject other)
 {
     return(Equals(Object, other.Object));
 }