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

转载 2004年06月28日 19:54:00
自从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
response.write("<br>")
response.write("Volume Serial Number in drive "&testDrive)
response.write(f.serialnumber)
response.write("<br>")
response.write("Volume hex Serial Number in drive "&testDrive)
response.write(hex(f.serialnumber))
response.write("<br>")
'作为演示,本程序把当前盘序列号列出来(16进制)
set f=nothing
set fs=nothing
%>
</html>


2、在合法用户可以访问的各个ASP文件头部,添加如下代码:

<% if Session("pass")=false then
'对Session变量进行判定,非法则跳出本ASP文件
response.redirect("fail.htm")
end if
%>


3、用ASP加密程序(例如微软公司的SCRENC.EXE,别的ASP加密程序也可以)对各个ASP文件进行加密。

在DOS状态下运行SCRENC -l vbscript source.asp destination.asp,即把源文件source.asp生成了包含密文ASP脚本的新文件destination.asp。SCRENC.EXE可以在微软公司站点(http://www.microsoft.com免费下载)。
以上程序代码在简体中文NT4.0、IIS3.0及简体中文PWIN9.8、PWS4.0下通过。

ASP.NET中cs代码页找不到aspx页面中的控件ID

最近在写一个BBS,依照书的葫芦画我的瓢,但是就算这样其中仍然出了不少问题。刚解决如上所述问题。 问题描述:在aspx中,cs代码页找不到aspx页面中的控件ID,提示“当前上下文中不存在名称XXX...
  • u201011221
  • u201011221
  • 2014年03月17日 09:40
  • 2703

<asp:Table>的一些应用

在>.NET中是非常强大的,这个控件可以
  • adgjlxxx
  • adgjlxxx
  • 2014年06月12日 17:55
  • 8958

jQuery在ASP中的应用

http://www.cnblogs.com/TerryFeng/archive/2009/01/30/1381431.html
  • zouxiaofen77
  • zouxiaofen77
  • 2010年03月09日 22:45
  • 172

我的ID型参数过滤防注入之道(ASP)

判断用户提交的数字参数,诸如**.asp?id=xxx思路:用户提交的不是数字的情况下(**.asp?id=xxx and 1=1),将后面非数字字符全部过滤这样,在被注入或发生其他情况时,都能显示正...
  • xeonwell
  • xeonwell
  • 2006年02月27日 11:11
  • 920

磁盘ID的读取方法

在软件进行加密运算时,读取硬盘ID,CPU ID,网卡ID成为加密计算的输入参数之一,本篇将讲述如何使用API来读取硬盘的ID,具体过程如下:-----------------------------...
  • jackxinxu2100
  • jackxinxu2100
  • 2010年12月26日 20:34
  • 4938

android 添加应用到android源码中

(一)第一部分:添加一个新的应用 1把项目源码加入到/packages/apps中,例如:HelloWorld项目。 2在HelloWorld项目的根目录下,新建Android.mk文件,...
  • easyer2012
  • easyer2012
  • 2016年03月28日 16:52
  • 1104

32位与64位系统asp链接SqlServer数据库连接字符串

32位操作系统连接地址 ConnStr="Provider = Sqloledb; User ID = " & datauser & "; Password = " & databasepsw ...
  • andyjiang2008
  • andyjiang2008
  • 2014年11月22日 13:20
  • 1146

ASP+MSSQL获取最新最后添加数据信息的ID记录值

用法:conn.Execute("Insert INTO 表名(帐号,密码) VALUES(aaa,123)" )    添加数据set rs=conn.execute("Select SCOPE_I...
  • superying
  • superying
  • 2009年03月18日 11:17
  • 3124

如何破解防拷贝光盘

一般只要是光盘无法复制或者提示光盘有坏道,这样的情况大部分都是软件作者为了防止别人在未经受权的情况下复制、传播而采取的一种加密手段,有些在破解的时候比较容易,有些则有些费时,但是相信不断追求的我们,还...
  • yw1688
  • yw1688
  • 2016年03月03日 19:49
  • 2997

ASP.NET中主题的创建和应用

1创建ASP.NET网站 模板->选择 添加ASP.NET文件夹 下面的属性
  • yayun0516
  • yayun0516
  • 2014年07月08日 16:16
  • 1189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:磁盘ID在ASP源码防拷贝中的应用
举报原因:
原因补充:

(最多只允许输入30个字)