AVM2 NetConnection 忽略 `objectEncoding` (AMF3 远程调用)
作者: kaidegit创建于 2026年9月15日更新于 2026年9月15日
标签bugunimplementedA-avm2amf
描述错误
** AVM2NetConnection'忽略了object Encoding':Flash Remoting总是发送AMF0,即使SWF设定了"object Encoding = AMF3",打破了AMF3再取用服务器(如PyAMF)**
A Flash 10 (AVM2) 游戏我存档时完全通过 Flash Remoting 进行通讯. 它的靴子圈 SWF 在连接( 已分解) 之前明确设置 AMF3 `com/kingdowin/TD Sheep/rpc/RemotingConnect.as':
行动记录 new.netConnect = 新建的 NetConnection (); obbject Encoding = Object Encoding. AMF3; 2. 这.netConnect.connect( rpcURL);
在"Ruffle"中,每一次调用都符合斯卡尔参数,但任何调用
在服务器上通过 AS3 `Array' 参数失败**。 具体地说,发送
工矿工人向矿山发送`camp.create mine',用`slave ids = ['<16-hex-user-id>]`,
和服务器回答 ` return msg config 35' (“这个奴隶没有)
已存在). 完全相同的流量在Windows上的"真正的闪光玩家"中有效.
** 循环原因**(按字节级别确认):
1. 不论 " 对象编码 " ,用于重放的硬码AMF0:
- `core/src/net connection.rs'-`flush queue ()' 建立`Packet {版本:AMFVersion:AMF0,.
- " 核心/弧度/avm2/全球/斜拉/网/网-连接.rs " = " 调用() " 用 " AMFVersion:AMF0 " 序列化论点
2. 具有“对象编码=AMF3”的真正的闪光播放器发送带有版本的信封
`0x0003' 信件正文仍为 AMF0- * framed * —— 一个严格的阵列标题
(`0x0a' + u32 arg count'),其论据各以AMF0`0x11'来写.
("这个值是AMF3") 将AMF3编码值包裹起来. 转过来
发送 " 0x000 " 信封,装有完整的AMF0尸体。
**为什么服务器破裂**:这款游戏的后端可能是Python/PyAMF. PyAMF 解码一个
AMF3 阵列作为 Python ** list**,但 AMF0 ECMA Array 作为 QQMixed Array 命令**
键入'"0","1","."——所以服务器重复了‘slave ids'并得到了"键"*
(""0""取而代之"身份",而商业层将奴隶报告为:
不存在。
** Byte- level A/B 证明**(相同的会话,相同的网关密钥,相同的参数):
QQ 请求表 服务器侧 “ slave ids” QQ 结果 QQ
|.
* * AMF0信封, ECMAArray * * * * : "a9164f2d9a3ffce3" (Ruffle今天发送的) * * * * * * : * a9164f2d9a3ffce3' (dit) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
`0x0003'信封,`0a 00 0001 11' + AMF3(Flash 发送的是什么)``['a9164f2d9a3ffce3'''(清单)`返回-代码0',地雷开始`.
** 复制步骤**:加载游戏、登录、输入村庄、单击
选个工人 选个班 按12: 大门
`camp.create mine' 总是因出错而失败,而真正的闪电侠接受错误。
预期行为
当一个 SWF 设置 `NetConnection.object Encoding = AMF3' (它也是 Flash 的 AS3) 时
默认通过“ NetConnection. Default Encoding = 3 ” , Ruffle 应发送闪存
Remoting 请求与 Flash Player 相同 :
- " 0x0003 " 信封版本;
- 消息正文 = AMF0 严格阵列框架(`0x0a' + u32 参数计数)
作为参数写入
. . . . . . .内容来源: ruffle-rs/ruffle