zoukankan      html  css  js  c++  java
  • 网页游戏外挂辅助AMF模拟通讯必备

    class AMF_Post_Data
        {
            public List<byte> message;
    
            /// <summary>
            /// 初始化Message
            /// </summary>
            /// <param name="at"></param>
            /// <param name="headers"></param>
            /// <param name="bodies"></param>
            public AMF_Post_Data(AMFType at, int headers, int bodies)
            {
                //AMF版本
                if (at == AMFType.AMF0)
                {
                    message = new List<byte>(new byte[] { 0x00, 0x00 });
                }
                else if (at == AMFType.AMF3)
                {
                    message = new List<byte>(new byte[] { 0x00, 0x03 });
                }
    
                //header数量
                message.Add(BitConverter.GetBytes(headers)[1]);
                message.Add(BitConverter.GetBytes(headers)[0]);
                //body数量
                message.Add(BitConverter.GetBytes(bodies)[1]);
                message.Add(BitConverter.GetBytes(bodies)[0]);
            }
    
            /// <summary>
            /// 添加Target
            /// </summary>
            /// <param name="target"></param>
            /// <param name="Response"></param>
            public void AddTargetAndResponse(string target, string Response)
            {
                //添加Target长度
                message.Add(BitConverter.GetBytes(target.Length)[1]);
                message.Add(BitConverter.GetBytes(target.Length)[0]);
                //添加Target内容
                message.AddRange(Encoding.Default.GetBytes(target));
    
                //添加Response长度
                message.Add(BitConverter.GetBytes(Response.Length)[1]);
                message.Add(BitConverter.GetBytes(Response.Length)[0]);
                //添加Response内容
                message.AddRange(Encoding.Default.GetBytes(Response));
            }
    
            /// <summary>
            /// 添加Body
            /// </summary>
            /// <param name="length"></param>
            /// <param name="Content"></param>
            public void AddBody(AMF_Post_Data_Body apdb)
            {
                message.AddRange(apdb.getLength());
                message.AddRange(apdb.Content.ToArray());
            }
        }
    
    
    
        class AMF_Post_Data_Body
        {
            private byte[] length = new byte[4];
            public List<byte> Content = new List<byte>();
    
            /// <summary>
            /// 初始化Body
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="ArrayLength"></param>
            public AMF_Post_Data_Body(DataType dt, int ArrayLength)
            {
                //添加类型标识
                Content.Add((byte)dt);
    
                //数组的话添加长度
                if (dt == DataType.Array)
                {
                    Content.Add(BitConverter.GetBytes(ArrayLength)[3]);
                    Content.Add(BitConverter.GetBytes(ArrayLength)[2]);
                    Content.Add(BitConverter.GetBytes(ArrayLength)[1]);
                    Content.Add(BitConverter.GetBytes(ArrayLength)[0]);
                }
            }
    
            public void AddData(DataType dt, string value)
            {
                //添加类型标识
                Content.Add((byte)dt);
    
                switch (dt)
                {
                    case DataType.Number:
                        AddData_Number(double.Parse(value));
                        break;
                    case DataType.String:
                        AddData_String(value);
                        break;
                    case DataType.Boolean:
                        AddData_Boolean(Boolean.Parse(value));
                        break;
                }
            }
    
            #region 更种类型处理方法
            /// <summary>
            /// Boolean
            /// </summary>
            /// <param name="p"></param>
            private void AddData_Boolean(bool p)
            {
                if (p)
                    Content.Add(0x01);
                else
                    Content.Add(0x00);
            }
            /// <summary>
            /// String
            /// </summary>
            /// <param name="value"></param>
            private void AddData_String(string value)
            {
                //添加长度
                Content.Add(BitConverter.GetBytes(value.Length)[1]);
                Content.Add(BitConverter.GetBytes(value.Length)[0]);
                //添加内容
                Content.AddRange(Encoding.Default.GetBytes(value));
            }
            /// <summary>
            /// Number
            /// </summary>
            /// <param name="p"></param>
            private void AddData_Number(double p)
            {
                byte[] b = new byte[8];
                b = BitConverter.GetBytes(p);
                for (int i = 7; i > -1; i--)
                {
                    Content.Add(b[i]);
                }
            }
            #endregion
    
            public byte[] getLength()
            {
                length[0] = BitConverter.GetBytes(Content.Count)[3];
                length[1] = BitConverter.GetBytes(Content.Count)[2];
                length[2] = BitConverter.GetBytes(Content.Count)[1];
                length[3] = BitConverter.GetBytes(Content.Count)[0];
    
                return length;
            }
        }
    
    
        #region 类型枚举
        public enum AMFType
        {
            AMF0,
            AMF3
        }
    
        public enum DataType
        {
            Number = 0,
            Boolean = 1,
            String = 2,
            UntypedObject = 3,
            MovieClip = 4,
            Null = 5,
            Undefined = 6,
            ReferencedObject = 7,
            MixedArray = 8,
            End = 9,
            Array = 10,//0x0A  
            Date = 11,//0x0B  
            LongString = 12,//0x0C  
            TypeAsObject = 13,//0x0D  
            Recordset = 14,//0x0E  
            Xml = 15,//0x0F  
            TypedObject = 16,//0x10  
            AMF3data = 17//0x11  
        }
        #endregion
  • 相关阅读:
    经典SQL语句集锦(收藏版)
    硬件访问服务学习笔记_WDS
    Android 工具视频学习笔记_WDS
    Android资源收集
    Android USB gadget configfs学习笔记总结
    IP、端口号、MAC
    Java中的泛型
    git配置config文件
    Java基础知识总结
    Java中的继承抽象类和接口
  • 原文地址:https://www.cnblogs.com/NoRoad/p/3340094.html
Copyright © 2011-2022 走看看