Flash破解與防破解(轉載)

也談Flash破解與防破解

在一些名門論壇,談論破解之術被明文禁止甚至會招來不盡的鄙視。我一直都對這個觀點有種很異樣的感覺。誠然,尊重原創是一種美德。然而對於不會說話的工具而言,其本身又豈會有善惡之分?有善惡之分的,是使用這些工具的人。

因爲無法控制其中的尺度,只好一盡排斥,這是中國官方乃至國際官方一慣的作風。言論自由成爲人人崇尚卻又時時爲其所害的一面幌子。自由,也有度。

破解和防破解是必將同時存在的對立體。如同製造病毒和防範病毒一樣。因爲製造病毒的言論從不會公開出現在一些名門場合,所以每當病毒來襲,防範的一方總是措不及防。這是當然,世上有幾名黑客會自報家門?

幸運的是,Flash 破解是一種公開的技術。然而不幸的是,這種公開的技術卻被鄙視爲一種下流手段。說句公道話,這裏面確實有一些正人君子,可是更有一些人前一套人後一套的道貌岸然之士。這讓我想起一句話:“寧做真小心,不做僞君子。”

既然如此,對於這種神奇的技術,爲什麼不能堂堂正正的來討論?我們更希望看到的,不是這種偷偷摸摸,而是從破解中汲取,從防範中得到。

 

一、破解篇

這裏所談的破解,包括提取swf、破解已加密及未加密的swf,即通常所說的“swf to fla”。

獲取swf的工具

  • Flash Saver - 保存網頁中的swf
  • Flash文件格式轉換器(FlashChanger) - 轉換未加殼的exe爲swf
  • Flash吸血鬼 - 不得已時用之。
    提取範圍很廣,只要能看到Flash的窗口,包括加殼及未加殼的exe、網頁等等。在使用Flash吸血鬼提取swf的過程中建議不要進行其他操作,否則速度會變得極其緩慢,配置不好的機器有可能死機。這也是這款軟件目前版本(v2.2)最大的一個不足之處。如果想中止程序,可以在任務管理器中結束。

使用Temporary Internet Files(IE緩存)下載MV、SWF等資源

偶爾會有網友問我關於網上 MV 如何下載,其實方法很簡單,只要到 Temporary Internet Files 文件夾下就能找到想找的大部分網絡資源。

Temporary Internet Files 是 IE 的臨時文件夾。目錄一般在C:/Documents and Settings/你的用戶名/Local Settings/Temporary Internet Files

使用 Temporary Internet Files 查找資源的技巧:先清空 Temporary Internet Files,然後用 IE 打開或刷新你要找的資源 (比如 MV) 所在的網頁。再刷新 Temporary Internet Files 就能看到了,如果資源比較大,需要過一會,等下載完後再刷新才能看到。

有時,部分資源會被隱藏。查看 Temporary Internet Files 的屬性可以斷定裏面有文件,可是裏面的內容卻看不到。此時,用 WinRAR 壓縮一下 Temporary Internet Files 就能看到了。爲了不浪費時間,壓縮的時候,壓縮方式請選擇“存儲”。爲了便於搜索查找,可以把壓縮後的 Temporary Internet Files 解壓到另一個目錄下,裏面的東西此時已經一目瞭然,分別分佈在 Content.IE5 文件夾下的四個子文件夾中。

可以將 Temporary Internet Files 移動到其他分區下,一方面可以給系統分區減負,另一方面也便於查找。移動方法如下
Internet 選項 → 常規選項卡 → 在“Internet 臨時文件”區點擊“設置” → 移動文件夾 → 選擇一個分區,例如選擇 D,就把 Temporary Internet Files 移到了 D 盤的根目錄下。最後會提示重啓,其實不是重啓,是註銷。記得保存當前的其他工作,按確定註銷。

從Word中提取Flash
測試環境:WindowsXP / Office2003

  1. 需要一款16進制編輯工具WinHex
  2. 打開含有Flash的Word文檔,點擊“控件工具箱”的“設計模式”按鈕進入設計模式,選擇Word中的Flash,複製粘貼到任意文件夾,會看到一個“片段”文件。
  3. 打開WinHex,將該“片段”文件拉到WinHex中,單擊下拉菜單“搜索”→“查找16進制值”,搜索“465753”,在搜索到的“465753”中的“4”位置上單擊右鍵,選擇“選塊開始”。
  4. 繼續“搜索”→“查找16進制值”,搜索“3A5C”,然後按住F3,直到出現“3A5C未找到”,點擊“是”,在最後搜索到的“3A5C”中“C”位置上單擊右鍵,選擇“選塊結尾”。(注:少數情況可能會搜索不到“3A5C”,則改爲搜索“3A”或“5C”,方法相同)。
  5. 在選塊內任意處點擊右鍵→編輯→複製選塊→進入新文件→輸入文件名 (如test.swf) →保存。

常用破解工具

談到破解,很多朋友都會想到時下流行的閃客精靈。以下爲常用的破解工具,按我使用的頻繁程度,分別有:

  • 碩思閃客精靈(Sothink SWF Decompiler)
  • Action Script Viewer(ASV)
  • Imperator FLA(有使用者譯爲“羅馬統治者”)
    (這是我最早認識的用來還原swf的工具,可惜一直在關注也沒有發現2.0以上的破解版,只有1.6.9.8的破解版,這已經是3年前的版本了,只對Flash6.0以下有效。)
  • 碩思閃客之錘(Sothink SWF Quicker)

以上四款,以Decompiler最爲常用。ASV雖然強大,但在實用性方面卻不如Decompiler,這應當也是爲什麼數年來Decompiler能夠長久風靡的原因。而ASV對付Flashincrypt加密過的swf卻是輕而易舉,這大大彌補了Decompiler的不足。不少網友知道用ASV來查看swf,但是不知道如何使用它來將swf還原成fla,以5.01版本爲例,只需兩步:

  1. 打開等待破解的swf文件(支持拖放打開),輸出重建數據(File → Export Rebuild Data (JSFL)...)到某一目錄下,例如:桌面/新建文件夾。
  2. 雙擊目錄下的“rebuildcommand.jsfl”,系統將啓動Flash重建fla文件。根據原swf文件的複雜程度,重建fla所需的時間將有所區別。

破解附言

破解swf,依賴的主要是現成工具,多款工具綜合使用,一款不行試另一款,如果作者有意加密,視破解者自身水平,在獲取swf時將遇到規模可大可小的困難,在破解時亦將不可避免的多花些許心思。如果遇到 SWF Encrypt 加密過的作品,只能對其中的AS無奈了。前幾天聽聞閃客互聯的獵人兄對 SWF Encrypt 有破解之法,然而似有賣關之嫌,未見其實。

 

二、加密篇

加密方法流傳不少,此處只談我所知的較爲實用的方法:

更改後綴,避開 Flash Saver 等下載工具

此方法可有效避開 Flash Saver 等下載工具。使提取者不得不從緩存中查找文件,一定程度上增加了提取難度。後綴可改爲 gif、jpg、txt 等等。雖然可以更改後綴,然而在插入到網頁時,仍然需要以 swf 的形式插入,使用此 swf 來加載改過後綴的影片。

限制 Flash 在指定域名/網址中播放 (Flash 防盜鏈)

爲了便於閱讀,以下是沒有註釋的代碼:

url = "http://www.zhugao.cn";
if(_url.substring(0, 20)<>url){
gotoAndStop(2);
}else{
gotoAndPlay(3);
}

如果要允許多個域名,可以這樣寫:
url = "http://www.zhugao.cn";
url2 = "http://zhugao.cn";
if((_url.substring(0, 20)==url) || (_url.substring(0, 16)==url2)){
gotoAndPlay(3);
}else{
gotoAndStop(2);
}

注意:用此方法,設計過程中導出時的技巧:
用IE打開先打開指定目標網址,以避免在導出時頻繁彈出窗口,如果無效,請將默認瀏覽器設置成IE,關閉導出時的player窗口即可繼續編輯。有時Flash軟件會因此發生錯誤而被強行結束,導出前請保存文檔,切記!

常用加密工具

  • SWF Encrypt
    可有效防止目前流行的幾乎所有破解工具對其所加密作品的AS查看。2006年10月更新爲3.0.12,儘管加密後文件仍然有明顯的增大(視原swf的複雜程度,增大幅度有所不同),然而令人振奮的是,已經支持放射狀漸變,支持Flash8.0。加密技巧:分解swf逐個加密,以儘量避免加密後單個文件體積龐大的問題。
  • Flashincrypt
    可輕易防止閃客精靈目前的版本對其所加密作品的AS查看,加密後的文件幾乎保持原文件大小。遺憾的是不能防止 Action Script Viewer 5.0 以上的版本。

    適當應用與javascript結合

    加密JS,從而實現間接加密swf。相關工具及例子:

    • T4nk JS混淆工具
      用於javascript的混淆加密。
    • Encrypt HTML
      加密網頁腳本,包括 HTML source code, javascript, VBScript, text, links and graphics 等。
    • 從Flash到JavaScript的通訊,從JavaScript到Flash的通訊
    • 控制 Flash Player 的 JavaScript 方法一覽表:
      ·播放動畫:Play()
        例:(網頁中的 Flash id).Play();
      ·停止動畫:StopPlay()
      ·動畫是否正在播放:IsPlaying()
      ·跳轉到某幀:GotoFrame(frame_number)
      ·獲取動畫總幀數:TotalFrames()
      ·回傳當前動畫所在幀數:CurrentFrame()
      ·使動畫返回第一幀:Rewind()
      ·放大指定區域:SetZoomRect(left,top,right,buttom)
      ·改變動畫大小:Zoom(percent)
      ·使動畫在 x,y 方向上平移:Pan(x_position,y_position,unit)
      ·返回動畫被載入的百分比:PercentLoaded()
      ·加載動畫:LoadMovie(level_number,path)
        例:(網頁中的 Flash id).LoadMovie(0, "***/***.swf");
      ·movie_clip 跳轉到指定幀數:TGotoFrame(movie_clip,frame_number)
        例:(網頁中的 Flash id).TGotoFrame("_root.實例名.次實例名",幀數);
      ·movie_clip 跳轉到指定標籤:TGotoLabel(movie_clip,label_name)
        例:(網頁中的 Flash id).TGotoLabel("_root.實例名.次實例名","標籤名");
      ·回傳 movie_clip 當前幀:TCurrentFrame(movie_clip)
      ·回傳 movie_clip 當前標籤:TCurrentLabel(movie_clip)
      ·播放 movie_clip:TPlay(movie_clip)
      ·停止 movie_clip 的播放:TStopPlay(movie_clip)
      ·獲取變量:GetVariable(variable_name)
      ·變量賦值:SetVariable(variable_name,value)
      ·call 指定幀上的 action:TCallFrame(movie_clip,frame_number)
      ·call 指定標籤上的 action:TCallLabel(movie_clip,label)
      ·獲取 movie_clip 的指定屬性:TGetProperty(movie_clip,property)
      ·設置 movie_clip 的指定屬性:TSetProperty(movie_clip,property,number)

    在Word中插入Flash
    測試環境:WindowsXP / Office2003

    可用在獨立文件給客戶看的時候,儘管可以用前述方法從word中提取swf,然而此方法仍然具有一定防範效果。

    1. 新建一Word文檔並保存。
    2. 在Word中依次單擊下拉菜單“視圖”→“工具欄”→“控件工具箱”。
    3. 在“控件工具箱”中點擊“其他控件”,選擇列表中的“Shockwave Flash Object”。
    4. 右鍵單擊插入進來的Flash播放控件,選擇“屬性”。
    5. 在“屬性”窗口的“Movie”欄輸入Flash動畫的路徑及文件名,需要用絕對路徑,可採用以下兩種:
      file:///C:/test/test.swf
      http://www.zhugao.cn/test.swf
    6. 將“EmbedMovie”項設置爲“True”,使Flash嵌入到Word中。“Height”和“Width”分別爲Flash的高和寬。“Scale”默認爲ShowAll,爲縮放模式,始終顯示Flash中的所有內容,如果改爲NoScale則始終按1:1比例,不會縮放Flash中的內容。
    7. 單擊控件工具箱上的“退出設計模式”按鈕,在Word中即可播放Flash了。再次按下該按鈕則暫停播放,進入設計模式。如當時未顯示Flash,請保存退出Word,再打開該Word文檔,點擊“退出設計模式”按鈕即可看到Flash。

    打包成加殼exe

    用Flash的默認程序打包的exe很容易轉成swf,SWFKit是一款很不錯的加殼打包軟件,不易被還原。

    三、後記

    破解時需要多種方法或工具綜合使用,加密亦然,需根據用途綜合加密。

    對於網絡用swf的推薦加密方案
    更改後綴,限制在指定域名播放,分解成多個swf並用SWF Encrypt加密。
    此方案主要依賴於SWF Encrypt,重在保護作品的AS,一旦SWF Encrypt遭到破解軟件的有效攻擊,此方案即宣告破產。

  • :加密案例:Family Player

 

url = "http://www.zhugao.cn";

/*
以下判斷網址的前 20 個字符(字符數根據你的網址作相應修改),如果與"url"不一致則播放失敗。注:swf 可以放在任意目錄下,只要網址的前 20 個字符是正確的。
*/

if(_url.substring(0, 20)<>url){
gotoAndStop(2);

/*
這裏可以做一些東西,例如:將發佈設置中的“本地回放安全性”設爲“只訪問網絡”,然後在這裏做無數的彈窗
onEnterFrame = function(){
getURL("http://www.zhugao.cn", "_blank");
}
*/

}else{
gotoAndPlay(3); //跳到正常播放
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章