flash 加密解密的相關知識說明
2020-07-17 13:15:43
供稿:網友
希望大家了解一些解密方面的東西,對自己的心血好好保護。最好的方法就是完全不給,一旦作品發布,必須做好被人破解的準備。另外,無論何時,不是技術相當人之間的交流性質的話,不要發論壇短消息或郵件和我討論這一話題。
Q1:為什么要破解flash文件
我認為目前有五種性質:
一 是通過破解別人的文件,了解別人的編程思路,進行模仿或學習
二 漢化優秀flash軟件,游戲,讓大家分享。或因為游戲設置不平衡,改部分參數,如xxxx百倍經驗值版等等。
三 一些小公司,僅僅通過將別人的作品,改頭換臉,把自己的標望上面一打。
四 一些個人,行為同上。
五 通過flash破解,來了解flash加密技術。
而為什么加密,基本上原因就只一種,保護自己的心血。
Q2:怎么才算是破解了
由Q1,我們也可以這么分
一 反編譯出大部分代碼,尤其是核心代碼
二 需要得到所有的字符串,參數的修改
三 這是最無恥的,什么都破解的了。因為不需要完整破解,很多加個讀取的殼可能就能加水印了。
四 同上
五 此類基本同一
Q3:加密的總被破解了,再沒什么加密是安全的了吧?
Swf的文件格式,現在已經是透明的了,很多人,人云亦云的說,因為flash文件格式的透明,flash加密總是會被解開的。此說法完全沒道理。不過flash是腳本語言,它不能自己運行,必須要flashplayer或類似的東西進行解釋,所以不管怎么加密,你必須保證flashplayer仍然認識它。
由Q2,如有些方式的加密,反編譯后可以生成偽碼,而且偽碼也能運行,但是人看不懂,不能修改。這也能算加密成功。但是只要讓flash變成既可以運行,但是又不是人可以看懂的代碼,太難。目前見過幾個混淆可以達到這種效果,方式不詳。
有些方式的加密,用軟件完全反編譯不能。手動也非常辛苦,最后得不嘗失,即使破解了,也不方便修改。即使破解了一個,也不一定能破解同樣方式的第二個。這也算成功了。Doswf基本做到了這一點。不過doswf太能損壞文件了,且試用版水印+彈窗,我并不建議大家使用。
基本上,目前主要就用swfEncrypt直接加密了,要么自己想辦法,自己寫。最好的加密是把文件格式變成exe,用別的軟件給它加殼。Exe加解密技術成熟得多。但是缺點是,大家都是要的網絡上能流通的swf啊。
Q4:怎么加密?
Flash,現在主要就分動畫和程序。
Swf是tag標簽格式的文件,支持的標簽也并不多。而flash中的庫,是暴露在最外面的,自身完全無法加密。要保護動畫,必須要加loader的殼。而action部分,支持很多指令。Opcode其實和匯編碼沒多大區別。(另外這里插一句,有些人斷章取意的認為alchemy能讓flash執行效率高N倍,也沒道理,如果看過官方的詳細說明,外加avm2的說明的話,就應該知道,大多abc只是轉換成了flash本身支持的opcode,極少數為avm2額外的專門的解釋器,alchemy的出現,最多是為了方便別的平臺的程序員而已,不久以后可能我這觀點也行不通了)。因此,action部分能做很多文章,而市面上的加密軟件也多是在這部分上動腦筋。你也可以寫個loader,配合改一些動畫swf的數據。然后加密as部分的loader來達到加密動畫的目的。
不過現在,商業氣息太濃,產品沒測試好就拿出來賣了。真沒想到5個小時不到就能把swfEncrypt6.04完全搞定。即使因為沒讀完avm2的tag及一些debugtag而不能完全還原成源碼,也能輕松的注入自己的指令到加密后的文件中,能修改,也能刪除。
Q5:解密需要些什么?
解構的頭腦,對代碼的熟悉,外加大量的猜碼運氣。其實大多flash也沒怎么加密的。一般用軟件可以直接反編譯。swf8及以前,swf9,swf10在tag上有很大不同。我也沒研究透徹,主要講下之前的。Swf8及以前的是用avm1解釋,swf9如果包含byteArray asset的,和swf10基本可以視為一致。因此建議as3加密時,即使你用不上,也把byteArray,bitmapdata,loader類導入進去,在原先代碼基礎上,間接插上垃圾代碼。Swf9,swf10本身的廢話部分也比swf8及以前多多了,本身破解難度要高一些。
目前市面上這些解密的軟件,由效果大小來排
Swf10方面
閃客精靈,WINHEX,tamarin相關工具,nemo
Swf9方面
閃客精靈,ASV,WINHEX,tamarin相關工具,nemo
Swf8方面
Asv。flasm,閃客精靈,WINHEX,flash游戲修改大師
另外,如果是要破解游戲,必須還有一款用得熟練的游戲修改軟件。最近不知道有什么新的好,我用習慣了GameExpert,雖然功能很少。網絡方面,還得再加WPE(這軟件忒久了,,以前自己做星際和傳奇的簡單外掛就用的它,功能也不怎么樣,就沒發現換代的東西)。
至于什么flash吸血鬼,URLEDITOR,UE用處不大,flash橡皮插偶爾還能一用。
基本上,軟件是對于新手破解用的,這在Q1里面,新手一般是 一 三
四 這類人。閃客精靈和WINHEX因為功能強大,基本無可替代。而其他的,高手必須得有能力去寫軟件,去幫助你完成這些活。
Q6:flash可以動態修改?
很多人都試圖用金山游俠修改過flash游戲,結果沒人修改成功,實際上因為現在很多游戲都開始采用動態內存,所以基本上金山游俠這類軟件改不了。Flash可能是網頁上最早采用防護動態修改的技術了吧。
我以前成功過好幾次,理論上來講,基本上所有程序都是調內存里再運行,像flash,基本上和flashplayer一起裝內存里運行。所以改內存絕對是有效果的。只是flash數據和很多dos,win下面的游戲數值表示方法不一樣,因為動態內存,位置也總跑,用金山游俠基本很難找到。
不過現在有flash游戲修改大師這一工具,as2的游戲算是不需要費腦筋去想數值存在哪,在哪個范圍跳來跳去,用什么方法鎖定它們而不至于死機。游戲人只是因為游戲難度過大想修改,建議直接用flash游戲修改大師,就此打住。
Q7:swf如何加密才比較容易防止破解呢?
其實上面也提到過一些,一個成熟的加密:
1 加殼,一定要用URLLoader+ByteArray讀一次
2 讀這一次的過程中,可能會用到某個算法,這一算法一定不能每次一樣,可以隨機生成。而密匙完全可以以另一種算法,加密后放在同一文件中。比如說先讀某幾個bytes來知道是什么算法,再整個的解密。密匙藏法太多了,我另有一篇文章有相關的內容,目前還未發表過。
3 大量改方法名,所有都改,讓破解者很難猜。改法也完全可以隨機。
4 手動改跳轉和push命令部分。Push和jump歷來都是加密用兵之地。目前我也沒摸透什么改法可以讓最新閃客精靈和asv完全掛掉。所有加解密軟件都是很規矩的讀tag數據的,flashplayer有點不同。因為這個,所以一個用某軟件加密過的swf,不可能再被另一個加密軟件再加密了。可以視為后一個加密軟件沒能力解讀之前的加密。(這方面具體的我又寫了一篇文章,也暫未發表,很早以前看過有個老外寫過很多,有人翻譯了,可以網上找找看。記得那里面提到的方法已經對現在的閃客精靈無效了,不過很有啟發。)
5 加無效代碼進去。無效代碼基本是if之類,不怎么拖速度。目前只發現幾個加密swf能夠在真實代碼之間插進大量無效代碼。而大部分都是加在頭和尾。。。和沒加密沒什么區別。
6 死循環!一個讓除了flashplayer外,所有加解密軟件都掛掉的死循環。這招算比較狠的,不過好難啊,改jump也能產生這種效果,不過多半是flashplayer也掛掉,基本只能手動不靠批量,太依靠運氣。
Q8:怎么算是加密成功了?
由Q2:
一 首先得讓asv,閃客精靈完全捕捉不到真實代碼的影子。
二 能隱藏庫元件的話,加分!
三 閃客精靈和asv在反編譯時掛掉了
四 手動分析發現,代碼太多擾碼。好不容易解讀后,發現只是能達到效果的偽碼,卻不能還原成原始代碼。
五 只能完全手動分析,太耗時,放棄
基本上,一個加密至少要達到第四點才能算是成功了。如果你找到了辦法使你的swf可以讓閃客精靈和asv掛掉,恭喜你。之后想辦法在中間加大量的無效碼吧。這樣如果不是很嚴重的利益驅使,你的swf就沒人能破了。