ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4025|回复: 26

[求助] 用VBA为EXECL表添加授权码机制,同时用VBA编个注册机

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-31 15:01 | 显示全部楼层 |阅读模式
本帖最后由 yz0116 于 2023-4-3 08:12 编辑

我有一个execl表,我想让经过我授权的用户方能使用,想用VBA为该EXECL表添加授权码机制,同时用VBA编个注册机。

具体是用VBA写个代码,获取当前电脑硬盘C盘序列号并转成机器码,然后用sha-1计算哈希值法计算出授权码,在EXECL表打开时显示机器码,并要求填入授权码,当输入的授权码和计算的授权码一致时,EXECL表可以打开,否则自动关闭
用VBA写个注册机,当用户输入之前程序显示的机器码时,用同样的方法计算出授权码,并同时显示出机器码和授权码,其中授权码是可以复制的

我借用GPT写了一个代码,可老是运行出错,请哪位大神指点一下:

授权码机制:
Private Declare PtrSafe Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Workbook_Open()
    '获取C盘序列号并转成机器码
    Dim machineCode As String
    machineCode = GetVolumeSerialNumber("C:\")
    '计算授权码
    Dim authCode As String
    authCode = SHA3(machineCode)
    '显示机器码
    MsgBox "请提供机器码:" & vbCrLf & machineCode
    '要求填入授权码
    Dim inputAuthCode As String
    inputAuthCode = InputBox("请输入授权码:")
    '验证授权码
    If SHA3(inputAuthCode) <> authCode Then
        MsgBox "授权码不正确,无法打开文件。"
        ThisWorkbook.Close False
    End If
End Sub
Function GetVolumeSerialNumber(ByVal strDriveLetter As String) As String
    Dim lpVolumeSerialNumber As Long
    Dim lpMaximumComponentLength As Long
    Dim lpFileSystemFlags As Long
    Dim lpFileSystemNameBuffer As String
    Dim nFileSystemNameSize As Long
    lpVolumeSerialNumber = 0
    lpMaximumComponentLength = 0
    lpFileSystemFlags = 0
    lpFileSystemNameBuffer = String$(255, Chr$(0))
    nFileSystemNameSize = Len(lpFileSystemNameBuffer)
    Dim result As Long
    result = GetVolumeInformation(strDriveLetter, vbNullString, 0, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)
    If result <> 0 Then
        GetVolumeSerialNumber = Hex(lpVolumeSerialNumber)
    End If
End Function
Function SHA3(ByVal str As String) As String
    Dim shaObj As Object
    Set shaObj = CreateObject("System.Security.Cryptography.SHA3Managed")
    Dim bytes() As Byte
    bytes = StrConv(str, vbFromUnicode)
    Dim hash() As Byte
    hash = shaObj.ComputeHash_2((bytes))
    SHA3 = ByteArrayToString(hash)
End Function
Function ByteArrayToString(ByVal arr() As Byte) As String
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        ByteArrayToString = ByteArrayToString & Right("0" & Hex(arr(i)), 2)
    Next i
End Function

注册机:

Private Sub btnCalc_Click()
    Dim machineCode As String
    '获取输入框中的机器码
    machineCode = txtMachineCode.Value
    '计算授权码
    Dim authCode As String
    authCode = SHA3(machineCode)
    '显示机器码和授权码
    txtAuthCode.Value = authCode
    txtMachineCode.SetFocus
    txtMachineCode.SelStart = 0
    txtMachineCode.SelLength = Len(txtMachineCode.Value)
End Sub
Private Sub btnCopy_Click()
    '复制授权码到剪贴板
    Clipboard.SetText txtAuthCode.Value
End Sub
Function SHA3(ByVal str As String) As String
    Dim shaObj As Object
    Set shaObj = CreateObject("System.Security.Cryptography.SHA3Managed")
    Dim bytes() As Byte
    bytes = StrConv(str, vbFromUnicode)
    Dim hash() As Byte
    hash = shaObj.ComputeHash_2((bytes))
    SHA3 = ByteArrayToString(hash)
End Function
Function ByteArrayToString(ByVal arr() As Byte) As String
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        ByteArrayToString = ByteArrayToString & Right("0" & Hex(arr(i)), 2)
    Next i
End Function



TA的精华主题

TA的得分主题

发表于 2023-3-31 15:14 | 显示全部楼层
工程密码秒解,没了工程密码,直接进入代码段,屏蔽你的授权验证代码。破解搞定。

TA的精华主题

TA的得分主题

发表于 2023-3-31 15:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你这个得付费的才能做吧。
做个注册机很容易吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-31 15:43 | 显示全部楼层
我用CHATGPT做了一套,但始终授权码不一致

TA的精华主题

TA的得分主题

发表于 2023-3-31 18:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA代码来保护还是算了吧,太容易被解密了

TA的精华主题

TA的得分主题

发表于 2023-3-31 18:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
对于萌新来说,这样想想无可厚非;
但是,讲真,vba破解简直太容易了;
而且,您要开发的这个玩意,到底是有多大商业价值,才要用这么高端的武器来保护它?

TA的精华主题

TA的得分主题

发表于 2023-3-31 20:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码获取当前文件 所在分区 的序列号=机器码

注册机
机器码+到期日期+加密算法  得到注册码

发布文件: 一个隐藏表(注册码表)保存 注册码 和 最后使用的日期
打开时 隐藏首页之外的所有表
调用函数判断是否已经注册
是:  正常使用 显示工作表(注册码表除外)
否:  提示机器码

TA的精华主题

TA的得分主题

发表于 2023-4-1 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ykcbf1100 发表于 2023-3-31 15:40
你这个得付费的才能做吧。
做个注册机很容易吗?

大神,有空帮我看看这个

https://club.excelhome.net/thread-1658510-1-1.html
奇怪的日期,WPS与微软OFFICE替换代码不相同,且互不通用

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-3 08:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2023-3-31 20:16
代码获取当前文件 所在分区 的序列号=机器码

注册机

是这个意思,能看看我提供的代码有哪些错误吗,运行始终提示各种错误

TA的精华主题

TA的得分主题

发表于 2023-4-3 12:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你不说GPT别人可能还会耐着性子看
你说GPT就没必要仔细研究了。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-30 04:18 , Processed in 0.033736 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表