欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

磁盘ID在ASP源码防拷贝中的应用

程序员文章站 2022-07-03 14:08:31
自从asp(active server pages)问世以来,因其可以创建健壮易于维护、与平台无关的应用,asp技术受到了越来越多网络程序员的喜爱,使用asp从事web开发的人也越...
自从asp(active server pages)问世以来,因其可以创建健壮易于维护、与平台无关的应用,asp技术受到了越来越多网络程序员的喜爱,使用asp从事web开发的人也越来越多。但asp只是一种非编译型的、在服务端运行的脚本语言,采用明文(plain text)方式来编写,即使采用了asp程序对asp进行加密,也不一定能保证发布到运行环境中去的asp应用程序不被非法拷贝。对于高权限的管理员,可以轻而易举从服务器端拷贝出asp程序应用到别的非授权网站。这样给asp应用商业化带来了一定的困难。如何有效保护开发出来的asp程序,本文基于磁盘序列号产生的随机性,结合微软官方免费提供的asp脚本加密程序screnc.exe,很好地解决了这个问题。

磁盘序列号,简称磁盘id,是对磁盘进行格式化时随机产生的磁盘标识信息,是一个卷序列号。同一机器两次格式化随机产生固定格式的序列号相同几率几乎为零, dos的后期版本和windows、winnt均采用了这种磁盘标识方式,因而磁盘序列号常被运用用于商业化软件进行加密使用。从windows9.x切换到ms-dos方式,键入dir命令后回车,屏幕出现当前卷标序列号信息,这个类似"0a48-1cd7"的序列号是一个16进制数。一些限期使用的软件,在使用期限到了之后,会要求使用者在线申请新的授权序列号(使用许可)。这种授权序列号相当一部分是采用了静态磁盘序列号结合时间产生的。安装完毕之后的软件,程序即使被非法拷贝到非初始安装环境中,也不能使用。

上述思想用vc、vb及deliphi语言都容易实现,那么,在asp中又如何实现呢?vbscript作为一种健壮的、安全的用户语言,是受客户机系统限制的,不能处理客户机上api的调用,也不能直接操纵客户机上的文件和文件系统之外的控件。因而本文采用vbscript并结合asp内置filesystem来实现上述思想。 以下程序根据具体情况略加修改,可以应用于实际的asp应用系统。

作为讲解实例,本文用到access(小型网站之最爱)安全机制,实际应用中,可以用其它格式的文件存放的数据。为便于阐述,我们先建一个access(小型网站之最爱)数据库id.mdb(密码为"kxj"),内建一个driveinfo表,数据结构如下:

id(自动编号) ;
serno(文本,12,磁盘序列号(10进制)) ;
wrimark(数字,1,写盘标志,)。


说明

wrimark 值为0代表合法用户未安装系统,值为1代表该系统已安装。当值为1且序列号与当前盘不符时,则判定为非法拷贝用户。

初始化时先定义一个新记录,各字段初始值分别为1,12345678,0。

在同一目录下,例如c:interpubwwwroot下,放置首页default.,合法用户首页success.asp,非法安装用户提示页fail.htm及id.mdb序列号存放库。

各asp文件的编写操作如下:

1、用frontpage(或notepad),新建一个asp文件default.asp,录入以下程序代码:

<html>
<head>
<title>sample</title>
</head>
<% dim conn,fs,f
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access(小型网站之最爱) driver (*.mdb)};uid=;pwd=kxj;dbq="&server.mappath("id.mdb")
set fs=server.createobject("scripting.filesystemobject")
testdrive=server.mappath("/driveinfo.asp")
通过mappath获得当前盘盘符
testdrive=left(testdrive,3)
set f=fs.getdrive(testdrive)
调用getdrive方法,将驱动器赋予一个变量
mysql(和php搭配之最佳组合)="select * from driveinfo where id=1"
set rscheck = server.createobject("adodb.recordset")
rscheck.open mysql(和php搭配之最佳组合),conn,1,1
fser=trim(f.serialnumber)
获得当前盘序列号
strserno=trim(rscheck.fields("serno"))
strmark=rscheck.fields("wrimark")
if strserno<>fser and strmark=0 then
若是首次安装,则置写盘标志为1
session("pass")=true
定义用户session,并置为全局asp文档标识变量
set rsmain = server.createobject("adodb.recordset")
mysql(和php搭配之最佳组合)1="update driveinfo set serno="&fser&", wrimark=1"
rsmain.open mysql(和php搭配之最佳组合)1,conn,1,2
response.write("<a href=success.asp>setup
successful!welcome to access(小型网站之最爱) the website!</a>")
set rsmain=nothing
else
if strserno=fser then
若是合法用户再次合法进入
session("pass")=true
response.write("<a href=success.asp>you are authorized by the website manager,welcome to access(小型网站之最爱) !</a>")
else
非法拷贝用户
session("pass")=false