AMF手動解析教程 |
樓層直達![]() |
易語言的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編碼為: |