Flash的加解密攻防戰我想己經上演了很多年
但沒有絕對的加密方法,只能盡量多加難度,讓有心人事需要花更多的力氣才能破解。
參考網址:
http://active.tutsplus.com/tutorials/workflow/protect-your-flash-files-from-decompilers-by-using-encryption/
http://makc3d.wordpress.com/2010/02/09/open-source-swf-obfuscator/
該作者使用的方法,是透過一個key值,將swf加工破壞, 變成了不是swf格式,
這樣當然軟體就無法讀取, 但自己也無法讀取。
而解密的方法,使用URLLoader將該swf當成Byte載入
然後透過本來的key值來解密
最後再用Loader將解密過後的Byte載入成flash的可視物件。
這樣至少別人下載你的swf檔時,還需要了解你的解密方法才能還原
當然這樣做,最外層的swf一定還是明碼,
那藏key值就變的很重要了
來分析一下奶老師我目前所知的方法,如果你有其他的點子,也歡迎討論喔。
decompile在這使用的是sothink flash decompile軟體。
方法1:將key值寫死在最外層的swf
答:那軟體一看就看到,有藏跟沒藏一樣。
方法2:將key值寫在外部的txt檔,用Embed表籤將其放到swf裡,
答:這樣至少使用軟體看時,只會看到ByteArray, 不會直接出現key。
方法3:跟伺服器要key值
答:如果走一般的get或post,還是明碼, httpwatch之類的軟體一攔就看的到
但可以改走amf格式的remoting傳值,更安全些
方法4:必殺之FMS傳值
答:最外層的swf一開始跟FMS主要連線要key值
因為FMS可以偵測呼叫者所在的網域是否為安全網域,是的話才連線
FMS走的是rtmp協定,更安全
缺:FMS不便宜就是了。
補充一下:
上面分享的二個網站,其中一位作者使用的方法:
http://wonderfl.net/code/30adf7cde9ac9e08d004d0756b04fa6b2223fd54
是將class的名稱改掉, 本質還是swf,只是層加閱讀的難度
但相對的,如果有寫Singleton Pattern的話,也就會失效
這點要注意一下
但沒有絕對的加密方法,只能盡量多加難度,讓有心人事需要花更多的力氣才能破解。
參考網址:
http://active.tutsplus.com/tutorials/workflow/protect-your-flash-files-from-decompilers-by-using-encryption/
http://makc3d.wordpress.com/2010/02/09/open-source-swf-obfuscator/
該作者使用的方法,是透過一個key值,將swf加工破壞, 變成了不是swf格式,
這樣當然軟體就無法讀取, 但自己也無法讀取。
而解密的方法,使用URLLoader將該swf當成Byte載入
然後透過本來的key值來解密
最後再用Loader將解密過後的Byte載入成flash的可視物件。
這樣至少別人下載你的swf檔時,還需要了解你的解密方法才能還原
當然這樣做,最外層的swf一定還是明碼,
那藏key值就變的很重要了
來分析一下奶老師我目前所知的方法,如果你有其他的點子,也歡迎討論喔。
decompile在這使用的是sothink flash decompile軟體。
方法1:將key值寫死在最外層的swf
答:那軟體一看就看到,有藏跟沒藏一樣。
方法2:將key值寫在外部的txt檔,用Embed表籤將其放到swf裡,
答:這樣至少使用軟體看時,只會看到ByteArray, 不會直接出現key。
方法3:跟伺服器要key值
答:如果走一般的get或post,還是明碼, httpwatch之類的軟體一攔就看的到
但可以改走amf格式的remoting傳值,更安全些
方法4:必殺之FMS傳值
答:最外層的swf一開始跟FMS主要連線要key值
因為FMS可以偵測呼叫者所在的網域是否為安全網域,是的話才連線
FMS走的是rtmp協定,更安全
缺:FMS不便宜就是了。
補充一下:
上面分享的二個網站,其中一位作者使用的方法:
http://wonderfl.net/code/30adf7cde9ac9e08d004d0756b04fa6b2223fd54
是將class的名稱改掉, 本質還是swf,只是層加閱讀的難度
但相對的,如果有寫Singleton Pattern的話,也就會失效
這點要注意一下
留言
http://code.google.com/p/doswf/