我创建了一个基于Excel的POS系统.为了防止它被盗版,我放了一个激活按钮,它运行一个宏,获取主板的序列号并将其存储在工作表中的某个单元格中.当您在客户端的计算机(许可的计算机)中安装软件时,可以执行此操作一次.
然后我在ThisWorkbook中编写了一个事件程序,它将获取计算机主板的序列号,并将其与之前为许可机器存储的序列号进行比较.如果软件被复制并在另一台机器中使用,当然不会有匹配.将通过一条消息通知用户,"您已在另一台计算机上安装该程序.对于许可版本,请联系blah blah ..."当用户单击"确定"按钮时,工作簿将关闭.该项目已被锁定以供查看.
因此,一旦将工作簿锁定到许可机器中并将其复制并在另一台计算机中使用,用户将无法打开工作簿.
有没有办法让黑客通过我的安全程序?如果是这样,如何以及如何阻止它们?还有哪些其他方法可以防止他人盗用我的软件?谢谢.
这是代码:
Private Sub Workbook_Open()
Dim LicensedMachine As String
LicensedMachine = Sheet1.Range("Z102") ''This is where you have already stored licensed machine's motherboard s.n.
If MBSerialNumber <> LicensedMachine Then ''Call function and check if current machine's motherboard s.n. matches the licensed machine's.
MsgBox Title:="EXCEL POS", Prompt:="You have installed program in another computer." & vbCrLf & _
"Contact R House at 0917-555-1234 or rjhouse@hotmail.com for licensed copy.", _
Buttons:=vbExclamation
ActiveWorkbook.Save
ActiveWorkbook.Close
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
只是为了演示Excel的保护程度是多么严重,请执行以下实验:
创建一个简单的工作簿,添加一个模块,然后输入以下子
Sub protectMe()
MsgBox "This should not be seen"
End Sub
Run Code Online (Sandbox Code Playgroud)
现在使用密码保护模块,另存为secret.xlsm,然后退出.
从"资源管理器"或"Finder"(取决于操作系统),重命名文件(将扩展名更改secret.xlsm为secret.zip).你会发现你现在可以打开文件并查看其内容 - 是的,所有Office文档的现代文件格式实际上都是一个zip文件!
您将在zip存档中找到一个文件夹结构.转到该xl文件夹,您将看到vbaProject.bin.当您使用文本编辑器打开此文件时,您将看到它充满了垃圾 - 但它也包含代码的纯文本!这是一个简短的例子:
??? ???ê???@??????|?????? ???Ì???????(?????????????????????????????????????????????????????????????????????????H??????????????????????????????????????????????@???¯<sS?$?*?\?R?f?f?f?f?*?0?9?5?3?7?3?3?d?0?8??*?\?R?0?*?#?1?4??????????????????????????????????????????????????????????????? ??"Å????????Å?"?:????Å??????????@???ñ??????o???p??????This should not be seen?A@???????????@???????0???????x??????`????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????`??Attribut?e VB_Nam?e = "Mod?ule1"
Su?b protec?tMe()
Ms?gBox "Th?is shoul?d not be? seen"
End ?h
???????????????????rUÄ???Ä???Ä???Ä?????~|????????? ??????? ???????????????????????°??????Ñ???D???ƒ?ƒ:?hÄ?h†?h¿??????????¯‡?χ?"???Ú|???‡?¿?†?Ä?ƒ??’?????Ñ?D?$??????'?????????????????????????‡??¿??†??Ä?????????????????B?????R?????????????????????????????????????????????????????????????????????rUÄ???????Ä???Ä?????????? ??????????????????????$?Å?????????`?????????????????????????????n???????????????????????????????Ãam???? ?? ??'????????????™*?\?H?{?0?0?0?2?0?4?E?F?-?0?0?0?0?-?0?0?0?0?-?C?0?0?0?-?0?0?0?0?0?0?0?0?0?0?4?6?}?#?6?.?0?#?9?#?M?a?c?i?n?t?o?s?h? ?H?D?:?A?p?p?l?i?c?a?t?i?o?n?s?:?M?i?c?r?o?s?o?f?t? ?O?f?f?i?c?e? ?2?0?1?1?:?O?f?f?i?c?e?:?V?i?s?u?a?l? ?B?a?s?i?c? ?f?o?r? ?A?p?p?l?i?c?a?t?i?o?n?s?.?f?r?a?m?e?w?o?r?k?:?V?e?r?s?i?o?n?s?:?1?4?:?R?e?s?o?u?r?c?e?s?:?V?B?A? ?O?b?j?e?c?t? ?L?i?b?r?a?r?y?#
Run Code Online (Sandbox Code Playgroud)
所以是的 - 如果你真的关心你的软件的安全性,这不是要走的路......
有趣地编辑,当我最初粘贴它时,问号不在那里,代码可以像白天一样简单地阅读(即使在你编写的浏览器中出现的答案的预览中).显然,在处理输入期间以及在将其呈现为"最终"输出之前,会出现一些"隐藏"字符.它仍然非常易读.