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

2016-01-29 17:31 7 1 收藏

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

【 tulaoshi.com - ASP 】

  自从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.asp,合法用户首页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="SELECT * From driveinfo where id=1"
set rsCheck = Server.CreateObject("ADODB.Recordset")
rsCheck.open Mysql,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")
Mysql1="update driveinfo SET SERNO="&FSER&", WRIMARK=1"
rsMain.open Mysql1,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
response.write("<a href='fail.htm'>IT IS ILLEGAL TO COPY THE WEBSITE'S ASP DOCUMENT.YOU ARE NOT RIGRT TO USE THE PROGRAM.</a>")
end if
end if
res

来源:http://www.tulaoshi.com/n/20160129/1501759.html

延伸阅读
标签: Web开发
class是设置标签的类。 id是设置标签的标识。  class属性用于指定元素属于何种样式的类。 如样式表可以加入: .baobao { color: lime; background: #ff80c0 } 使用方法:class="baobao" id属性用于定义一个元素的独特的样式。 如一个CSS规则: #binbin { font-size: larger } 使用方法:id="binbin" id是一个标签,用于区分不...
标签: ASP
  作者: 沈晓刚 如果你是一名Active Server Page (ASP) 开发者,相信你可能经常使用COM对象来创建ASP页面。甚至在你使用中都忽略了他就是COM对象。比如:ADO。只个调用率最高的组件已让你的页面扩展了无限的功能。然而ASP本身是解释型脚本,在功能上不足COM强大。作为拥有快速开发,易用性强,支持COM的VB自然的作为了ASP中开发COM...
标签: windows 操作系统
与DOS环境下苦涩难懂的分区操作相比。在Windows XP中,利用图形界面和人性化的操作方式,可对硬盘进行更加高效灵活的分区操作。不仅如此,借用Windows XP强大的磁盘分区管理功能,还可增强磁盘分区的合理使用,并有效提升磁盘的读写速度。 1.一分钟内分区及格式化硬盘 右键点击“我的电脑”,选择“管理”命令。在打开的“计算机管理”窗口...
标签: Java JAVA基础
编者按: 程序中经常有这样的要求,整个程序运行时只有一个实例被使用。比如:数据库连接池,系统参数配置,Java API 中的 Runtime, Calendar ...如何实现这种需求成为一个值得讨论的问题。让我们来看看本文的例子。   A.常见的例子 以往的做法,是在程序的某个类里面(比如是 GlobalObject )...
标签: ASP
  1.Array()   FUNCTION: Returns a variant containing an array.   SYNTAX: Array(list)   ARGUMENTS: list is a comma-delimited list of values to add to the array.   EXAMPLE: <% Dim myArray() For i = 1 to 7    Redim Preserve myArray(i)    my...

经验教程

814

收藏

96
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部