Excel VBA自毁开关

C-L*_*511 4 excel vba excel-vba

我有我的第一个"客户 - 带我的工作 - 然后 - 幻影我没有付费"的经历.对于未来,我想放入一个killswitch,伪装成一个普通的宏,这使整个事情无法使用.这样,即使他们雇用某人破解密码并删除我的"你的试用期已过期......"检查,一个看起来很正常的宏(像"Fix_Sheet_Formatting"之类的东西)很容易被忽视和运行,摧毁一切并保存变化.

然而,这离开了VBA ...我们在这里谈论完全清除,所以一切都必须去.我会弄清楚如何自己所有这些,我只是不想浪费时间去追求一些不可能的事情:

可以VBA代码删除自己从一个工作簿时运行或者它必须从另一个工作簿中的宏删除?删除代码会导致宏停止运行,还是我可以删除除了令人讨厌的MsgBox之后的所有内容?

Com*_*ern 5

我会留下评论来辩论这是否是一个好主意(恕我直言,它可能不是).至于问题本身,当然有可能,并且不会中断宏执行:

Public Sub Example()
    Dim proj As Object
    Set proj = ThisWorkbook.VBProject
    Dim comp As Object
    For Each comp In proj.VBComponents
        With comp.CodeModule
            .DeleteLines 1, .CountOfLines
            If comp.Name = "ThisWorkbook" Then
                .InsertLines 1, "Private Sub Workbook_Open()" & vbCrLf & _
                                vbTab & "MsgBox ""Where's my money, @#$%&!?""" & vbCrLf & _
                                "End Sub"
            End If
        End With
    Next
    ThisWorkbook.Save
End Sub
Run Code Online (Sandbox Code Playgroud)

混淆是读者的练习.

  • @ C-Love511注意:如果没有混淆,此代码将破坏*当前正在运行*的启用宏的工作簿的一个副本.如果您的用户制作了副本,甚至只是备份了他们的网络文件夹,他们总是可以恢复备份并让您的代码相信审判仍然有效,直到他们找到破解代码并进行调整的方法.正确混淆,他们可以做到这一点并破解代码......只是发现没有什么有意义的东西可以看到,并且反向工程*会花费更多费用而不仅仅是支付你的工作费用. (2认同)