磁盘ID在ASP源码防拷贝中的应用的大讨论(欢迎任何关心自己程序安全的朋友参加讨论|ASP程序加密大讨论!)

qunluo 2003-09-05 11:45:54
序:因为今天看到很多朋友都在问相关程序加密的问题,我想都是自己的心血,肯定都不想看着自己不想公开的程序满天飞吧?所以,我提出这样的话提,大家一起来讨论!欢迎所有朋友发表自己的看法,来看的朋友帮着顶顶,这个问题,我想还是有必要让很多朋友了解一下的。如果你觉的这样的问题对你来讲很菜,请你对指点,大家相互学习才是最重要的,反正我知道这里有很多和我一样很菜的朋友,呵!!)
自从ASP(Active Server Pages)问世以来,因其可以创建健壮易于维护、与平台无关的应用系统,ASP技术受到了越来越多网络程序员的喜爱,使用ASP从事WEB开发的人也越来越多。但ASP只是一种非编译型的、在服务端运行的脚本语言,采用明文(plain text)方式来编写,即使采用了ASP加密程序对ASP源码进行加密,也不一定能保证发布到运行环境中去的A
SP应用程序不被非法拷贝。对于高权限的管理员,可以轻而易举从服务器端拷贝出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:\INTERPUB\WWWROOT下,放置首页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下通过。
...全文
113 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qunluo 2003-09-05
  • 打赏
  • 举报
回复
不是呀!如果是学习的话,那是没得说!
但是你碰到过这样的事情没有,你需要将你的程序带到客户那里,但是你是知道,ASP可是明文啊!如果你为了完成这套程序用了很长时间,并且是你的工作需要才完成的,难道还要共享么!有写时间某种情况下真是无奈啊!你说对不对!而且从技术角度来看,这样的话题也是值得大家一起来谈谈的!因为我还有更精彩的在后面!希望大家一直捧场!
*********************************
还得在申明:我是完全绝对的奉行freesource的那种人!
lang11zi 2003-09-05
  • 打赏
  • 举报
回复
资源共享不好么??????????
qunluo 2003-09-05
  • 打赏
  • 举报
回复
做成dll,在ASP里怎么读取我需要的东西呢?主要我还是不清楚怎么将ASP弄成Dll文件啊!
dragon2006 2003-09-05
  • 打赏
  • 举报
回复
呵呵,你随便去网上收索一下,加密与解密asp的工具多的是,做成dll也不是很保险,我也成功的破解过很多(毕竟VB写的东西也太好破了)。
qunluo 2003-09-05
  • 打赏
  • 举报
回复
反编译,你知道是什么个过程吗?我很想知道这个东西,如果这里不方便,可以和我联系:qq:21547477 E_mail:qun-luo@163.com(一定向你,向大家学习)
另外,我看不是有朋友说部分做成dll吗?这样的处理,大家又是怎么看的!
随便说说,我还不清楚怎么做成dll文件!也请指点!
dragon2006 2003-09-05
  • 打赏
  • 举报
回复
不知道你有没有考虑过SCRENC的加密被反编译后的情况呢?????

告诉你吧,一切都是白费!!

我对asp的加密想了很久,还没有一种方法能行的通的,我真心的希望谁能做个真真正正的asp的加密。
wangwm 2003-09-05
  • 打赏
  • 举报
回复
你可以将连接数据库的字符串写进组件中,如果去掉这些调用组件的代码后,就不能工作了。
qunluo 2003-09-05
  • 打赏
  • 举报
回复
又有点启发了!
nowfox 2003-09-05
  • 打赏
  • 举报
回复
的确去掉就可以使用了,但我不是说了吗?要注意技巧。
你可以把那些不能去掉的代码也封装进DLL,如连接数据库、程序精华部分,对数据库进行尽可能的加密,他不用你的连接数据库代码就不能使用,以达到他不能自己改写代码的目的。
fffddd 2003-09-05
  • 打赏
  • 举报
回复
把你的这些代码去掉了就能正常用了.
fffddd 2003-09-05
  • 打赏
  • 举报
回复
qunluo 2003-09-05
  • 打赏
  • 举报
回复
是的,文章不是我写的,只是我看很多朋友都想知道这样的技术,我也为这样的事情想了好长时间了,一直未有很好的解接方法。把我在学习过程中得到的信息提供给大家,有一个共同的话题才好讨论下去!
楼上的想法同样值得思考!还在严重关注中!
nowfox 2003-09-05
  • 打赏
  • 举报
回复
SCRENC加密的文件太好破啦,我电脑上都有,就是在CSDN下的。
nowfox 2003-09-05
  • 打赏
  • 举报
回复
楼主的文章是转载的吧,我以前看过后,把数据库给去掉了,觉得为了纪录几个字段就用数据库,未免有点大材小用。
要防止非法拷贝ASP,我也想过一下,但不是很成熟:自己写一个算法,然后编译成DLL(做成DLL当然是为了不让别人看到算法),与ASP程序一起打包成安装文件,做成安装文件主要是为了在他机子上注册DLL文件。
他的注册号就是磁盘ID,然后给他注册码,他注册时就调用DLL把注册码写入注册表或其他地方也行,不用提示注册成功与否,以后每次访问时检查注册码,不对或为空则做出相应的反应。
这样只是防止了非法拷贝,但人家不一定要拷贝,看到你程序精华后,人家自己也可以做,或者直接去掉了审查部分,所以写防止拷贝程序时,有很多技巧需要自己把握。
最好把精华部分也写入DLL,即使他要破译,也给他带来点难度。
dragon2006 2003-09-05
  • 打赏
  • 举报
回复
同意,程序员之间可以共享代码,可是和某些黑心的商人可是绝对行不通的,我曾被人骗走一套完整的源代码

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧