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

网页游戏外挂辅助AMF模拟通讯必备的更多相关文章

  1. 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆

    看web看多了,想写写页游的外挂,其实原理是一样的,就是端口不一样协议字段你不知道,而这也提高了点技术门槛,看我们来一点一点突破这些门槛,这次我们来用python发包模拟flash的客户端登陆. 以热 ...

  2. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    详解游戏辅助编程 [目录] 1-什么是Windows API 2-Windows进程 3-Windows 的内存的运行原理 4-windows 中句柄的概念 5-Windows的变量类型 6-辅助实现 ...

  3. 游戏外挂四之利用CE和OD查找被选中怪物和怪物列表

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com 这一节我们利 ...

  4. 游戏辅助外gua篇:如何Dump内存获得游戏的辅助

    转载请标明出处: https://dujinyang.blog.csdn.net/article/category/9267855 本文出自:[奥特曼超人的博客] 本篇邀请了 "阿七&quo ...

  5. C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的外挂. 作为微软. ...

  6. 用Python制作游戏外挂(上)

    源地址:http://eyehere.net/2012/python-game-bot-autopy-1/ 悲剧成我这样的人,我知道肯定不止我一个,所以我一点都不悲伤:-( 所以我打开了4399小游戏 ...

  7. Unity网页游戏

    Unity网页游戏是跑在浏览器的UnityWebPlayer插件中的,运行的模式是webplayer.unity3d+html 在嵌入UnityWebPlayer的网页中会调用UnityObject2 ...

  8. 一步步用python制作游戏外挂【转】

    转自:http://www.cnblogs.com/xsmhero/archive/2013/01/03/2842973.html 玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过 ...

  9. Python论做游戏外挂,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...

随机推荐

  1. 利用layer的mask属性实现逐渐揭示的动画效果

    github上又看到个不错的动画(https://github.com/rounak/RJImageLoader),如图: 所以就想来自己实现以下 不试不知道,这个动画还真不是看上去那么简单,我自己想 ...

  2. Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中

    前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...

  3. 【iOS】在Swift中使用JSONModel

    前言 首先所有的Model还是使用oc来写——看到这一句是不是想关网页了- - #,在swift里面直接写一直报错所以就将就用oc来写了,这里主要是分享一下搭配Alamofire使用的经验. 声明 欢 ...

  4. iOS之weak和strong、懒加载及循环引用

    一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...

  5. CoreLocation定位技术

    CoreLocation框架可用于定位设备当前经纬度,通过该框架,应用程序可通过附近的蜂窝基站,WIFI信号或者GPS等信息计算用户位置.      iOS定位支持的3种模式.      (1)GPS ...

  6. Android中asset和raw的区别

    :assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件.

  7. 阴影 box-shadow

    语法: box-shadow:none | <shadow> [ , <shadow> ]* <shadow> = inset? && <le ...

  8. Java通过几种经典的算法来实现数组排序

    Java实现数组排序 package com.souvc.hibernate.exp; public class MySort { /** * 方法名:main</br> * 详述:Jav ...

  9. ORA-01033:oracle初始化或者关闭错误

    1.打开oracle的相关服务项 2.cmd进入dos界面 3.C:\Users\Administrator>sqlplus /nolog 4.SQL> conn sys/oracle a ...

  10. Android 通过Uri获取Bitmap对象

    (转自:http://blog.sina.com.cn/s/blog_5de73d0b0100zfm8.html) private Bitmap getBitmapFromUri(Uri uri) { ...