Excel工作簿的反盗版程序

我创build了一个基于Excel的POS系统。 为了防止它被盗版,我放了一个Activatebutton,它运行一个macros来获取主板的序列号,并将它存储在工作表中的某个单元中。 当您将软件安装在客户端计算机(许可的计算机)中时,您可以一次性执行此操作。

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

因此,一旦工作簿被locking到许可的机器中并被复制并用于另一台计算机,用户将无法打开工作簿。

黑客是否有办法通过我的安全程序? 如果是的话,我怎样才能阻止他们呢? 还有什么方法可以防止他人盗版我的软件? 谢谢。

这里是代码:

Private Sub Workbook_Open() Dim LicensedMachine As String LicensedMachine = Sheet1.Range("Z102") ''This is where you have already stored licensed machine's motherboard sn If MBSerialNumber <> LicensedMachine Then ''Call function and check if current machine's motherboard sn 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 

只是为了演示Excel的保护是多么糟糕,请做以下的实验:

创build一个简单的工作簿,添加一个模块,并input下面的子

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

现在用密码保护模块,保存为secret.xlsm ,然后退出。

从您的“资源pipe理器”或“Finder”(取决于操作系统),重命名文件(将扩展名从secret.xlsm更改为secret.zip )。 你会发现你现在可以打开文件并看到它的内容 – 是的,所有Office文档的现代文件格式实际上是一个zip文件!

您将在zip存档中find一个文件夹结构。 转到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 # 

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

编辑有趣的是,当我最初粘贴这个时,问号不在那里,代码可以像白天一样简单(甚至在你写的浏览器中出现的答案的预览中)。 显然有一些“隐藏的”字符出现在input的处理过程中,在它被呈现为“最终的”输出之前。 它仍然是非常可读的。

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

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