我正在用Flash CS5.5制作游戏,并将其导出到APK文件(Android的AIR)。
问题是APK文件实际上只是一个ZIP文件,所以你可以提取内容,里面有我的游戏作为一个常规的SWF文件。任何人都可以把这个上传到任何网站,并在那里玩这个游戏。
我不希望SWF文件工作,除非打开它应该,在APK文件中通过Android。
是否有任何方法可以通过ActionScript 3代码知道SWF文件是否已从APK文件中提取并已作为正常的SWF文件打开?
无论如何swf都会"打开"。但是,在决定是否允许swf运行更多代码之前,您可以在文档类中检查操作系统是什么。查看flash.system.Capabilities,您将找到可以嗅探操作系统的工具。
首先要注意的是:从技术上讲,你绝对没有办法阻止一个耐心而专注的人打开包装并试图在web上使用你的SWF。
但是你真正能做的是让黑客受苦,让他们很难逆转你的代码。在现实中,这是唯一重要的事情:当破坏防御的努力成本和利润与保护应用的成本相当时,你可能会说你的应用受到了保护。
- 在你的代码检查任何你可以检测启动在Android环境。操作系统,如scriptocalypse建议和/或Android API的可用性。阻止应用程序在不适当的环境中启动。或者,如果你愿意,改变应用程序流程,使其启动,但工作与主要残疾,如果不是在Android上启动。
- 使用像secureSWF或SWFEncrypt这样的混淆器
就我个人而言,我使用secureSWF,但有很多—选择您喜欢的
能力。操作系统的可靠性不高,因为linux用户可以在网页浏览器/桌面上查看它(我的HTC安卓系统报告linux操作系统)。
就我所见,版本是特定于玩家版本的,应该总是报告"and [version string]"-例如"and 10,2,150,60"
if( flash.system.Capabilities.version.slice(0,3).toUpperCase() != 'AND' ){
// ....oh noes! hide and destroy everything!
}
注。我+1你的script . calypse flash.system.Capabilities:)
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Capabilities.html版本它已经存在了一段时间(见player 9/air 1.0/等),并在API ref中定义,所以它不仅仅是一个hack
版本属性
版本:字符串(只读)语言版本:ActionScript 3.0运行时版本:Flash Player 9, AIR 1.0, Flash Lite 4指定Flash Player或Adobe®AIR®平台和版本信息。版本号的格式为:platform majorVersion,minorVersion,buildNumber,internalBuildNumber。平台取值为"WIN"、"MAC"、"LNX"one_answers"and"。下面是一些版本信息的例子:
WIN 9,0,0,0 // Flash Player 9 for Windows
MAC 7,0,25,0 // Flash Player 7 for Macintosh
LNX 9,0,115,0 // Flash Player 9 for Linux
AND 10,2,150,0 // Flash Player 10 for Android