相信寫AS3代碼的同學都用過Action Script Viewer、SWF Decompiler這些工具吧?它們確實很強大,但普遍有一個缺點:對參數(shù)和局部變量反編譯得不好,它們會用_arg1、_local1、param1和_loc_1來替換真正的參數(shù)和局部變量。雖然這不影響反編譯,但對于只是借鑒部分代碼的同學,相信很難理解這些無俚頭的東東吧? 最近我用ASV瀏覽代碼,幸運地發(fā)現(xiàn)它居然能準確地反編譯參數(shù)和局部變量。當然這是有前提的,那就是必須是反編譯調(diào)試版的SWF,對于發(fā)行版的SWF是沒有辦法的。大家知道,用Flash Builde等IDE默認就是生成調(diào)試版的SWF,添加SWC再生成就不是什么問題。另外,也可以解壓SWC文件,直接反編譯library.swf。所以說,SWC一不小心就讓AS3代碼暴露得一絲不掛。下圖是使用ASV瀏覽發(fā)行版的SWF看到的AS3代碼片段:復制代碼代碼如下:public function setAlpha(_arg1:Number,_arg2:String="Normal"):void{ var _local3:int=addExtGState({ ca:_arg1, SA:true, CA:_arg1, BM:("/"+_arg2) }); setExtGState(_local3);}很無俚頭吧,如果代碼再復雜一些,就更難懂了。 下圖是使用ASV瀏覽調(diào)試版的SWF看到的AS3代碼片段:復制代碼代碼如下:public function setAlpha(alpha:Number,blendMode:String="Normal"):void{ var graphicState:int=addExtGState({ ca:alpha, SA:true, CA:alpha, BM:("/"+blendMode) }); setExtGState(graphicState);}幾乎和原代碼一樣,當然,這部分代碼片段必須是在SWC就有的。 這樣看來,發(fā)布調(diào)試版的SWF不僅浪費,也是不安全的。發(fā)布SWC特別要注意這一點,最好發(fā)布時加密。
新聞熱點
疑難解答