[轉]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編碼為:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM