Office中国论坛/Access中国论坛

标题: 一个关于软件保护的问题 [打印本页]

作者: Happyboy    时间: 2005-4-6 06:18
标题: 一个关于软件保护的问题
[attach]9754[/attach]


上传的附件里面包括一个软件注册机和一个使用次数限制的模块(都是别人的劳动成果),我想要达到一个功能:

1。当客户拿到软件的时候,先进行试用(不用注册,也不提示注册,不过可以注册)。

2。如果注册之后,就不会出现使用次数的对话框。

请各位高手赐教!
作者: Happyboy    时间: 2005-4-6 17:00
求救!
作者: xinbao    时间: 2005-4-6 18:01
是否注册设置一个标志,当注册以后就更新标志,登陆时判断,如标志是已注册, 不显示注册窗
作者: Happyboy    时间: 2005-4-6 18:11
可以作在我上传的附件上吗?谢谢!

因为我不会![em04]
作者: xinbao    时间: 2005-4-6 18:27
现在上班, 时间不多,要晚上慢慢来
作者: kelind    时间: 2005-4-6 19:10
函数 HDseralNameRead.dll 错误.

能告诉我,你在哪下载的吗?
作者: Happyboy    时间: 2005-4-6 19:42
我忘了在哪里下载的了。不过全部内容(软件注册)都在我的附件里面了。

文件 HDseralNameRead.dll 必须放在c:\windows里面,你可以看一下软件注册里面的readme。
作者: xinbao    时间: 2005-4-6 20:19
HDseralNameRead.dll 还要用 regsvr32.exe 注册
作者: Happyboy    时间: 2005-4-6 21:07
不用。

先把文件 HDseralNameRead.dll 放在c:\windows里

然后用“软件注册”得到注册码,再注册一下就可以了。
作者: Happyboy    时间: 2005-4-7 06:00
在线等候!
作者: wyh    时间: 2005-4-7 13:03
把是否注册的信息写到表,然后判断表就行了
作者: wangyuhong    时间: 2005-4-7 13:12
使用网卡和CPU较保险一点
作者: wangxuefzh    时间: 2005-4-8 02:11
标题: 不知合意否?
[attach]9809[/attach]

作者: Happyboy    时间: 2005-4-8 06:53
好像出了一点问题,文件HDSerialNumRead.dll如果没有复制到C:/WINDOWS里面也可以继续使用。
作者: 静儿    时间: 2005-4-8 07:05
我记得旧贴中谁贴过,dll文件和mdb文件在同一目录也可以,我没试过。
作者: wangxuefzh    时间: 2005-4-8 07:26
是不是"文件HDSerialNumRead.dll"早先被你复制到"C:/WINDOWS"中,没有删除。
作者: zjmcwl    时间: 2005-4-8 07:33
楼主能不能给出那2个控件的来源?我想查看下相关文章,因为我也快需要用到这2个强悍的东东了
作者: Happyboy    时间: 2005-4-8 22:02
TO wangxuefzh ,好像不是这个原因,我把这些文件在别的机器上试验,次数的提示没有了,甚至可以直接进入,就没有限制了,也用不到注册。

TO zjmcwl,真不好意思,我也不知道在哪里找到的,不过我觉得好像是在这里找到的。呵呵……不过所有的文件都在我上传的附件里面了。
作者: Happyboy    时间: 2005-4-9 06:46
继续等待中……
作者: cg1    时间: 2005-4-9 07:41
关于此主题请参考:
    《函数》如何写注册表限次?
    http://access911.net/index.asp?u1=a&u2=71FAB51E10DC
----------------------------------

得益于 http://access911.net 設計理唸,http://access911.net 繁體版快速開髮完成,請大傢幫助測試!
得益于 http://access911.net 的设计理念,http://access911.net 繁体版快速开发完成,请大家帮助测试!



作者: Happyboy    时间: 2005-4-10 05:05
关键是怎样实现:

1:可以复制,不过复制的文件只能试用。

2:复制之后,试用的文件经过注册就可以正式使用了。
作者: Happyboy    时间: 2005-4-11 05:23
等待高手支援……
作者: zzyzzg    时间: 2005-4-11 21:23
帮你改成无限次数使用!
作者: Happyboy    时间: 2005-4-12 00:28
继续等待……
作者: Happyboy    时间: 2005-4-13 04:01
……
作者: hi-wzj    时间: 2005-4-13 05:22
以下是引用Happyboy在2005-4-9 21:04:32的发言:


关键是怎样实现:

1:可以复制,不过复制的文件只能试用。

2:复制之后,试用的文件经过注册就可以正式使用了。



照前面的例子将注册信息保存在电脑的注册表中不就是了,还有什么疑问呢?

打开程序时读取注册表里的注册码并检验是否正确,若正确则是注册版,若为空则为试用版,若为错,提示出错。
作者: jzwwpp    时间: 2005-4-13 16:38
[attach]9920[/attach]

这是本人作的一个注册的例子,优点是不用读写注册表信息,不用dll链接库及任何控件,完全代码实现。而且可以满足

关键是怎样实现:

1:可以复制,不过复制的文件只能试用。

2:复制之后,试用的文件经过注册就可以正式使用了。

这两个要求。注册时间存储也不用文件控制,直接写入mdb文件,增加验证码,如有修改会提示需要重新注册,附带注册机。望大家多提意见。

作者: wu8313    时间: 2005-4-14 04:29
提示  类型不匹配

这一句 seed = seed - CInt(myday)


作者: Happyboy    时间: 2005-4-15 05:51
[em06]有没有让帮我做一下?谢谢了!![em04]
作者: zjmcwl    时间: 2005-4-16 03:48
happyboy问题解决了吗?我的软件写得差不多了,把这个也用上了

还没在其他计算机上试过,

不过现在最大的问题是这个注册软件,如果第一次注册成功,第二次乱填个数字再注册会导致先前的注册无效,哪位高人指点下如何解决这个问题,谢谢.最好能上传个例子看看,找了好多人源码作品,就是没一个有注册的[em06]
作者: Happyboy    时间: 2005-4-16 05:26
我还没有解决呢![em06]5555……不知道有没有哪个高手帮我们解决一下!最好能有一个例子穿上来!
作者: swx    时间: 2005-4-16 06:18
这一个,建议您购买本站的新书<专家门诊-access开发答疑>第219问就专门回答这问题的。这书也就三十来块钱,却特别好用,还带两张光盘的例子呢。但这东西要自己写出来就麻烦了。
作者: Happyboy    时间: 2005-4-17 06:24
报告!这本书我买了,也看了,不过对于我这种对代码一无所知的人来说,然我去修改成我想要的功能,似乎难了一些,呵呵……所以希望各位高手帮忙吗!你们又都这么谦虚,都这么隐瞒自己的实力~!害得我……唉!!神啊,救救我吧!!!
作者: swx    时间: 2005-4-17 20:48
******别花精力保护这***程序了。努力学习成为高手吧。

应静儿mm的提议,屏蔽了某些字。---hi-wzj

[此贴子已经被hi-wzj于2005-4-21 22:18:03编辑过]


作者: Happyboy    时间: 2005-4-19 05:27
swx,********请不要嘲笑别人!********

应静儿mm的提议,屏蔽了某些字。---hi-wzj

[此贴子已经被hi-wzj于2005-4-21 22:23:43编辑过]


作者: kelind    时间: 2005-4-20 04:14
[attach]10025[/attach]


没注册要提醒注册,注册后不再提醒!----打开注册窗体提示"已经注册".是这样吗?

 你的菜单栏和锁定窗体很有意思,能给我传一个吗?

[url=mailtoldkelind@yahoo.com.cn]oldkelind@yahoo.com.cn[/url]


作者: 静儿    时间: 2005-4-22 01:55
这是大家的技术论坛

请大家文明用语,相互尊重

脏话难听死了!

请照顾论坛中的女性同胞!

强烈建议网友自觉删除不好的话语。
作者: hi-wzj    时间: 2005-4-22 07:07
题外话,链接静儿mm的一个帖,和大家共勉:<A title="《上网的十个基本礼节》&#13;&#10;作者:静儿&#13;&#10;发表于:2005-4-7 22:03:01&#13;&#10;最后发贴:共勉..." href="http://www.office-cn.net/forum.php?mod=viewthread&tid=26419">上网的十个基本礼节
作者: wu8313    时间: 2005-4-24 20:01
关于使用HDSerialNumRead.dll读取硬盘系列号用作注册。

我有一个体会:就是迈拓硬盘无法使用注册程序,听说该硬盘没有序列号。


作者: Happyboy    时间: 2005-5-28 04:41
出现问题了!!
作者: Happyboy    时间: 2005-5-28 04:51
[attach]10771[/attach]

问题:如果那个读硬盘序列号的程序没有放在c:\windows下面,这个软件却可以正常使用。如果放在c:\windows下面,才能达到提示是否注册。这是为什么啊?应该怎么改正?

现在只要添加一个如果在c:\windows下面没有发现读硬盘序列号的程序,那就处于试用期阶段。

应该怎么改呢?
作者: chul72    时间: 2005-5-28 05:36
我的方法是在程序里利用序列号用自己的算法得到的结果与用户注册后在文件中的注册信息进行比较(也可以是在表中保存),如果正确再与注册后写到注册表中的信息进行比较,这样当用户修改任何一处都会得到注册信息破坏的结果.如果注册信息为NULL就表示未注册版本.
作者: Happyboy    时间: 2005-5-28 06:00
clu172,谢谢你的指点!不置可否把你的文件给我传一份呢?也让我学习学习!budingxizhilang@163.com先谢谢了!
作者: chul72    时间: 2005-5-28 06:33
我的文件不知道放哪里了,你改改就行Function GetSerialNumber(strDrive As String) As Long

     

     Dim SerialNum As Long

     

     Dim Res As Long

     Dim Temp1 As String * MAX_FILENAME_LEN

     Dim Temp2 As String * MAX_FILENAME_LEN

     

     Res = GetVolumeInformation(strDrive, Temp1, _

     Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))

     

     GetSerialNumber = SerialNum

     

End Function

Private Sub cmdOK_Click()

    n = Abs(GetSerialNumber(Left(App.Path, 3)))

    For a = 1 To Len(n)

        c = c + Mid(n, (Len(n) + 1) - a, 1)

    Next

    d = str(c)

    p = 1

    If Len(d) < 20 Then

        d = d + String(20 - Len(d), "X")

    ElseIf Len(d) > 20 Then

        d = Left(d, 20)

    End If

    For i = 1 To 20

        If Len(str(Asc(Mid(d, i, 1)))) > 3 Then

            p = p + Mid(str(Asc(Mid(d, i, 1))), 2, 2) * 199

        Else

            p = p + Asc(Mid(d, i, 1)) * 199

        End If

    Next

    If Val(Trim(strWRegistration.Text)) <> p Then

        MsgBox "注册码错误!", vbCritical, "错误"

        End

    Else

        SaveSetting "TransnationalProgram", "Registration", "RecogniseCode", p

        SaveSetting "TransnationalProgram", "Registration", "UserName", Trim(strWUserName.Text)

        MsgBox "请重新运行程序验证注册是否成功", vbInformation, "启动"

        End

    End If

End Sub

Private Sub Form_Load()

    lblValidate.Caption = lblValidate.Caption + str(Abs(GetSerialNumber(Left(App.Path, 3))))

    Me.Hide

    SaveSetting "TransnationalProgram", "Registration", "Validate", str(Abs(GetSerialNumber(Left(App.Path, 3))))

    n = Abs(GetSerialNumber(Left(App.Path, 3)))

    For a = 1 To Len(n)

        c = c + Mid(n, (Len(n) + 1) - a, 1)

    Next

    d = str(c)

    p = 1

    If Len(d) < 20 Then

        d = d + String(20 - Len(d), "X")

    ElseIf Len(d) > 20 Then

        d = Left(d, 20)

    End If

    For i = 1 To 20

        If Len(str(Asc(Mid(d, i, 1)))) > 3 Then

            p = p + Mid(str(Asc(Mid(d, i, 1))), 2, 2) * 199

        Else

            p = p + Asc(Mid(d, i, 1)) * 199

        End If

    Next

    If GetSetting("TransnationalProgram", "Registration", "RecogniseCode") <> p Then

        MsgBox "未注册版本,请注册!", vbInformation, "注册"

        Me.Show

    Else

        frmLogin1.Show

    End If

End Sub


作者: Happyboy    时间: 2005-5-28 06:49
你帮我做到我的附件里面吧,谢了!怎么改也不对!!!
作者: chul72    时间: 2005-5-28 07:15
在模块里加一个API函数.  Private Declare Function GetVolumeInformation Lib _

     "kernel32.dll" Alias "GetVolumeInformationA" (ByVal _

     lpRootPathName As String, ByVal lpVolumeNameBuffer As _

     String, ByVal nVolumeNameSize As Integer, _

     lpVolumeSerialNumber As Long, lpMaximumComponentLength _

     As Long, lpFileSystemFlags As Long, ByVal _

     lpFileSystemNameBuffer As String, ByVal _

     nFileSystemNameSize As Long) As Long

     

Public Const MAX_FILENAME_LEN = 256


作者: chul72    时间: 2005-5-28 07:20
注意我用的是当前盘的卷序号
作者: Happyboy    时间: 2005-6-1 17:58
唉!不好意思,chul72,我还是做不出来。不知道那里出了问题!还是请高手做在附件里面吧!先谢了!
作者: binuochao    时间: 2005-6-1 18:49
你可以用dir方法检查c:\windows下面那个读硬盘序列号的程序是否存在!不存在就提示注册!
作者: Happyboy    时间: 2005-6-1 23:36
我以前的思路就是:1,现判断是否注册,如果没有注册,那就有试用次数。次数一到,就不能进入了。2,在试用其间,如果注册了,以后就不用再提示注册了。如果按照binuochao的意思,那代码应该怎么改?我没有用过dir
作者: Happyboy    时间: 2005-6-5 17:11
还是请各位高手帮帮忙吧,实在是做不出来了!!
作者: 海狸先生    时间: 2005-6-5 17:18
http://www.office-cn.net/forum.php?mod=viewthread&tid=27844
作者: Happyboy    时间: 2005-6-5 18:07
海狸先生,帮忙做到我的附件里面吧,实在是看不懂了!头都疼了!
作者: 海狸先生    时间: 2005-6-5 18:43
对不起,这个不能帮你实现了。
作者: Happyboy    时间: 2005-6-5 19:33
MsgBox "未找到文件:‘DiskID32.dll’,请确定文件的存在,或重新安装该软件!", vbExclamation, "系统提示"

这一句应该放到哪里呢?我怎么放也不对!请高手和斑竹帮帮忙!!!
作者: 海狸先生    时间: 2005-6-5 19:49
窗体打开事件中
作者: Happyboy    时间: 2005-6-5 20:03
唉!还是不明白啊!!写进去了,还是不对!!!高手啊,斑竹啊,救命啊……
作者: 海狸先生    时间: 2005-6-5 20:18
。。。。那个贴子里的的例子不是可以看代码的吗??
作者: Happyboy    时间: 2005-6-5 20:35
我知道可以打看代码,可是就是写不出来啊!不知道我那里写得有问题!!唉!!所以请求高手帮忙吗!!
作者: 海狸先生    时间: 2005-6-5 23:16
那把你写的上传吧
作者: Happyboy    时间: 2005-6-6 03:03
[attach]11005[/attach]

唉!写了跟没写一个样,唉!传上来也是我刚开始传的那个附件。唉!!

还是请高手帮帮忙吧!!
作者: yangwenhong    时间: 2005-6-6 04:12
其实还有一种方法:就是采用登陆次数来判断,程序里设置最多登陆次数,在设定值范围内,弹出提示,超过次数,需要注册。
作者: 海狸先生    时间: 2005-6-6 04:51
以下是引用Happyboy在2005-6-5 19:03:00的发言:

[attach]11005[/attach]

唉!写了跟没写一个样,唉!传上来也是我刚开始传的那个附件。唉!!

还是请高手帮帮忙吧!!



你更本不去试,怎么知道不行呢?我看了你上传的文件,里面没有写

请仔细看一面这段代码

Private Sub Form_Open(Cancel As Integer)

On Error GoTo a:

   Dim dbCurrent As Database

   Dim yuan, mub As String

   Set dbCurrent = DBEngine(0)(0)

   yuan = Left(dbCurrent.Name, InStrRev(dbCurrent.Name, "\"))

   mub = Environ("windir")

   FileCopy yuan & "DiskID32.dll", mub & "\DiskID32.dll"

  Dim DiskModel(31) As Byte, DiskID(31) As Byte, i As Integer, Model As String, id As String

  Dim fs, d, v, b, n

  If DiskID32(DiskModel(0), DiskID(0)) <> 1 Then

  MsgBox "get diskid32 err"

  Exit Sub

  End If

  For i = 0 To 31

  If Chr(DiskID(i)) <> Chr(0) Then

  id = id & Chr(DiskID(i))

  End If

  Next

v = id

i = 0

Do Until i < 0

i = i + 1

b = Mid(v, i, 1)

b = Asc(b)

n = n & b

If i = Len(v) Then Exit Do

Loop

If DFirst("[id]", "[表1]") <> n Then

DoCmd.OpenForm "校验窗体"

DoCmd.Close acForm, "用户登陆"

End If

Exit Sub

a:

MsgBox "未找到文件:‘DiskID32.dll’,请确定文件的存在,或重新安装该软件!", vbExclamation, "系统提示"

DoCmd.Quit

End Sub


作者: Happyboy    时间: 2005-6-6 19:11
这段代码看了,我也明白这个意思。不过做到我的那个程序里面,不知道怎么就是不对。我也试过了,结果是一打开就出现:未找到文件:‘DiskID32.dll’,请确定文件的存在,或重新安装该软件!唉!!所以请求帮忙啊!!!
作者: 海狸先生    时间: 2005-6-6 19:34
以下是引用Happyboy在2005-6-6 11:11:00的发言:



这段代码看了,我也明白这个意思。不过做到我的那个程序里面,不知道怎么就是不对。

我也试过了,结果是一打开就出现:未找到文件:‘DiskID32.dll’,请确定文件的存在,或重新安装该软件!唉!!所以请求帮忙啊!!!



我看你传上来的里面就没做。。。。做上去,也好让别人看看你的错误在哪里

如果没有diskd32.dll  ,会报错,这很正常啊
作者: kelind    时间: 2005-6-8 01:36
还有一个问题: 无论限制日期还是次数, 如果过期了,就打不开,用户想注册也来不及了.删除程序也删除不了注册表中设定的值.   没办法,我只好又编一个更改注册表的东东,过期用户才能注册.有什么办法使试用期超过的用户也能注册?请提一个思路.
作者: wu8313    时间: 2005-6-8 02:01
如果不限制日期的话,也可以限制用户某个表中的记录条数,达到某个指定的条数就运行一个删除查询也是可以的。

在某个包含关键信息的录入窗体中,写入类似如下的代码:

Private Sub Form_Open(Cancel As Integer)



'在这里加上是否注册成功的一个判断,去读一下注册表项的键值,如果读取不成功,就运行如下的代码







Dim a As Long

    a = DCount("id", "tablename")





    If a > 20 Then  '定为20个





   





    '*********我们可以定义这个数字的大小,决定用户可以使用的记录数****************





        MsgBox "已经达到使用期限,所有记录将自动清空!" + vbNewLine + " " + "如果需要购买正式版本请联系作者。。。", , "系统消息……"





     '**********





    '使用直接运行删除查询的sql的方法来清空历史记录





        DoCmd.setwarnings fasle





    DoCmd.RunSQL "DELETE 。。。 ", -1





        DoCmd.setwarnings fasle





    '*************





        DoCmd.Close acForm, "窗体名"





End If











End Sub



























[此贴子已经被作者于2005-6-7 18:12:50编辑过]


作者: Happyboy    时间: 2005-8-14 05:43
海狸先生,以及各位高手,你们还是帮我解决这个问题吧!谢谢了!!!
作者: wu8313    时间: 2005-8-15 05:31
顺便也想在这里问一下:关于使用 硬盘序列号 来注册 的,是否可以被 跟踪调试工具 得到注册码?也算一个安全性的问题吧?
作者: hi-wzj    时间: 2005-8-15 20:59
以下是引用wu8313在2005-8-14 21:31:00的发言:



顺便也想在这里问一下:

关于使用 硬盘序列号 来注册 的,是否可以被 跟踪调试工具 得到注册码?

也算一个安全性的问题吧?

大家使用的非免费软件有几个是买来的?

再想想您的水平,就能预测您的软件是否能够被破解了。

其实,您只需使破解成本大到人们觉得不值得破解就够了。

黑客也不见得对你的程序感兴趣。
作者: Happyboy    时间: 2005-8-16 07:10
hi-wzj,你好,我明白你的意思。雖然我的水平不夠,不过我对安全的问题很感兴趣,所以希望你能帮我解决一下,我感激不尽!这仅仅是我对access的爱好,希望你能帮我这个忙!谢谢了!!!
作者: Happyboy    时间: 2005-8-22 05:39
等待高手致电……
作者: secowu    时间: 2005-8-22 22:29
现在还不想用,正是学习别人的时候
作者: Happyboy    时间: 2005-8-29 06:33
555……为什么没有高手帮忙呢???
作者: LucasLynn    时间: 2005-8-29 16:12
以下是引用hi-wzj在2005-8-15 12:59:00的发言:





大家使用的非免费软件有几个是买来的?



再想想您的水平,就能预测您的软件是否能够被破解了。



其实,您只需使破解成本大到人们觉得不值得破解就够了。



黑客也不见得对你的程序感兴趣。

赞成。

如果楼主连实现这样的小功能都有困难的话,我想你的作品应该不会有黑客花上很多的时间和精力来破解的。

另外,本论坛是经验交流论坛,并不是项目发包论坛,网友可以给你一些关键点上的思路和建议,但是没有人会代你来做本来应该由你来做的工作。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3