[原創]swf檔案的反編譯入門
/*------------------------------------------------------
作者: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
相關文章
- 安卓apk檔案反編譯2014-12-20安卓APK編譯
- [轉]andriod的apk檔案相關的編譯反編譯工具2011-09-09APK編譯
- ildasm、ilasm修改、反編譯 已經編譯的 dll檔案(c#)2016-03-20LDAASM編譯C#
- ecplise配置jad反編譯.class檔案2019-05-11編譯
- Reflector反編譯.NET檔案後修復2015-12-29編譯
- HTML載入FLASH(*.swf檔案)詳解2019-08-14HTML
- 使用ilasm 和 ildasm編譯和反編譯工具對DLL檔案修改2024-03-07ASMLDA編譯
- Reflector反編譯.NET檔案後修復【轉】2014-09-20編譯
- 使用Reflector和Filedisassembler逆向編譯反編譯.cs.dll檔案程式碼2019-05-10編譯
- 交叉編譯入門2020-02-17編譯
- android播放swf檔案2014-01-16Android
- Android Apk 檔案反編譯和重新打包的過程分析2019-03-04AndroidAPK編譯
- swf是什麼檔案格式 swf檔案要用什麼軟體開啟2022-04-03
- Java編譯與反編譯2021-03-20Java編譯
- Android反編譯:反編譯工具和方法2015-01-15Android編譯
- Rust 編譯器入門2024-10-10Rust編譯
- c#入門-編譯的概念2020-12-23C#編譯
- java加密保護jar包及class檔案,防止反編譯2018-11-14Java加密JAR編譯
- win/mac下反編譯Android安裝包-APK檔案2016-05-16Mac編譯AndroidAPK
- vue元件中,編譯後的檔案斜槓變成了反斜槓。2018-03-21Vue元件編譯
- 核心編譯2.6.13.4(原創)part12006-07-18編譯
- Hollis原創|深入分析Java的編譯原理2019-05-14Java編譯原理
- 反編譯apk2015-11-23編譯APK
- 【原創】【譯】匯入資料集2015-10-03
- dll反編譯(修改引用檔案、修改程式碼)再生成dll2022-04-01編譯
- 反編譯APK資原始檔與原始碼2015-11-23編譯APK原始碼
- python2 反編譯pyinstaller打包的可執行exe檔案2020-10-07Python編譯
- JIT 編譯器快速入門2019-02-21編譯
- CMake入門指南-編譯教程2016-05-10編譯
- gcc編譯cpp檔案2012-11-19GC編譯
- Android Apk反編譯系列教程(一)如何反編譯APK2019-04-14AndroidAPK編譯
- Mac平臺反編譯Unity編譯的安卓apk2017-09-06Mac編譯Unity安卓APK
- java反編譯工具2021-08-13Java編譯
- 反編譯 iOS APP2018-01-03編譯iOSAPP
- android 反編譯2024-10-04Android編譯
- 工程中的編譯原理 -- Jison入門篇2015-11-12編譯原理
- Java 反彙編、反編譯、volitale解讀2018-08-14Java編譯
- 如何在Android上播放swf檔案2018-09-18Android