一篇来自职业欠钱哥哥的东西,很有帮助。

这两年WebGame比较火,WebGame中,前端用Flash表现比较多,而服务器端依然是Web应用。

不少产品已经开始用AMF(Action Message Format)来取代标准的HTTP交互。(这里描述不严谨,因为AMF仍然是基于标准HTTP协议的,只不过用二进制的方式实现序列化和反序列化) 注1.

使用二进制方式实现序列化的好处是数据会得到很好的压缩(对比一下XML、JSON等方式),但缺点是可读性比较差。

我们不再敢奢望使用一个Sniffer从十六进制转换成ASCII码就可以清楚的了解发送了什么信息,获得了什么反馈了。

来看一下AMF协议数据抓包的前后模样吧:

上图是HTTP传输经过gzip压缩后的,直接用sniffer抓包后是没法直接阅读的。看看解压缩后的十六进制内容

可读性已经大大提升了,在FireBug或者是HTTP Watch里可以看到一部分字符串,外加很多乱码,因为二进制内容有很多超出可显示范围的字符。比如下面这个样子:

这时候,我们需要一个能够解析AMF协议的工具(或者是某些开发类库),来做这样的翻译工作。

@CFC4N 同学给我推荐了一款神兵利器——Charles 。

Charles 是一个HTTP代理服务器、,HTTP监视器、反转代理服务器。它允许一个开发者查看所有连接互联网的HTTP通信.这些包括request, response现HTTP headers (包含cookies与caching信息)。如果HTTP协议里包含了AMF数据,它会解析成人类看得懂的文本信息,并且允许你修改以后(下断点的情况)再发送,或者是简单的重放。

看看在Charles下数据的原貌吧。

一旦数据“明文化”,协议清晰了,安全问题也就随之而来了。

还 记得那句”一切输入都是有害的”吧。

现在我们只要在Charles中下好断点,在每个Request中,仔细端详每个参数,通过变量名猜测其含义和用途,修改值以后再送出。

就可以测试很多以前我们轻车熟路的攻击套路了。

以WebGame为例,我们可以做如下尝试:

1. 任务: 反复做/交任务、乱序做任务(之前已做过的、还没接到的)

与某个NPC对话/战斗,修改NPC的ID;修改任务ID乱序测试;重复提交任务完成信息;

2. 战斗: 攻击、治疗效果是本地提交

观察战斗过程中与服务器交互的数据,是否携带过程参数,如有,各种修改各种提交,超大值/负值/游戏里不存在的值/别人的值

3. avatar属性:提交 几率合成性质的结果、绕过CD时间/数量限制提交

几率性的内容往往也是现在游戏里价值最高的核心内容,一个脑残的“保存”设计可能就允许自己“随机”提交一个“几率性的结果”

4. 交易系统: 负值/临界值提交、出售/撤销他人物品、自定义价格

市场里明码标价的物品价格是否出现在购买请求封包中;挂售后取回的物品ID尝试修改为别人的物品ID看看;挂个价格为负数的物品自己买;挂售有最低价格限制?封包里想写多少我说了算;

5. 副本、日常: 绕过次数限制、绕过流程提交最终结果

游戏怕老玩家无聊,总会做一些每日都能进行的日常任务和副本,也往往有个次数限制,看看这个限制是不是纸老虎,抓了完成任务的数据包后重放就知道了;

6. 社交系统: 添加自己为好友、发布富文本信息(伪装系统发言的格式、颜色)、绕过CD限制发言/发信

只有系统公告和GM喊话才是彩色的?未必,在封包里把消息改为<font color=red>我是GM</font>看看;每次发言都要等待一段时间?看我封包的厉害

当然,也包括了现代小黑黑们最擅长的SQL注入、畸形数据(D.O.S)攻击。

上述所有的参数,都可以尝试修改为SQL注入语句,或者是十六进制不满足AMF规范协议的一个00,可能就会让服务端程序抛出一个异常,甚至直接crash掉。

从偷懒的心理来说,但凡是有了一丁点儿的封装,就必然有一定数量的程序员会认为:这一堆乱七八糟的东西普通用户是看不懂的,没人能够随便修改,所以我也就不必对它们做小心翼翼的处理了。

于是,越是表面上看起来复杂的东西,攻击起来的效果可能会更令人意想不到(在了解协议,将信息“明文化”,可自定义提交的场景中)。

最后,AMF也已经有了不少类库可以直接识别、书写了,

再加上Flash本身可以被SWF Decompiler之类的工具反编译(虽然看不到原始的代码,但基本的资源、变量名、AS脚本还是看的比较清楚的),那些做webgame脱机外挂的朋友应该是再熟悉不过了。

所以,基于Flash+AMF+Web后台的WebGame,应该还有很大的发挥空间。

参考资料:

1. 伟大的@CFC4N同学,还有当初没看过AMF协议硬生生从十六进制摸索出了协议规律的neptune同学

2. AMF  http://www.cnblogs.com/studyzy/archive/2008/04/09/1143685.html

注解1. 关于序列化和反序列化

我一直觉得那些专业的XX百科、XX WiKi,都是喜欢用专业术语解释专业术语,对小白用户来说,往往看2眼会更加不知所云。

不过我相信,亲自操作过Charles之后,会对这个概念理解的很形象的。

转载于:https://www.cnblogs.com/axyz/p/5663944.html

amf webgame相关推荐

  1. 与后台通讯,首先要了解AMF协议

    Flash 5开始就可以以 XML 或者"变量/值"配对输出格式向服务器传送 数据 .虽然这些数据能通过Flash编译器自动解析或者通过 开发 人员自行编写的 代码 手动解析, 但 ...

  2. amf java_java – 不支持的AMF版本

    我遇到了以下异常: [BlazeDS] Unsupported AMF version 4,660. flex.messaging.MessageException: Unsupported AMF ...

  3. MPB:北林张静等-丛枝菌根真菌(AMF)孢子、菌丝密度及侵染率定量测定方法

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  4. RTMPdump(libRTMP) 源代码分析 3: AMF编码

    2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...

  5. [置顶] AMF序列化为对象和AMF序列化为二进制字节流

    在使用Flex作为页面前端驱动Socket通讯时,一般使用AMF格式来进行的发送和接收,因此就要涉及到不同的数据格式的转换. 下面提供了AMF序列化为对象和AMF序列化为二进制字节流的方法,代码如下: ...

  6. 面试者让金山负责webgame的高管崩溃了!

    面试者让金山负责webgame的高管崩溃了!(2009-07-06 03:44:05) 标签:金山 面试者 webgame 高管 游戏 网游 it  分类:行业评论 [转载自作者李安科本人BLOG] ...

  7. 5G NGC — AMF 接入和移动性管理功能

    目录 文章目录 目录 AMF 对 UE 进行移动性管理的主要流程 NF Services AMF AMF(Access and Mobility Management Function,接入和移动性管 ...

  8. NR 5G AMF重定向的注册流程

    AMF重定向的注册流程 当一个AMF收到Registration Request,这个AMF可能需要将此Registration Request改道发送到另外一个AMF,主要应用场景:当初始AMF不适 ...

  9. NR 5G 网络功能之AMF

    AMF简述 接入和移动管理功能(AMF)包括以下功能. 在 AMF 的单个实例中可以支持部分或全部 AMF 功能: 终止 RAN CP 接口(N2). 终止 NAS(N1),NAS 加密和完整性保护. ...

  10. 【转】webgame前台开发总结--虽然是10年的文章,但是也有参考价值

    一.webgame整个游戏流程: 1.预加载(打开游戏页面后,显示进度条,主要加载前期的登陆和创建角色资源,创建角色资源的加载可以放到进入创建角色界面的时候加载,因为玩家除了第一次进入游戏,其他时间基 ...

最新文章

  1. pyspark汇总小结
  2. 实例 18错误输出信息与调试信息
  3. java使用AES256解密
  4. html5中单选按钮的互斥应该,HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第6章表格与表单...
  5. SQL优化一例:GROUP BY的语句
  6. Python递归、反射、2分查找、冒泡排序
  7. mysql 中文字符 函数_MySQL基础之字符函数-Go语言中文社区
  8. 分布式常见面试题详解
  9. Adobe Flash cs4 下载安装
  10. 1234的平方根用计算机怎么算,平方根计算
  11. Python 玩转数据 19 - 数据操作 正则表达式 Regular Expressions 搜索模式匹配
  12. access select max_从峰米4k激光家庭影院Max开始,爱上看电影
  13. 广科院机器人团队邹子平分享学习知识
  14. 计算机access分数比例,[access查询]关于分数段统计问题
  15. 如何用python制作一张节日贺卡
  16. 通俗讲解单片机、ARM、MUC、DSP、FPGA、嵌入式错综复杂的关系
  17. 四-python爬虫学习--下载电视剧
  18. web前端开发-HTML+CSS基础入门 课程笔记
  19. Uber的成功绝非偶然
  20. c 语言中双向链表逆转编程题,C/C++ 双链表之逆序的实例详解

热门文章

  1. 查询各科成绩前三名的记录
  2. GAMIT/GLOBK入门简介和安装
  3. 虎牙直播Js说书人弹幕
  4. 威斯敏斯特教堂(西敏寺)墓碑上的话(WestMinster Abbey,When I was young and fre
  5. web前端知识——常见布局方案、文章排版、图片排版、某宝列表
  6. C语言:使用函数统计指定数字的个数
  7. 使用Web3j(JAVA)开发ETH钱包-1
  8. win10网络共享打印机设置
  9. Canceled future for execute_request message before replies were done The Kernel crashed while execut
  10. icpc2019南京区域赛