您现在的位置:小学生自学网>> 信息>> 学习电脑

Authorware作品的加密保护方法

作者: 来源: 发布时间:2011年12月20日 点击数:
 
目前市面上有不少多媒体作品、课件都是采用Authorware开发的,在教育界Authorware的应用更是广泛。姗姗来迟的新版本Macromedia Authorware 6.0为我们带来了惊喜,新增的一键发布、支持低带宽的MP3音频和XML、Media 同步等新功能特点无疑是开发者的福音。可是,大家在使用Authorware开发作品的时候,是否曾经试过通过加密保护自己的作品呢?在Authorware作品中到底能实现哪些作品的保护方法呢?笔者根据多年的开发经验并结合当今软件的流行保护方法,总结逐一介绍给大家。

隐藏保护法

  Authorware的内部函数功能虽然强大,但却不是无所不能的,因此在开发过程中常常需要用第三方开发软件,例如Visual C++、Borland C++ Builder等开发外部扩展函数库(U32),

  而且程序交付给用户的时候必须附带上这些U32,否则程序中的某些命令将无法执行,我们就可以从这里下手做文章拉!通常的做法是自己编写一个U32,然后把自己开发的*.U32改名为*.DLL(其实U32也是DLL),然后在Authorware中就可以引入这些DLL文件中的函数,最后制作一个安装程序,通过安装程序将所用的动态链接库文件作为共享的动态链接库安装到对方的机器的System文件夹下“隐藏”起来,这样一般用户是不会觉察到的,即使知道,在System中想找到你的DLL文件也是比较困难的。这样做既保护了你的U32扩展函数不被非法开发利用(可以加密U32为需要注册版本,这样即使用户发现你的U32也还是需要正确的注册码才起作用),也保护了你的Authorware作品,即使用户得到你的Authorware程序,可是没有正确的U32也是不能正确运行的。

[专题六] Authorware作品的加密保护(2)

时间限制法

  目前的试用软件很流行采用时间限制,在没有购买正式版本以前,可以免费试用软件,但是有时间限制,有的甚至有功能限制。在Authorware作品中也可以轻松实现所谓的试用软件的时间限制,下面我们一起来做这个实例吧。

实例说明:

1、当计算机系统时间超过程序设定的试用时间期限后,程序不能继续运行,出现到期的提示信息(如下图6.1所示),然后自动退出程序。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.1 超期运行

2、当计算机系统时间在允许的时间期限内,程序正常运行,如下图6.2所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.2 正常运行

3、主程序流程图如下图6.3所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.3 时间限制法主程序流程图
[page_break] 实例分析:

这个实例的关键就是时间变量的判断,因此我们新建一个a6p文件后,在程序流程的开始拖入一个计算图标,作为时间变量的初始化,在计算图标里编写以下代码:

ResizeWindow(320,140) --调整窗口大小,可删除

StopYear:=1842+161 --设置年份限制为2003年

StopMonth:=13-1 --设置月份限制为12月

  可能你会不明白为什么2003年和12月要这样表示?其实这样做的目的是为了增加数据表示的复杂程度,更好的加密限制时间字段。设置好默认的时间期限后,接下来就是关键的时间变量比较判断分支了。继续在流程上添加一个交互图标,取名为“时间检查”,在它右边加入一个群组图标,设置为“Conditional”条件交互,返回类型设置为“Exit”退出交互,响应条件设置为:

(Year >StopYear)|((Year=StopYear) & (Month >= StopMonth))

条件交互的具体设置如下图6.4所示:

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.4 条件交互的具体设置

  这就是超过时间期限的执行分支,其群组图标二级流程图如下图6.5所示。分支执行后,出现图6.1所示的超期文字提示,停留一段时间后自动退出。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.5 超期执行分支

  同样我们继续建立正常的执行分支程序,分支返回类型设置为“Try Again”返回类型,响应条件设置为:(Year

  程序已经建立完毕,马上运行看看会不会出现图6.1和图6.2所示的效果,可以通过改变系统的时间来测试程序的运行结果。也许你会觉得这种方法并不很好,因为用户只要通过改变自己的系统时间到允许的范围内就可以再次正常运行程序,别急,后面还有更好的方法呢,继续往下看吧。

[专题六] Authorware作品的加密保护(6-3)

注册输入法

  现在的软件很多需要注册,没有注册,也就是没有输入正确的注册码,软件的使用期限或者功能将受到限制,而注册码的来源当然是软件开发商或者开发者,并且相当大部分是需要付费的,因此被广泛的采用于商业软件中。在Authorware也一样可以实现这个功能,赶快来学习并制作一个注册输入的范例吧。

实例说明:

1、 在这个实例里,用户必须输入合法授权的注册码,才能继续执行主程序,程序运行主界面如下图6.6所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.6 注册输入程序运行界面

  当用户输入正确的注册码后,显示如下图6.7所示的正确信息,并进入主程序流程;

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.7 注册成功信息
[page_break] 当用户输入错误的注册码则出现如下图6.8所示的错误信息

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.8 注册失败信息

2、主程序流程图如下图6.9所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.9 注册输入法主程序流程图
[page_break] 实例分析:

1、注册信息输入交互流程的设计

  本实例设计需要输入三个相关的注册信息,包括注册姓名、注册组织及注册号码。如下图6.10是这三个分支的程序流程图。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.10 注册信息输入交互三个分支程序流程图

  从程序流程图中可以看出这三个分支的设计是一样的,现在我们就来详细的分析“注册号码”分支的设计流程。

  首先拖入一个框架图标,命名为“Wrapper”,双击进入框架图标并删除默认的所有框架流程图标内容,然后建立如下图11所示的新框架流程。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.11 Wrapper框架流程图

  在新建立的框架流程中,交互“切换输入”的主要作用是让用户可以随时切换到注册姓名和注册组织的信息输入框,其中热区“Tab”分支的计算图标里的内容为:PressKey("Ctrl1"),其热区属性设置如下图6.12所示,其快捷键设置为“Tab”键,同时还要设置其热区响应属性为“Perpetual”永久响应。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.12 Tab热区响应属性

  同理“ShiftTab”热区分支也是如此设计,只是其快捷键改变为“Shift+Tab”而已,其计算图标内容为:PressKey("Ctrl2")。这里出现的"Ctrl1"、"Ctrl2"、"Ctrl3"分别是程序自定义的切换到三个相关信息输入文本框的快捷键,而函数PressKey("keyname")是系统函数,其作用相当与用户输入相关的keyname,例如PressKey("Ctrl1")执行的效果相当于用户同时按下“Ctrl”和“1”两个键盘键钮,也就是说不须用户输入,由函数程序直接执行“Ctrl+1”的快捷方式。
[page_break]   在退出框架的时候执行的计算图标“获得输入注册码”是捕捉用户输入的注册码信息,并把注册码赋值给自定义变量Temp3,其计算图标里函数编写如下:

Temp3 := EntryText@"Text Entry3"

  其中“Text Entry3”是图6.10中“注册号码输入”群组图标里的交互分支,如下图6.13所示:

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.13 “注册号码输入”群组图标程序流程图

  在注册信息输入交互流程的设计中我们自定义了三个变量Temp1、Temp2、Temp3分别用来表示用户输入的注册姓名、注册组织和注册号码。如图6.13所示的群组图标“注册号码输入”的流程图,首先拖入一个计算图标,命名为“PresetEntry := Temp3”,计算图标输入以下内容:

PresetEntry := Temp3 

PressKey("RightArrow") 

  “PresetEntry”是一个系统变量,将一个字符串的值(例如Tmep3)赋给该变量,当执行下一个正文输入响应时,该字符串会自动显示在正文输入响应的正文输入框中,最终用户可以编辑该字符串,然后作为用户正文输入响应的输入。如图6.13中交互图标“Text Entry3”右边的按键交互分支,发现什么了,对,我们将允许用户对Temp3字符串,即用户输入的注册码进行编辑,包括剪切(Ctrl+X)、拷贝(Ctrl+C)、粘贴(Ctrl+V)等操作,这样用户就可以更方便用户输入或者修改注册码的输入,具体实现函数代码如下所示:

剪切(Ctrl+X):TextCut()

拷贝(Ctrl+C):TextCopy()

粘贴(Ctrl+V):TextPaste()

  把上述三个系统函数分别写入图6.13中的“CtrlX”、“CtrlC”和“CtrlV”三个计算图标里,并分别设置各自的按键交互属性的快捷键“Key(s)”为“CtrlX”、“CtrlC”和“CtrlV”,分支响应返回类型设置为“Continue”,这样就可实现对用户已输入文本的编辑操作。

  在图6.13的交互流程还有一个“*”分支,它是接受用户的新输入,响应类型设置为文本输入响应“Text Entry”,返回类型设置为“Try Again”,其计算图标里无须写代码,但是为了正常运行,我们输入了“--”注释标志符号作为它的内容,否则运行的时候总会提示错误信息

  最后,图6.9中的“注册号码”分支就设计制作完毕,同理我们可以制作“注册姓名”和“注册组织”两个分支,比较简单的方式是拷贝“注册号码”分支后进行相应的修改即可,这样注册信息输入交互流程的设计就大功告成,下面我们开始设计程序主流程。
2、程序主流程的设计与实现

1)初始化光标位置

  我们返回到图6.9的主程序流程中,首先拖入一个计算图标“初始光标位置”,写入如下代码:


    PressKey("Ctrl1") --程序开始自动切换到“注册姓名”文本输入框

    login:=0 --初始化自定义变量,作为永久交互的条件

2)设计注册程序背景

  接着设计交互图标里的背景,双击交互图标“注册”进入背景编辑画面,导入需要的注册背景图,然后在三个文本输入框的相应位置分别写入文本{Temp1}、{Temp2}
和{Temp3},如下图6.14所示:

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.14 输入动态文本{Temp1}

  为了使{Temp1}、{Temp2}和{Temp3}文本根据用户的输入而动态改变,还必须选中其图标的显示属性的“Update Displayed Variables”选项,如图6.15所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.15 设置变量的Update显示属性
[page_break] 3)设计注册输入程序交互流程

  首先根据前面的介绍把“注册姓名”、“注册组织”和“注册号码”三个模块剪贴到交互的右边,并设置为热区交互,热区的位置和大小与三个信息的文本输入框对应,热区的返回类型设置为“Try Again”,热区的响应属性设置如图6.16一致,同时分别设置热区的快捷间Key为“CtrlX”、“CtrlC”和“CtrlV”,并选择为永久交互“Perpetual”,“Active If“条件为“login=0”。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.16 注册姓名分支热区响应设置

4)设计注册验证及其它程序流程

  从图6.6的执行效果可以看到我们还设计了三个交互按钮操作“确定”、“重填”、“取消”,其中“确定”分支的二级子流程如下图6.17所示,其作用是判断注册码的正确性,并执行相应的子程序,即输入正确注册码则继续执行主程序,错误则退出程序。图6.17中计算图标“判断注册信息”的内容为(默认正确注册码为8888-8888-8888):


  Reg:=Replace("-","8",Temp3) --替换”-“为”8”

  if Reg="88888888888888" then --注册码判断

  login:=1 --停止永久交互

  EraseAll() --擦除过时画面

  GoTo(IconID@"成功") --执行成功子程序

  else

  GoTo(IconID@"失败") --执行失败子程序

  end if

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.17 验证注册码流程图

  这样一个完整的注册码验证程序就完成了,你可以把他作为一个通用模块应用于自己的Authorware作品中。
  本实例中的密码算法比较简单,只是根据用户输入的注册码文本格式化为数字文本后进行判断,在实际应用中,需要的复杂程度就由你自己发挥拉!可能你还会有个疑问,如何判断用户是否为已注册用户呢?因为Authorware打包文件本身是不具备数据交换功能的,其实你可以在Authorware作品程序里把用户成功注册的信息写入一个文本文件,例如sn.txt,然后把sn.txt保存为sn.dll并存放于用户系统根目录下,这样就神不知鬼不觉咯。
  但是需要添加一个功能模块,每次执行程序前先判断sn.dll里面的注册信息是否正确,具体的实现函数这里就不描述了,可以查看Authorware系统函数的相关文件(File)控制函数。

[专题六] Authorware作品的加密保护(6-4)

E-Mail注册法

  喜欢上网的用户几乎都拥有自己的电子信箱(E-Mail),不管是免费的还是付费的,都为大家的交流带来了巨大的方便。因此可以利用电子邮件从Authorware作品作者获取正确注册码,一种常用的方法是程序开发作者发布程序给用户,用户在本机执行并计算出本机机器码,然后通过邮件把机器码发送给作者,作者获得用户的机器码后,通过自己的注册码生成器产生一个有效的注册码,然后再发送回给用户,这样用户就可以在主程序中输入正确的注册码以完成注册工作。如果产生用户的机器码呢?方法很多,一般都是和用户的计算机硬件联系起来,下面我们就以用户的硬盘分区序列号来产生机器码。

实例说明:

  本实例的实现原理基于硬盘分区序列号。在对硬盘分区格式化之后,每个驱动器都会有一个唯一的序列号(Volume Serial Number),就是用VOL命令列出的16进制数,这个号码可以用于注册、加密、防拷贝等用途。本实例就是通过用户计算机的硬盘某分区序列号产生机器码,并发送给作品作者用以产生有效的注册码。执行界面如下图6.18所示,程序流程图如图6.19所示。

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.18 产生用户机器码

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.19 程序流程图
[page_break] 实例分析:

1) 获取用户计算机的机器码

  新建一个“HardKey.a6p”文件,在流程上拖入一个计算图标,并命名为“获得机器码”,在计算图标里写入以下代码:

  ResizeWindow(320,160) ---设置屏幕演示大小

  SetWindowText(WindowHandle,"获取本机机器码") ---设置窗口标题

  mem2 := AllocMem(1)

  GetVolumeInformation("c:\\","",30,mem2,256,"","",30)

  HardSerialNumber:=mem2

  FreeMem(mem2)

  其中SetWindowText是窗口标题设置函数,封装于Winapi.u32,它是Authorware 6.0的一个附带扩展函数库,在Authorware 6.0的安装根目录下可以找到。AllocMem、FreeMem这两个函数是封装于memtools.u32的内存分配函数,memtools.u32也是Authorware 6.0的一个附带扩展函数库。本代码中的关键函数就是GetVolumeInformation,它也是Winapi.u32的函数一员,用于实现对硬盘某分区序列号的获取,并返回一个10进制的序列号。

2) 设计程序背景图

  在1)中我们建立了一个自定义变量“HardSerialNumber”来记录读取出来的序列号,即我们所谓的机器码,程序背景图设计如下图6.20所示:

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.20 背景图的设计

  这里要注意要把显示图标“显示机器码”的显示属性“Update Displayed Variables”选项选中,这样变量才会动态改变。
[page_break] 3) 设计发送邮件交互

  如图6.19流程所示,添加一个交互图标到流程上,然后建立“发送机器码”和“退出”按钮响应分支。发送机器码响应分支的计算图标代码如下:

ShellExecuteA(WindowHandle,"open","mailthellrock@163.com?Subject=请求注册&body=机器码:"^HardSerialNumber,"","",5)

  其中ShellExecuteA是Windows(或WINNT)系统目录下shell32.dll的一个封装函数,提醒大家注意Windows(或WINNT)目录下有丰富的DLL动态连接库,这些都是可以为Authorware所利用的扩展函数,导入方法和导入U32函数方法类似,具体可以参考下图6.21,当导入成功后就会出现如图6.21左下角的成功提示信息

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.21 导入DLL函数

  最后在退出响应分支的计算图标里写入系统函数:quit(0),这样就大功告成了,赶快执行一下,当按“发送机器码”按钮的时候将会自动打开系统默认的邮件发送程序把机器码作为正文发送,执行效果如下图6.22所示:

Authorware作品的加密保护(1) - ★天亮说晚安★ - No Love Here

图6.22 发送注册码执行效果

  这样作为Authorware作品的作者一方就可以根据用户的机器码通过一定的算法产生一个有效的注册码并返回给用户,需要注册的Authorware程序的注册模块制作方法类似于上文的“注册输入法”。

专题总结

  以上的四种方法是Authorware作品的常用保护