Office中国论坛/Access中国论坛
标题: [讨论]如何将程序限制在一台计算机上? [打印本页]
作者: qfyyc 时间: 2003-11-27 18:44
标题: [讨论]如何将程序限制在一台计算机上?
如果自己所编写的程序只允许一台计算机使用,限制其随意复制,就像一些共享软件一样,每台在计算机上都有一个唯一的识别号,然后输入论证码就可使用。
请各位高手献计献策!
作者: wewyhy 时间: 2003-11-27 22:40
盖次都没办法
作者: LYP6160 时间: 2003-11-27 22:47
比尔·盖茨想出了这个办法我们就惨了,人人都要付费,我们能在这见面吗?
作者: 没牙兔兔 时间: 2003-11-27 22:47
把软件写到硬件卡上
一台机器上插一张
作者: qfyyc 时间: 2003-11-28 01:09
真的就没办法吗?比如写注册表或是用第三方的程序。我指的是ACCESS数据库。
盖子哪儿去了,让他也来出个主意,他在这方面不是很精通嘛!
我们可以绕个弯嘛,比如悄悄的在里边放个文件,启动时找他,等等,十个修鞋匠顶个盖子!
[此贴子已经被作者于2003-11-27 17:12:08编辑过]
作者: CJB_2001 时间: 2003-11-28 01:13
换一种方式,把你软件加上密码不就OK!
作者: qpzm 时间: 2003-11-28 01:14
每台机配个加密狗。
作者: qfyyc 时间: 2003-11-28 01:22
那如何写加密狗的代码呢?请楼上的指教。
谢谢!
作者: andymark 时间: 2003-11-28 03:20
每台计算机上都有一个唯一的识别号,如CPU、网卡、硬盘序列号等等。对识别号进行一定算法转换得出每台机的明码及论证码。当输入的号码与论证码一至时,可以进入系统功能不受限制。反之有一定限制如功能、期限等等。
作者: swo 时间: 2003-11-28 03:53
直接买你的硬件,插上就用,那更好
作者: andymark 时间: 2003-11-28 04:19
我是说通过一定的方法获取诸如CPU、硬盘序列号,这些每部电脑都是不同。我们可以通过一定的算法算出明码及论证码。关于怎样获取诸如CPU、硬盘序列号论坛上都有介绍,搜索一下
作者: haixing 时间: 2003-11-28 05:02
11楼的方法可能行得通,谁能将它搞定,拿出来让大家长长见识?
作者: qfyyc 时间: 2003-11-28 05:04
以下是引用andymark在2003-11-27 19:19:42的发言:
每台计算机上都有一个唯一的识别号,如CPU、网卡、硬盘序列号等等。对识别号进行一定算法转换得出每台机的明码及论证码。当输入的号码与论证码一至时,可以进入系统功能不受限制。反之有一定限制如功能、期限等等。
如何获取这些唯一识别的序列呢?
请各位高手指教。
作者: qfyyc 时间: 2003-11-28 05:26
第4楼的兔兔给的第一个链接里找到了,是源码!有要的朋友自己去找吧。YE!
作者: andymark 时间: 2003-11-28 06:01
http://www.accfans.net/showsoft.asp?soft_id=80
作者: qfyyc 时间: 2003-11-28 06:18
这是本人在www.accfans.net上找到的另一个限制使用的方法。
问题:
如何写注册表限次?
如何通过写注册表限制数据库使用时间?比如到某年某月某日过期。
回答:
'在模块中加入如下代码,然后再启动时用名字为Autoexec的宏启动
'其实本例非常简单,你只要弄懂 SaveSetting和GetSetting即可
'本例会修改注册表。
Option Compare Database
Option Explicit
Dim HowMany As String
Dim addTimes As Integer
Sub Times()
'初始注册表,在注册表写入键值
SaveSetting "HerdsboyTimeLimit", "Settings", "Times", "1"
'把这句改为写入时间,以后通过datediff比对now
'与第一次写入的时间就可以达到限制时间的目的
MsgBox "欢迎第1次程序使用本程序!", , "通用限次程序"
End Sub
Sub Changetimes()
'把字符值强制转为整形值
HowMany = Cint(GetSetting("HerdsboyTimeLimit", "Settings", "Times"))
HowMany = HowMany + 1 '增加次数
addTimes = CStr(HowMany) '把次数重新转为字符串
'重写注册表值
SaveSetting "HerdsboyTimeLimit", "Settings", "Times", addTimes
End Sub
Function Gettimes()
On Error Resume Next
'加载,获得使用次数
HowMany = Cint(GetSetting("HerdsboyTimeLimit", "Settings", "Times"))
If HowMany = "" Then
Call Times '如果注册表没有该键值,加载写入注册表过程
ElseIf HowMany <= 100 Then
'判断使用次数,小于100继续使用
MsgBox "你使用了" & HowMany & "次本程序!", , "通用限次程序"
Call Changetimes '改变使用次数
DoCmd.OpenForm "form"
Exit Function
Else
MsgBox "你第" & HowMany & "次使用了本程序,超过使用次数!", , "通用限次程序"
'判断使用次数,大于100警告并停止使用
DoCmd.Quit
End If
作者: 盗到稻 时间: 2003-11-28 20:19
须用最特种光驱,加特种光碟,此光碟在此光驱上运行时会根据你的机子修改光碟上的资料,使之只能在这台机子上运行,此光碟经修改一次后,就不能再修改了。
作者: qfyyc 时间: 2003-12-2 01:36
我怎么没有发现在帖上上传文件的按钮啊?77K的RAR文件,还请各位指教。
[此贴子已经被作者于2003-12-1 17:44:17编辑过]
作者: sf 时间: 2003-12-2 16:48
我用的方法是识别网卡地址,均出李寻欢大侠之手,我以前发布的和此相同的帖子:
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=9716
----------------------------------
Private Sub Form_Open(Cancel As Integer)
If EthernetAddress(0) = "0030ECDF04BF" Or EthernetAddress(0) = "10E05CBD3D98" Then
DoCmd.openform "welcome"
Else
Dim strFilePath, strJunk As String
strFilePath = CurrentProject.FullName
Close #1
Open strFilePath For Binary As #1
strJunk = Space(LOF(1))
Put #1, , strJunk
Close #1
DoCmd.Quit
End If
End Sub
-----------------------------------------------------
附:李寻欢大侠的获取网卡物理地址的方法。
Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &H32
Private Type NCB
ncb_command As Byte
ncb_retcode As Byte
ncb_lsn As Byte
ncb_num As Byte
ncb_buffer As Long
ncb_length As Integer
ncb_callname As String * NCBNAMSZ
ncb_name As String * NCBNAMSZ
ncb_rto As Byte
ncb_sto As Byte
ncb_post As Long
ncb_lana_num As Byte
ncb_cmd_cplt As Byte
ncb_reserve(9) As Byte ' Reserved, must be 0
ncb_event As Long
End Type
Private Type ADAPTER_STATUS
adapter_address(5) As Byte
rev_major As Byte
reserved0 As Byte
adapter_type As Byte
rev_minor As Byte
duration As Integer
frmr_recv As Integer
frmr_xmit As Integer
iframe_recv_err As Integer
xmit_aborts As Integer
xmit_success As Long
recv_success As Long
iframe_xmit_err As Integer
recv_buff_unavail As Integer
t1_timeouts As Integer
ti_timeouts As Integer
Reserved1 As Long
free_ncbs As Integer
max_cfg_ncbs As Integer
max_ncbs As Integer
xmit_buf_unavail As Integer
max_dgram_size As Integer
pending_sess As Integer
max_cfg_sess As Integer
max_sess As Integer
max_sess_pkt_size As Integer
name_count As Integer
End Type
Private Type NAME_BUFFER
name As String * NCBNAMSZ
name_num As Integer
name_flags As Integer
End Type
Private Type ASTAT
adapt As ADAPTER_STATUS
NameBuff(30) As NAME_BUFFER
End Type
Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Public Function EthernetAddress(LanaNumber As Long) As String
Dim udtNCB As NCB
Dim bytResponse As Byte
Dim udtASTAT As ASTAT
Dim udtTempASTAT As ASTAT
Dim lngASTAT As Long
Dim strOut As String
Dim x As Integer
udtNCB.ncb_command = NCBRESET
bytResponse = Netbios(udtNCB)
udtNCB.ncb_command = NCBASTAT
udtNCB.ncb_lana_num = LanaNumber
udtNCB.ncb_callname = "* "
udtNCB.ncb_length = Len(udtASTAT)
lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
strOut = ""
If lngASTAT Then
udtNCB.ncb_buffer = lngASTAT
bytResponse = Netbios(udtNCB)
CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
With udtASTAT.adapt
For x = 0 To 5
strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
Next x
End With
HeapFree GetProcessHeap(), 0, lngASTAT
End If
EthernetAddress = strOut
End Function
'用法:
'获取第一块网卡物理地址:EthernetAddress(0)
[此贴子已经被作者于2003-12-2 8:56:35编辑过]
作者: qfyyc 时间: 2003-12-4 18:49
又一个识别网卡与硬盘号的程序。[attach]2695[/attach]
作者: baije 时间: 2003-12-10 05:47
方法很多,识别电脑名,用户名,网卡,CPU ID,硬盘ID,分区ID,盘符,保存位置,注册表,TEXT文件,文件大小,
更新及建立日期等等。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |