Beispiel #1
0
        private void ModifyAbc(DoABCTag abcTag)
        {
            CPoolInfo constants = abcTag.ABCData.ConstantPool;
            StatusTxt.SetDotAnimation("Squeezing ({0})", abcTag.Name);

            for (int i = 1; i < constants.Strings.Length; i++)
            {
                string constant = constants.Strings[i];
                if (constant.Length > 256 || constant.Length < 2) continue;

                if (constant.Length > 2 && constant.Length < 6)
                {
                    ushort possiblePort = 0;
                    if (ushort.TryParse(constant, out possiblePort))
                    {
                        if (!_possiblePorts.Contains(possiblePort))
                            _possiblePorts.Add(possiblePort);

                        if (constant != "10001") continue;
                    }
                }

                constants.Strings[i] =
                    ReplaceConstant(constant);
            }
        }
Beispiel #2
0
        private void ReplaceABC(DoABCTag abcTag)
        {
            bool foundModInABC = false;
            bool containedDefaultExpInABC = false;

            CPoolInfo cPool = abcTag.ABCData.ConstantPool;
            StatusTxt.SetDotAnimation("Squeezing ({0})", abcTag.Name);

            var ignorePorts = new List<string>();
            var possiblePorts = new List<ushort>();
            for (int i = 1; i < cPool.Strings.Length; i++)
            {
                string cString = cPool.Strings[i];
                if (cString.Length > 256 || cString.Length < 2) continue;

                if (cString.Length > 2 && cString.Length < 6)
                {
                    ushort possiblePort = 0;
                    if (ushort.TryParse(cString, out possiblePort))
                    {
                        if (!possiblePorts.Contains(possiblePort) &&
                            !ignorePorts.Contains(cString))
                        {
                            possiblePorts.Add(possiblePort);
                        }
                    }
                }

                if (cPool.Strings[i].Length == 256)
                {
                    foundModInABC = true;
                    if (string.IsNullOrWhiteSpace(MainUI.HandshakeMngr.RealModulus))
                    {
                        MainUI.HandshakeMngr.RealModulus = cString;
                        cPool.Strings[i] = HandshakeManager.FAKE_MODULUS;
                    }
                }
                else if (cString == "10001")
                {
                    containedDefaultExpInABC = true;
                    cPool.Strings[i] = HandshakeManager.FAKE_EXPONENT.ToString();
                }
                else if (_ipMatcher.Match(cString).Success)
                {
                    MainUI.GameData.Host = cString;
                    cPool.Strings[i] = "127.0.0.1";
                }
                else if (cString == "localhost")
                {
                    cPool.Strings[i] = "tsohlacol";
                }
            }

            if (foundModInABC &&
                !containedDefaultExpInABC && MainUI.IsRetro)
            {
                MainUI.HandshakeMngr.RealExponent = 3;
            }

            if (_hasCorrectPort) return;
            possiblePorts.Insert(0, (ushort)MainUI.GameData.Port);
            foreach (ushort possiblePort in possiblePorts)
            {
                if (AttemptConnect(possiblePort, ignorePorts))
                {
                    _hasCorrectPort = true;
                    MainUI.GameData.Port = possiblePort;
                    break;
                }
            }
        }
Beispiel #3
0
        protected virtual FlashTag ReadTag(FlashReader reader, TagRecord header)
        {
            FlashTag tag = null;
            switch (header.TagType)
            {
                default:
                tag = new UnknownTag(Reader, header);
                break;

                case FlashTagType.DoABC:
                tag = new DoABCTag(Reader, header);
                break;

                case FlashTagType.DefineBitsLossless2:
                tag = new DefineBitsLossless2Tag(Reader, header);
                break;

                case FlashTagType.DefineBinaryData:
                tag = new DefineBinaryDataTag(Reader, header);
                break;
            }

            var character = (tag as ICharacter);
            if (character != null)
            {
                // Add ICharacter tag to the global dictionary.
                Dictionary.Characters[
                    character.CharacterId] = character;
            }
            return tag;
        }