Excel工作簿的反盗版程序

时间:2013-06-22 00:23:48

标签: excel excel-vba vba

我创建了一个基于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

2 个答案:

答案 0 :(得分:7)

为了证明Excel的保护有多么严重,请进行以下实验:

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

Sub protectMe()
MsgBox "This should not be seen"
End Sub

现在使用密码保护模块,保存为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�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�#

所以是的 - 如果你真的关心你的软件的安全性,这不是要走的路......

编辑有趣的是,当我最初粘贴它时,问号不存在,代码可以像白天一样简单地阅读(即使在浏览器中显示的答案预览中)写)。显然,在处理输入期间以及在将其呈现为“最终”输出之前,会出现一些“隐藏”字符。它仍然非常易读。

答案 1 :(得分:0)

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

然而,可能有用的方法是使用创建验证服务器。您可以拥有自己的Web服务,根据主板序列号验证用户名和密码。但是,即便如此,熟练的用户也可以对工作簿进行逆向工程,并删除可以调用Web服务的代码。