AMF协议

[教程]AMF手动解析教程

楼层直达
 

只看楼主更多操作 楼主   发表于: 2011-04-24
易语言的AMF资料很少,所以弄个教程,GBB113的支持库要2000RMB,是用不到了
有的FLASH页游通信用AMF所以要自己解析了再编码发出去

一、AMF解析工具



1.Charles Proxy 3.5.2 这是最新版,百度有XX版       需要先安装java运行环境
 




在WIN7下用不了 
下载地址:http://download.csdn.net/source/2828201
不XX也行,就是打开的时候要等10秒,还有时间限制
安装方法,解压完打开charles_setup.exe安装完 - 打开crack目录下的patcher.jar(不是用WINRAR解压) - 选目录 比如安装在C盘 C:\Program Files\Charles\lib下的Charles.jar - 点击.patch!  XX完毕
打开Charles.exe 菜单栏的Help 里注册,随便写就行
  2 Firefox下的扩展firebug+AMF Explorer   建议下载3.6版火狐,4.0版本扩展可能不兼容




先到https://addons.mozilla.org/zh-CN/firefox/下载两个扩展firebug和AMF Explorer

  3 HttpAnalyzer V5以上的才有AMF解析
百度找下载地址吧,
  4 Httpwatch也能抓包,但是没有解析
百度找httpwatch7.0.23有汉化版和XX


觉得charles最好用,还有一款AMF解析工具,名字忘记了,不好用



二.AMF发送数据
我试过了 WinHttpRequest类和XMLHTTP类都不能发送AMF数据  因为发送不了字节集
只能用访问网页模块的那种和客户组件
访问网页模块里的提交数据要改成字节集
AMF里发送的都是AMF3的数据,接收的是AMF0数据
源码里已经有Integer、String、Number编码
Number就是易语言里的双精度小数型顺序相反
AMF数据里还有逻辑性什么的,没去研究,因为我没用到

AMF里发送数据全部是用POST的,POST地址只有一个,提交不同数据只需要改提交数据
三.关于AMF资料地址
AMF3整型分析http://topic.csdn.net/u/20101129/18/168db922-cad3-435c-80ae-2086a7ff8ef4.html?75074     在8楼
10楼http://topic.csdn.net/u/20090428/13/F6256C89-0E36-4EED-95C3-4FB4205772A3.html#r_58008707  
 这里的AMF学习1数据类型[转]  和 AMF学习2远程调用的封装[转]http://www.cnblogs.com/zhaoming/category/196535.html  
梦飞鸟博客  里面有明朝时代的源码http://www.yibana.cn/Blog/?post=25   
百度文库的AMF3协议中文版,我也看不懂,太复杂了http://wenku.baidu.com/view/eaf5d3c708a1284ac8504327.html 
再说明下,易论坛搜索AMF里的http://bbs.eyuyan.com/read.php?tid=213110&keyword=amf这帖子其实就是梦飞鸟博客里的明朝时代源码
不用去下载SWF反编译的东西,就算反编译出来里面的代码也看不懂,除非会AS的



四. 现在开始手动分析AMF数据
登陆的部分看源码吧,很简单
AMF3数据类型有




获得POST数据的方法,现在弄获取人物数据的
数据我已经抓好了





易语言里字节集数据为{0,3,0,0,0,1,0,16,115,95,105,110,116,101,114,102,97,99,101,46,99,97,108,108,0,3,47,49,55,0,0,0,82,10,0,0,0,1,17,9,5,1,9,5,1,6,57,115,95,109,101,115,115,97,103,101,46,109,101,115,115,97,103,101,95,108,105,115,116,95,112,97,103,101,114,9,5,1,4,6,4,1,9,3,1,6,57,115,95,112,108,97,121,101,114,95,105,110,102,111,109,97,116,105,111,110,46,103,101,116,95,105,110,102,111}
十六进制为
00 03 00 00 00 01 00 10 73 5f 69 6e 74 65 72 66
61 63 65 2e 63 61 6c 6c 00 03 2f 31 37 00 00 00
52 0a 00 00 00 01 11 09 05 01 09 05 01 06 39 73
5f 6d 65 73 73 61 67 65 2e 6d 65 73 73 61 67 65
5f 6c 69 73 74 5f 70 61 67 65 72 09 05 01 04 06
04 01 09 03 01 06 39 73 5f 70 6c 61 79 65 72 5f 
69 6e 66 6f 6d 61 74 69 6f 6e 2e 67 65 74 5f 69 
6e 66 6f



00 03为AMF3版本
00 00 Header个数个0
00 01 AMF主体有1个
00 10文本长度为16字节    十六进制0010转10进制为16
73 - 6C 文本内容 
00 03文本长度3字节
2f - 37文本内容
00 00 00 52不知道是什么,不过没什么用的
0A 传入了一个变量,应该是数组
00 00 00 01内容为1个字节
到了s_message.messag,前面2字节是表示长度  再前面的06表示文本型
04是表示整型



这些知道就可以,实际应用用不到




拿这个来说
这个是页游里移动到X坐标360 Y坐标156的POST数据
比如我想移动到350 156
那么先把请求头的数据保存到文件,用十六进制工具查看




 


上图中82 68是360 不是350 写错了

我的生成POST数据方法是这样的:
用HttpWatch中的数据导出功能  或者charles选中数据,右键Save Request保存为文件,,导出发送包的数据,然后用十六进制编辑器删去协议头数据,留下POST信息,然后在图片资源里面,选择扩展名为*.*,然后就可以看到导出的文件了,然后打开之,命名,OK制作完成!


也可以在易语言资源表 - 图片或图片组里添加这个文件,调试输出




POST数据为{0,3,0,0,0,1,0,16,115,95,105,110,116,101,114,102,97,99,101,46,99,97,108,108,0,3,47,52,50,0,0,0,44,10,0,0,0,1,17,9,3,1,9,5,1,6,39,115,95,109,97,112,122,111,110,103,95,116,97,115,107,46,119,97,108,107,9,7,1,4,130,104,4,129,28,4,1}


这里和十六进制工具里对比是差不多的
看最后面这
4,130,104,4,129,28,4,1
4为04整型
130 104为360
04整型
129 28为156
04整型 1是1
现在要把360改成350再发出去
{0,3,0,0,0,1,0,16,115,95,105,110,116,101,114,102,97,99,101,46,99,97,108,108,0,3,47,52,50,0,0,0,44,10,0,0,0,1,17,9,3,1,9,5,1,6,39,115,95,109,97,112,122,111,110,103,95,116,97,115,107,46,119,97,108,107,9,7,1,4,130,104,4,129,28,4,1}
把红字的拿掉再用Integer编码 (350) 组合完为:
{0,3,0,0,0,1,0,16,115,95,105,110,116,101,114,102,97,99,101,46,99,97,108,108,0,3,47,52,50,0,0,0,44,10,0,0,0,1,17,9,3,1,9,5,1,6,39,115,95,109,97,112,122,111,110,103,95,116,97,115,107,46,119,97,108,107,9,7,1,4}+Integer编码(350)+{4,129,28,4,1}


访问网页(POST地址,"POST",,,,,上面的数据)




整型解码方法

AMF3整型编码为:81 eb 7d 

将81 eb 7d转为二进制,是24位:10000001 11101011 01111101
去掉最高位,剩下21位:0000001 1101011 1111101
转10进制为30205
AMF3文本型编码为:就是ascii十六进制对应的
AMF3Number编码为:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值