在我們?cè)O(shè)計(jì)與制作一份flash文件后,為了保護(hù)flash動(dòng)畫(huà)文件的安全,我們需要對(duì)其進(jìn)行加密,那么我們?cè)撊绾渭用躶wf格式的文件呢,小編這里為您分享幾種加密swf文件的方法。
目前比較流行的加密方法:
第一種:使用“swf encrypt”、或者doSWF軟件加密,doSwf是國(guó)人編寫(xiě)的,加密得很好,連movieClip都看不到。dowSwf加密大文件的swf有問(wèn)題,一個(gè)1M左右的swf,加密會(huì)出錯(cuò)。
第二種:采用byteArray二進(jìn)制加密,此種方法不會(huì)使swf變大,只是在原有的字節(jié)流中做混淆,對(duì)閃客精靈等軟件可以起到很好的防破解作用。網(wǎng)上又有源碼可以很好地做研究。網(wǎng)址://bbs.blueidea.com/thread-2900310-1-97.html 。但是此方法有一個(gè)弊端,就是需要一個(gè)解密的swf,解密中的密文還是會(huì)暴露。
先分析下byteArray的加密原理:
byteArray的加密原理是,先用:URLLoader把swf文件加載進(jìn)來(lái),得到URLLoader的data屬性(byteArray類(lèi)型),然后把這個(gè)byteArray數(shù)組進(jìn)行分解,得到一個(gè)8位的字節(jié)流。然后對(duì)這個(gè)字節(jié)流進(jìn)行位移(也就是加密的數(shù)字,文章中用的是+13),最后得到一個(gè)新的字節(jié)流數(shù)組,進(jìn)行保存。
解密的方法也是如此:先把文件導(dǎo)入進(jìn)來(lái),得到byteArray,分解成8位的字節(jié)流,(解密方法就是對(duì)字節(jié)流進(jìn)行反位移,也就是加密是+13,解密就是-13),這樣生成新的字節(jié)流數(shù)組就是可以使用的swf文件了。
這樣加密也暴露了只能采用數(shù)字加密的問(wèn)題,后來(lái)我又發(fā)現(xiàn)一個(gè)比較大的問(wèn)題,就是:加密最核心的原理是對(duì)字節(jié)流(8位)的加密,因?yàn)槭?位的,范圍只能是:0~255之間,采用超過(guò)255的數(shù)字加密也是會(huì)取余成255的,不信你用256這個(gè)數(shù)字加密看看,得到的是什么?竟然是加密后的swf,和原來(lái)的swf是一致的,原因就是256會(huì)變成0,位移+0,等于沒(méi)有變。因?yàn)檫@種加密方式生成的加密文件只能有256種,那么在0~255間一個(gè)個(gè)地試就能得到解密的swf。
為此可以改進(jìn)加密算法,使用字符串作為密文。把字符串轉(zhuǎn)為一個(gè)ASCII數(shù)組(如”abc”,對(duì)應(yīng)的ASCII數(shù)組為97,98,99),然后與文件的字節(jié)流數(shù)組進(jìn)行循環(huán)加密。如一個(gè)1K的swf,那么它有1024個(gè)字節(jié)流,第一個(gè)字節(jié)流與97進(jìn)行位移,第二個(gè)與98位移,第三個(gè)與99,第四個(gè)又循環(huán)與97加。解密的方法也只有拿到密文才能進(jìn)行解密。