/*------------------------------------------------------
作者:WiNrOOt[FCG]
使用工具:flasm http://www.nowrap.de/flasm.html
UltraEdit
Sothink SWF Decompiler
目的:讓帶有伺服器校驗的swf能在本地播放(主要目的還是希望各位高手有所指點)
目標:**工碩數學輔導swf檔案
--------------------------------------------------------*/
大家好!我是WiNrOOt,菜鳥一個。
各位大蝦見笑了,小弟在這裡說一下關於如何使帶有伺服器校驗的swf能在本地播放的問題。
對於各位高手來說很簡單,但是對於我這個外行人來說還是花了一點時間的。
==========================================================================
最近我需要一些教學資料,就上網找發現xdf的flash不錯,非常喜歡!呵呵就在bt上下了一些
發現資料不全,就萌生了破解之意!於是就對flash破解產生了興趣,但是對flash一竅不通就從頭學起。
正好一位朋友的**工碩數學輔導swf檔案(不是xdf)在本地不能播放,於是我們就開始了.......
1.swf檔案結構(轉貼一點)
先看一下官方的swf檔案格式說明在看就明白了
http://www.half-serious.com/swf/format/
******************************轉貼部分*************************************************
swf檔案的整體結構是 header + body的組成。
檔案的開始是一個[檔案頭]
它的結構如下:
位元組 名稱 說明
1 Signature “F”表示非加密格式,“C”表示加密格式
1 Signature “W”無特殊意義
1 Signature “S”無特殊意義
1 Version 版本號,它表示對應播放器版本
4 FileLength 整個檔案長度,低位在前
N FrameSize RECT結構體,表示螢幕大小,具體結構和長度根據資料變化,分析方法另外討論。
2 FrameRate 幀頻,預設為12,高位在前
2 FrameCount 幀數,表明檔案根下的幀數,低位在前
每一個tag都包括一個頭和一個資料體,頭有2種型別,短tag型和長tag型。
短tag型由2byte構成,前10個bit表示tag型別,後6個bit表示tag長度。
長tag型由6byte構成,前10個bit表示tag型別,後6個bit固定為全1,後4個byte代表tag長度。
tag的長度不同於檔案頭的長度FileLength,它是除去tag頭後的長度。
swf檔案是由1個head和1個body構成的。
下面餘下的就是swf檔案的body了。
整個檔案body是由大量的tag組成的,透過分析tag的head部分,可以立刻知道這個tag的型別程式碼和長度。
如果你無法識別這個tag的型別,也可以利用tag的長度,直接跳過這個tag。
這種方式保證了版本的相容性,即使出現了新的tag,老版本的播放器還是能夠解析完整個swf檔案而不出現錯誤,大不了就是不能提供新的功能而已。
以下就是swf檔案結構的一個形象概念。
(檔案header)(檔案body)
| (tag 1)(tag 2)(tag 3)(……)
| (tag header)(tag body)
| (tag 型別程式碼)(tag 長度)
******************************轉貼部分*************************************************
補充一點
tag分為兩種Definition Tags 和Control Tags
Control tag又被分為: Display List tags Control tags 和Action tags
個人理解:Definition Tags就是存放所有的資源
Control tag就是存放控制程式碼
透過以上了解我們知道,關於校驗的資訊一定存放在Action中
開始幹活...........
用Sothink SWF Decompiler反編譯
看看Action--------〉MainMovie
哇哈哈哈哈你才我們看見什麼了(菜鳥的表現)
程式碼:
// Action script...
// [onClipEvent of sprite 1 in frame 1]
//Component construct()
{
FV_AcceptedURLs_array = [];
FV_AcceptedURLs_array[0] = "www.****.cn";
FV_AcceptedURLs_array[1] = "www.****.net";
FV_AcceptedURLs_array[2] = "www.******.com.cn";
FV_AcceptedURLs_array[3] = "www.******.net.cn";
FV_AcceptedURLs_array[4] = "www.******.cn";
FV_AcceptedURLs_array[5] = "www.******.net";
FV_AcceptedURLs_array[6] = "www.******.com";
FV_AcceptedURLs_array[7] = "www.******.com";
FV_AcceptedURLs_array[8] = "www.******.net.cn";
FV_ExactURL_bool = false;
FV_AllowFromHDD_bool = false;
FV_ShowWarning_bool = false;
}
// [onClipEvent of sprite 1 in frame 1044]
//Component construct()
{
FV_AcceptedURLs_array = [];
FV_AcceptedURLs_array[0] = "www.****.cn";
FV_AcceptedURLs_array[1] = "www.****.net";
FV_AcceptedURLs_array[2] = "www.******.com.cn";
FV_AcceptedURLs_array[3] = "www.******.net.cn";
FV_AcceptedURLs_array[4] = "www.******.cn";
FV_AcceptedURLs_array[5] = "www.******.net";
FV_AcceptedURLs_array[6] = "www.******.com";
FV_AcceptedURLs_array[7] = "www.******.com";
FV_AcceptedURLs_array[8] = "www.******.net.cn";
FV_ExactURL_bool = false;
FV_AllowFromHDD_bool = false;
FV_ShowWarning_bool = false;
}
//為了避免不必要的麻煩這裡隱去網站資訊
大家注意FV_AllowFromHDD_bool = false;
我是傻瓜,但我知道它定義了一個變數,讓它等於false
變數名是什麼?AllowFromHDD允許從硬碟播放?
呵呵,我很懶的~~~~大家都知道
所以我們就只要修改FV_AllowFromHDD_bool = true就能看了(猜想)
可是怎麼才能修改呢?Sothink SWF Decompiler是不能修改的(也許我沒找到^_^)
我們請出今天的主角:flasm http://www.nowrap.de/flasm.html
先來看一下幫助
程式碼:
flasm command filename
command
-d 反編譯 SWF檔案到控制檯(cmd)
-a 編譯Flasm project
-u 更新SWF, replace Flasm macros(看不懂)
-z 壓縮SWF with zLib
-x 解壓縮 SWF
-d foo.swf
Disassemble foo.swf to the console.
-d foo.swf > foo.flm
反編譯foo.swf儲存到foo.flm. 最簡單的方法 flasm foo.swf 建立 foo.flm 到相同的資料夾.
-a foo.flm
編譯 foo.flm and 更新 在SWF 檔案中的定義。
建立備份 .$wf .
-u foo.swf
反編譯foo.swf 到臨時檔案.
Execute Flasm macros embedded in SWF.
Make trivial optimizations automatically:
remove double nots, replace 0.0 with 0, rebuild constant pools, clear register arguments.
Create .$wf backup, update the original SWF.
It's a good idea to update the final version of SWF with flasm -u. Don't expect the SWF to be noticeably faster, it will just make it a bit smaller.
-x foo.swf
Decompress foo.swf, create .$wf backup.
-z foo.swf
大概翻譯一下(後面的看不懂)
呵呵我們可以看到有2個flasm command我們需要
-d反編譯
-a編譯一下
呵呵,開工!!!!!!!!!!!!!!
執行cmd找到flasm所在的資料夾flasm -d 07.swf > 07.flm(或者flasm 07.swf)
看一下flash所在的目錄生成了一個07.flm的檔案
然後用UltraEdit開啟--替換“FV_AllowFromHDD_bool = FALSE”為“FV_AllowFromHDD_bool = TRUE”
儲存!
就緒flasm -a 07.swf
07.flm successfully assembled to 07.swf, 2829511 bytes
呵呵,執行一下,ok了~~~
===========================================================================
其實這篇文章非常簡單,各位高手不要笑偶~~~~
呵呵,但是對於混亂器的東東,我就不知道怎麼弄了
希望各位高手指點~~~~這裡向您請教,希望哪位高手能指點一二
(宣告:本人只是用來研究,並無其它商業目的)
WiNrOOt[FCG]
17:21 2004-8-3
e-mail: winroot@gmail.com
blog: http://blog.csdn.net/winroot