Example #1
0
 public QName(ASConstants constants, FlashReader reader, ConstantType multinameType)
 {
     _constants = constants;
     MultinameType = multinameType;
     NamespaceIndex = reader.Read7BitEncodedInt();
     NameIndex = reader.Read7BitEncodedInt();
 }
Example #2
0
        public ASNamespace(ASConstants constants, FlashReader reader)
        {
            _constants = constants;

            NamespaceType = (ConstantType)reader.ReadByte();
            NameIndex = reader.Read7BitEncodedInt();
        }
Example #3
0
 public DefineFontNameTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     FontId = reader.ReadUInt16();
     FontName = reader.ReadNullTerminatedString();
     FontCopyright = reader.ReadNullTerminatedString();
 }
Example #4
0
        public DefineBinaryDataTag(FlashReader reader, TagRecord header)
            : base(reader, header)
        {
            CharacterId = reader.ReadUInt16();
            reader.ReadUInt32();

            BinaryData = reader.ReadBytes(header.Body.Length - 6);
        }
Example #5
0
        public ASTrait(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            NameIndex = reader.Read7BitEncodedInt();
            byte trueKind = reader.ReadByte();

            var traitType = (TraitType)(trueKind & 0xF);
            Attributes = (TraitAttributes)(trueKind >> 4);
            #region Trait Reading
            switch (traitType)
            {
                case TraitType.Slot:
                case TraitType.Constant:
                Data = new SlotConstantTrait(abc, reader, Name.ObjName, traitType);
                break;

                case TraitType.Method:
                case TraitType.Getter:
                case TraitType.Setter:
                {
                    var mgsTrait = new MethodGetterSetterTrait(abc, reader, Name.ObjName, traitType);
                    mgsTrait.Method.ObjName = Name.ObjName;

                    Data = mgsTrait;
                    break;
                }

                case TraitType.Class:
                {
                    var classTrait = new ClassTrait(abc, reader, Name.ObjName);
                    // TODO: Link trait information?
                    Data = classTrait;
                    break;
                }

                case TraitType.Function:
                {
                    var functionTrait = new FunctionTrait(abc, reader, Name.ObjName);
                    // TODO: Link trait information?
                    Data = functionTrait;
                    break;
                }

                default:
                throw new Exception("Invalid trait: " + TraitType);
            }
            #endregion

            MetadataIndices = new List<int>();
            if ((Attributes & TraitAttributes.Metadata) != 0)
                MetadataIndices.Capacity = reader.Read7BitEncodedInt();

            for (int i = 0; i < MetadataIndices.Capacity; i++)
                MetadataIndices.Add(reader.Read7BitEncodedInt());
        }
Example #6
0
        public Typename(ASConstants constants, FlashReader reader)
        {
            _constants = constants;

            TypeIndex = reader.Read7BitEncodedInt();
            ParameterTypeIndices = new List<int>(reader.Read7BitEncodedInt());

            for (int i = 0; i < ParameterTypeIndices.Capacity; i++)
                ParameterTypeIndices.Add(reader.Read7BitEncodedInt());
        }
Example #7
0
        public ASClass(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            ConstructorIndex = reader.Read7BitEncodedInt();
            Traits = new List<ASTrait>(reader.Read7BitEncodedInt());

            for (int i = 0; i < Traits.Capacity; i++)
                Traits.Add(new ASTrait(abc, reader));
        }
Example #8
0
        public SlotConstantTrait(ABCFile abc, FlashReader reader, string objName, TraitType traitType)
            : this(abc, objName, traitType)
        {
            SlotId = reader.Read7BitEncodedInt();
            TypeIndex = reader.Read7BitEncodedInt();
            ValueIndex = reader.Read7BitEncodedInt();

            if (ValueIndex != 0)
                ValueType = (ConstantType)reader.ReadByte();
        }
        public SetBackgroundColorTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            byte red = reader.ReadByte();
            byte green = reader.ReadByte();
            byte blue = reader.ReadByte();

            BackgroundColor =
                Color.FromArgb(red, green, blue);
        }
Example #10
0
        public ASException(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            From = reader.Read7BitEncodedInt();
            To = reader.Read7BitEncodedInt();
            Target = reader.Read7BitEncodedInt();
            ExceptionTypeIndex = reader.Read7BitEncodedInt();
            VariableNameIndex = reader.Read7BitEncodedInt();
        }
Example #11
0
        public ASNamespaceSet(ASConstants constants, FlashReader reader)
        {
            _constants = constants;

            NamespaceIndices =
                new List<int>(reader.Read7BitEncodedInt());

            for (int i = 0; i < NamespaceIndices.Capacity; i++)
                NamespaceIndices.Add(reader.Read7BitEncodedInt());
        }
Example #12
0
        public ASMultiname(ASConstants constants, FlashReader reader)
        {
            _constants = constants;

            var multinameType = (ConstantType)reader.ReadByte();
            switch (multinameType)
            {
                case ConstantType.QName:
                case ConstantType.QNameA:
                {
                    var qName = new QName(constants, reader, multinameType);
                    ObjNameIndex = qName.NameIndex;

                    Data = qName;
                    break;
                }

                case ConstantType.RTQName:
                case ConstantType.RTQNameA:
                {
                    var rtqName = new RTQName(constants, reader, multinameType);
                    ObjNameIndex = rtqName.NameIndex;

                    Data = rtqName;
                    break;
                }

                case ConstantType.RTQNameL:
                case ConstantType.RTQNameLA:
                Data = new RTQNameL(multinameType);
                break;

                case ConstantType.Multiname:
                case ConstantType.MultinameA:
                {
                    var multiname = new Multiname(constants, reader, multinameType);
                    ObjNameIndex = multiname.NameIndex;

                    Data = multiname;
                    break;
                }

                case ConstantType.MultinameL:
                case ConstantType.MultinameLA:
                Data = new MultinameL(constants, reader, multinameType);
                break;

                case ConstantType.Typename:
                Data = new Typename(constants, reader);
                break;

                default:
                throw new Exception("Invalid multiname: " + multinameType);
            }
        }
Example #13
0
        public DoABCTag(FlashReader reader, TagRecord header)
            : base(reader, header)
        {
            Flags = reader.ReadUInt32();
            Name = reader.ReadNullTerminatedString();

            int nameLength = (Encoding.UTF8.GetByteCount(Name) + 1);
            byte[] abcData = reader.ReadBytes(header.Body.Length - (nameLength + 4));

            ABC = new ABCFile(abcData);
        }
Example #14
0
        public ASScript(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            FunctionIndex =
                reader.Read7BitEncodedInt();

            Traits = new List<ASTrait>(reader.Read7BitEncodedInt());
            for (int i = 0; i < Traits.Capacity; i++)
                Traits.Add(new ASTrait(abc, reader));
        }
Example #15
0
        public RectangleRecord(FlashReader reader)
        {
            int bits = reader.ReadUB(5);

            X = reader.ReadSB(bits);
            TwipsWidth = reader.ReadSB(bits);
            Width = (TwipsWidth / 20);

            Y = reader.ReadSB(bits);
            TwipsHeight = reader.ReadSB(bits);
            Height = (TwipsHeight / 20);
        }
Example #16
0
        public ASMetadata(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            NameIndex = reader.Read7BitEncodedInt();
            int itemInfoCount = reader.Read7BitEncodedInt();

            Elements = new Dictionary<int, int>(itemInfoCount);
            for (int i = 0; i < itemInfoCount; i++)
            {
                Elements.Add(reader.Read7BitEncodedInt(),
                    reader.Read7BitEncodedInt());
            }
        }
Example #17
0
        public ProductInfoTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            ProductId = (FlashProductId)reader.ReadUInt32();
            Edition = (FlashEdition)reader.ReadUInt32();

            MajorVersion = reader.ReadByte();
            MinorVersion = reader.ReadByte();

            BuildLow = reader.ReadUInt32();
            BuildHigh = reader.ReadUInt32();

            CompilationDate =
                _epoch.AddMilliseconds(reader.ReadUInt64());
        }
Example #18
0
        public bool FindMessageInstances()
        {
            ABCFile abc = _abcFiles[2];
            ASClass habboMessages = abc.FindClassByName("HabboMessages");
            if (habboMessages == null || habboMessages.Traits.Count < 2) return false;

            ASTrait incomingMap = habboMessages.Traits[0];
            ASTrait outgoingMap = habboMessages.Traits[1];

            using (var mapReader = new FlashReader(
                habboMessages.Constructor.Body.Code.ToArray()))
            {
                while (mapReader.Position != mapReader.Length)
                {
                    OPCode op = mapReader.ReadOP();
                    if (op != OPCode.GetLex) continue;

                    int mapTypeIndex = mapReader.Read7BitEncodedInt();
                    bool isOutgoing = (mapTypeIndex == outgoingMap.NameIndex);
                    bool isIncoming = (mapTypeIndex == incomingMap.NameIndex);
                    if (!isOutgoing && !isIncoming) continue;

                    op = mapReader.ReadOP();
                    if (op != OPCode.PushShort && op != OPCode.PushByte) continue;

                    ushort header = 0;
                    if (op == OPCode.PushByte)
                    {
                        header = mapReader.ReadByte();
                    }
                    else header = (ushort)mapReader.Read7BitEncodedInt();

                    op = mapReader.ReadOP();
                    if (op != OPCode.GetLex) continue;

                    int messageTypeIndex = mapReader.Read7BitEncodedInt();
                    ASMultiname messageType = abc.Constants.Multinames[messageTypeIndex];
                    ASInstance messageInstance = abc.FindInstanceByName(messageType.ObjName);

                    if (isOutgoing) OutgoingTypes[header] = messageInstance;
                    else if (isIncoming) IncomingTypes[header] = messageInstance;
                }
            }

            return (OutgoingTypes.Count > 0 &&
                IncomingTypes.Count > 0);
        }
Example #19
0
        public TagRecord(FlashReader reader)
        {
            Start = reader.Position;

            ushort header = reader.ReadUInt16();
            TagType = (FlashTagType)(header >> 6);

            int length = (header & 63);
            if (length >= 63)
            {
                length = reader.ReadInt32();
                IsSpecialLong = (length < 63);
            }
            BodyStart = reader.Position;

            Body = reader.ReadBytes(length);
            reader.Position = BodyStart;
        }
Example #20
0
        public SymbolClassTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            int symbolCount = reader.ReadUInt16();
            Symbols = new Dictionary<ushort, string>(symbolCount);

            for (int i = 0; i < symbolCount; i++)
            {
                ushort characterId = reader.ReadUInt16();
                string symbolName = reader.ReadNullTerminatedString();

                if (Symbols.ContainsKey(characterId))
                {
                    symbolName =
                        $"{Symbols[characterId]},{symbolName}";
                }
                Symbols[characterId] = symbolName;
            }
        }
Example #21
0
        public ExportAssetsTag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            int count = reader.ReadUInt16();
            Assets = new Dictionary<ushort, string>(count);

            for (int i = 0; i < count; i++)
            {
                ushort tag = reader.ReadUInt16();
                string name = reader.ReadNullTerminatedString();

                if (Assets.ContainsKey(tag))
                {
                    throw new Exception(
                        "Duplicate tag id: " + tag);
                }
                Assets[tag] = name;
            }
        }
Example #22
0
        public ASInstance(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            NameIndex = reader.Read7BitEncodedInt();
            SuperNameIndex = reader.Read7BitEncodedInt();
            ClassInfo = (ClassFlags)reader.ReadByte();

            if ((ClassInfo & ClassFlags.ProtectedNamespace) != 0)
                ProtectedNamespaceIndex = reader.Read7BitEncodedInt();

            InterfaceIndices = new List<int>(reader.Read7BitEncodedInt());
            for (int i = 0; i < InterfaceIndices.Capacity; i++)
                InterfaceIndices.Add(reader.Read7BitEncodedInt());

            ConstructorIndex = reader.Read7BitEncodedInt();
            Traits = new List<ASTrait>(reader.Read7BitEncodedInt());

            for (int i = 0; i < Traits.Capacity; i++)
                Traits.Add(new ASTrait(abc, reader));
        }
        public DefineBitsLossless2Tag(FlashReader reader, TagRecord header) :
            base(reader, header)
        {
            CharacterId = reader.ReadUInt16();
            BitmapFormat = reader.ReadByte();
            BitmapWidth = reader.ReadUInt16();
            BitmapHeight = reader.ReadUInt16();

            _isCompressed = true;
            switch (BitmapFormat - 3)
            {
                case 0: break;

                case 1:
                case 2:
                {
                    _compressedBitmapData =
                        reader.ReadBytes(header.Body.Length - 7);

                    break;
                }
            }
        }
Example #24
0
        public ASMethodBody(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            MethodIndex = reader.Read7BitEncodedInt();

            MaxStack = reader.Read7BitEncodedInt();
            LocalCount = reader.Read7BitEncodedInt();
            InitialScopeDepth = reader.Read7BitEncodedInt();
            MaxScopeDepth = reader.Read7BitEncodedInt();

            Code = new ASCode(abc, this,
                reader.ReadBytes(reader.Read7BitEncodedInt()));

            Exceptions = new List<ASException>(reader.Read7BitEncodedInt());
            for (int i = 0; i < Exceptions.Capacity; i++)
                Exceptions.Add(new ASException(abc, reader));

            Traits = new List<ASTrait>(reader.Read7BitEncodedInt());
            for (int i = 0; i < Traits.Capacity; i++)
                Traits.Add(new ASTrait(abc, reader));

            Method.Body = this;
        }
Example #25
0
        public ASMethod(ABCFile abc, FlashReader reader)
        {
            _abc = abc;

            Parameters = new List<ASParameter>(reader.Read7BitEncodedInt());
            ReturnTypeIndex = reader.Read7BitEncodedInt();

            for (int i = 0; i < Parameters.Capacity; i++)
            {
                int parameterTypeIndex = reader.Read7BitEncodedInt();
                Parameters.Add(new ASParameter(abc, parameterTypeIndex));
            }

            NameIndex = reader.Read7BitEncodedInt();
            MethodInfo = (MethodFlags)reader.ReadByte();

            if ((MethodInfo & MethodFlags.HasOptional) != 0)
            {
                int optionalParamCount = reader.Read7BitEncodedInt();
                while (optionalParamCount > 0)
                {
                    int paramIndex = ((Parameters.Count - 1) - (--optionalParamCount));
                    ASParameter optionalParameter = Parameters[paramIndex];

                    optionalParameter.IsOptional = true;
                    optionalParameter.ValueIndex = reader.Read7BitEncodedInt();
                    optionalParameter.ValueType = (ConstantType)reader.ReadByte();
                }
            }

            if ((MethodInfo & MethodFlags.HasParamNames) != 0)
            {
                foreach (ASParameter parameter in Parameters)
                    parameter.NameIndex = reader.Read7BitEncodedInt();
            }
        }
Example #26
0
 public FrameLabelTag(FlashReader reader, TagRecord header) :
     base(reader, header)
 {
     Name = reader.ReadNullTerminatedString();
 }
Example #27
0
 public FunctionTrait(ABCFile abc, FlashReader reader, string objName) :
     this(abc, objName)
 {
     SlotId = reader.Read7BitEncodedInt();
     FunctionIndex = reader.Read7BitEncodedInt();
 }
Example #28
0
 public ClassTrait(ABCFile abc, FlashReader reader, string objName) :
     this(abc, objName)
 {
     SlotId = reader.Read7BitEncodedInt();
     ClassIndex = reader.Read7BitEncodedInt();
 }
 public MethodGetterSetterTrait(ABCFile abc, FlashReader reader, string objName, TraitType traitType) :
     this(abc, objName, traitType)
 {
     DispId = reader.Read7BitEncodedInt();
     MethodIndex = reader.Read7BitEncodedInt();
 }
Example #30
0
 public QName(ASConstants constants, FlashReader reader) :
     this(constants, reader, ConstantType.QName)
 { }