blog.Ring.idv.tw

Open Source

SWF Dump Tools

剛剛找到一個AIR : SWF dump tool,它是用Tamarin project中的「abcdump.as」來寫成的Adobe AIR應用,不過感覺上似乎沒有「swfdump」來得強大~

從「利用swfdump反組譯ActionScript 3.0」的一文中~ 其實「swfdump.exe」還是利用「Java」程式去執行的~ 為何如此說?我們可以看一下「swfdump」(shell script)的內容:

.....
java $VMARGS -jar "$FLEX_HOME/lib/swfdump.jar" "$@"

所以我將整個「swfdump」會用到的jar檔抓出來~ 並寫成一個批次檔來處理~ 這樣大家就不需要那麼麻煩還要抓原始檔然後再編譯等等的工作步驟了! ^^

批次檔內容

@java -jar "%~dp0swfdump.jar" %*

下載點:swfdump

下載後請直接解壓縮~ 然後將「c:\swfdump\bin」設定至「Path」的環境變數即可~

操作方式

swfdump -abc helloworld.swf

2008-02-26 14:38:39 | Add Comment

利用swfdump反組譯ActionScript 3.0

Open-Source Flex SDK project 提供了一個命令列的小工具,稱為:「swfdump」,我們可以用它來反組譯包含ActionScript 3.0的SWF檔案,不過要利用此工具之前~ 必須先做一些相關的處理。

swfdump建置步驟

Step 1. 請設置好你的Apache Ant,並設好「Path」環境變數。

Step 2. 確認你的「JAVA_HOME」環境變數已經指到你的JDK目錄夾位置。

Step 3. 請下載Flex SDK的原始碼,可參考「Flex 3 is Now Open Source !!」。

Step 4. 切換工作目錄至Flex SDK原始碼中的「trunk\modules\swfutils」,並輸入「ant」來編譯swfutils底下所有的Java程式並打包。

cd c:\flexsrc\trunk\modules\swfutils
ant

Step 5. 切換至「trunk\bin」,然後進行反組譯「helloworld.swf」。

(這裡我們用Flash CS3開發一個含「trace("Hello World");」的測試檔案)

cd c:\flexsrc\trunk\bin
swfdump -abc helloworld.swf

接著你就可以看到反組譯後的結果了~

…………………
   01 02 01 0A 0B 0A    function helloworld_fla:MainTimeline::helloworld_fla:frame1():
    maxStack:2 localCount:1 initScopeDepth:10 maxScopeDepth:11
    D0                       getlocal0     	
    30                       pushscope     	
    5D 04                findpropstrict	:trace
    2C 09                pushstring    	"Hello World"
    4F 04 01           callpropvoid  	:trace (1)
    47                       returnvoid    	
    0 Extras
    0 Traits Entries

    02 03 01 0A 0B 0F    function helloworld_fla:MainTimeline::helloworld_fla:MainTimeline():
    maxStack:3 localCount:1 initScopeDepth:10 maxScopeDepth:11
    D0                       getlocal0     	
    30                       pushscope     	
    D0                       getlocal0     	
    49 00                constructsuper	(0)
    5D 05                findpropstrict	:addFrameScript
    24 00                pushbyte      	0
    60 03                getlex        	helloworld_fla:frame1
    4F 05 02           callpropvoid  	:addFrameScript (2)
    47                       returnvoid    	
    0 Extras
    0 Traits Entries
…………………

Good luck! ^^

參考資源

Disassembling a SWF with swfdump

2008-02-25 23:18:22 | Comments (2)

Flex 3 is Now Open Source !!

Adobe Open Source.包含了Adobe Flex SDKBlazeDSTamarin等開放原始碼的計畫。

而我們可以取得最新的Flex SDK原始碼~

先安裝一下Subversion client:

Windows:http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe

接著就直接給它抓下來:

mkdir flexsrc
svn checkout http://opensource.adobe.com/svn/opensource/flex/sdk flexsrc

下載檔案很多~ 將近800MB~ 所以有點耐心放著讓它慢慢載...

相關資源

Grab the source code to the Flex SDK

Flex SDK Downloads

2008-02-25 21:55:02 | Add Comment

IP地理位置解析原理

上圖是根據我部落格透過「whos.amung.us」所記錄的一些參觀者的來源分佈~ 從圖中可以知道參觀者來自於各個不同的國家~

還有像是「用Zend_Http做一個IP地理位址查詢」這樣諸如此類的應用~ 技術上是如何達成的呢?

我們可以透過程式來取得Client's IP,但如何能知道此IP是隸屬於哪個國家呢?

這時就需要透過IP<->Country的對應表來實現~

找了一下~ 發現有兩個好的資源可以下載這類的對應表:

ip2nation

The IP-to-Country Handbook

這裡我拿「The IP-to-Country Handbook」來解析一下:

IP-to-Country解析

首先請先下載「latest IP-to-Country Database」這一份對應表~

它所呈現的格式如下所示:

"0033996344","0033996351","GB","GBR","UNITED KINGDOM"
"0050331648","0083886079","US","USA","UNITED STATES"
"0094585424","0094585439","SE","SWE","SWEDEN"
...

欄位與欄位之間用「,」來隔開~ 它們依序分別為:IP位址起始,IP位址結束,2字元國碼,3字元國碼,國家名稱

這裡它將用「.」區隔的IP位址改成用長整數來表示~

也就是說~ 我們必須將IP位址先轉換成長整數,然後比較IP位址起始,IP位址結束的範圍即可得出結果~

轉換公式:

IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D

舉個例子:

IP位址:64.233.189.99

轉換:

X = 64 x (256*256*256) + 233 x (256*256) + 189 x 256 + 99
X = 64 x 16777216 + 233 x 65536 + 189 x 256 + 99
X = 1089060195

所以從對應表找出「1089060195」介於IP位址起始值IP位址結束值即可得出解答!!

P.S. PHP程式可以善加利用「ip2long()」、「long2ip()」兩函式來轉換

2008-02-15 16:40:12 | Add Comment

為什麼我沒學過Functional Programming...

(MapReduce執行架構圖)

MapReduce: Simplified Data Processing on Large Clusters.最近有時候都會拿起這份Google's paper來瞄一瞄~ 此paper是由Jeffrey DeanSanjay Ghemawat所共同發表於「OSDI'04: Sixth Symposium on Operating System Design and Implementation, San Francisco, CA, December, 2004.」

而前陣子Google大軍來台推廣的「Cloud Computing」就是建構在「MapReduce」programming model之上~ 重點就在於MapReduce的概念係取自於「Functional Programming」,換句話說,如果不了解「Functional Programming」就不可能創造出「MapReduce」(Can Your Programming Language Do This?),而我... 還真沒玩過,對「Functional Programming」一點概念都沒有,更別說要馬上就看懂這一篇paper~ 目前看的進度只有二、三趴... A害~ ||>"<||

不過看到目前為止還是蠻有收獲的~ 我論文所用到的Thread Pool概念上其實是有點類似的,差別在於我的worker是分別用來負責下載和剖析的處理,而MapReduce則是用來處理map和reduce的工作,也就是說兩者都要先進行下載/map工作後才能交由另一個Pool中的worker接著進行剖析/reduce的工作,雖然如此~ 但還是要趕緊從「Functional Programming」來打底~ 剛剛Survey了一些相關資料~ 就先寫下來~ 之後再慢慢的來咀嚼...

相關文章

一個值得研究的領域 - Hadoop

Google - Cloud Computing

Functional Programming相關文章

函數編程之風雲再起

談 F u n c t i o n a l P r o g r a m m i n g

Introduction to Functional Programming

Haskell (Functional Programming) 相關資源

Haskell - wikipedia

Haskell - offical website

Programming in Haskell

Haskell Tutorial for C Programmers

Learn Haskell

2008-02-13 22:57:09 | Add Comment

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment