Excel工作簿的反盗版程序

Excel工作簿的反盗版程序,excel,vba,Excel,Vba,我创建了一个基于Excel的POS系统。为了防止被盗版,我设置了一个激活按钮,运行一个宏,获取主板的序列号,并将其存储在工作表中某个单元格中。在客户端计算机(授权机器)中安装软件时,您只需一次性执行此操作 然后,我在这个工作簿中编写了一个事件过程,该过程将获取计算机主板的序列号,并将其与先前为许可机器存储的序列号进行比较。如果软件被复制并在另一台机器上使用,当然不会有匹配的。用户将收到一条消息通知,“您已在另一台计算机上安装了该程序。对于许可版本,请联系布拉布拉布拉…”当用户单击“确定”按钮时,

我创建了一个基于Excel的POS系统。为了防止被盗版,我设置了一个激活按钮,运行一个宏,获取主板的序列号,并将其存储在工作表中某个单元格中。在客户端计算机(授权机器)中安装软件时,您只需一次性执行此操作

然后,我在这个工作簿中编写了一个事件过程,该过程将获取计算机主板的序列号,并将其与先前为许可机器存储的序列号进行比较。如果软件被复制并在另一台机器上使用,当然不会有匹配的。用户将收到一条消息通知,“您已在另一台计算机上安装了该程序。对于许可版本,请联系布拉布拉布拉…”当用户单击“确定”按钮时,工作簿将关闭。项目已锁定以供查看

因此,一旦工作簿被锁定到授权计算机中,并在另一台计算机上复制和使用,用户将无法打开工作簿

黑客有没有办法通过我的安全程序?如果是这样,我怎样才能阻止他们?我还可以采取哪些其他方法防止他人盗版我的软件?谢谢

代码如下:

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
Private子工作簿\u Open()
Dim Licensed机器作为字符串
LicensedMachine=Sheet1.Range(“Z102”)“这是您已经存储许可机器主板s.n。
如果MBSerialNumber LicensedMachine,则“调用函数并检查当前机器的主板序列号是否与许可机器的匹配。
MsgBox标题:=“EXCEL POS”,提示:=“您已在另一台计算机上安装了程序。”&vbCrLf&_
“请致电0917-555-1234联系R House或rjhouse@hotmail.com如属持牌副本。”_
按钮:=感叹号
活动工作簿。保存
活动工作簿。关闭
如果结束
端接头

无法保证您可以阻止拥有Excel技能的人员复制您的工作簿。例如,即使我在单元格中看不到值(因为您锁定了查看区域),我仍然可以通过其他工作簿中的公式访问它。密码保护?有许多网站会破解Office文档中的密码


但是,一种可能有效的方法是使用创建验证服务器。您可以拥有自己的web服务,根据主板序列号验证用户名和密码。但是,即使这样,熟练的用户也可以对您的工作簿进行反向工程,并删除调用web服务的代码。

为了演示Excel的保护功能有多严重,请进行以下实验:

创建简单工作簿,添加模块,然后输入以下子项

Sub protectMe()
MsgBox "This should not be seen"
End Sub
现在用密码保护模块,另存为
secret.xlsm
,然后退出

从“资源管理器”或“查找器”(取决于操作系统)重命名文件(将扩展名从
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�fl������������������������������������������������������������˛ ��"Å��������Å�"�:����Å������ˇˇˇˇ@���ñ������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�#

�ˇˇ ���ê���@˛ˇˇˇˇˇ|ˇˇˇ�ˇˇ ���Ì���ˇˇˇˇ(���������������������ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ����717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171�������������ˇˇˇˇ����ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ�@���“'如果代码因为某种原因在某个地方抛出错误,那么看起来您的代码不会在错误时关闭。因此,如果他们选择调试,他们将能够看到您的代码。另外,excel一开始就不是那么安全。我忽略了在错误时关闭它。谢谢:-)最近提出了一个相关问题。大家好,我是一个自学成才的程序员,还有很多东西要学。我认为你们专家是对的。使用Excel VBA编写商业软件不是一个好主意,我认为Excel密码很容易被破解。我必须重做我在Excel其他地方所做的事情。我可以阻止普通用户,但不能阻止专家。我学到了一些新的东西,感谢大家花时间为我的知识库做贡献。为大家干杯,祝大家有一个美好的一天:-)我希望这不是你发布的代码片段中的实际电子邮件和电话号码。。。如果你关心安全,在公共场所同时留下两张身份证件是朝着错误方向迈出的一大步。令人惊讶的是,人们可以从不同的来源获取信息来创建您的身份图片。我冒昧地给你解释一下。很好的解释和例子!非常有用。谢谢你对Floris的洞察和迷惑。CrunchCode()或不可见的Basic()呢?这些工具是防黑客的,还是它们提供了足够的迷惑,让黑客觉得花时间想办法通过我所谓的“盾牌”是不值得的?@Kazuo-你链接到“帮助”的工具,但它们不能完全解决问题。是否有人会费心去覆盖这些内容,这确实是一个关键问题——但如果他们能发现你测试了主板ID,那么他们就可以寻找一个具有这样一个值的单元格,并将其更改为与新的MB匹配。要解决这个问题,您至少需要散列该值,而不是将其存储在纯文本中。“如果您想要安全/保护IP,请不要使用excel”。我想你已经听到了这条信息,响亮而清晰…嗨,Floris,我的主板序列号的字符串值是如何散列的?你有什么能帮我的链接吗?@Kazuo-我想不出具体的方法。只是想“分散n