【问题标题】:How to programmatically detect VB.NET obfuscation?如何以编程方式检测 VB.NET 混淆?
【发布时间】:2016-05-28 10:00:02
【问题描述】:

我在发布前使用 ConfuserEx 对我的程序进行混淆处理,我希望程序在没有混淆的情况下运行时显示警告。以减少发布非混淆可执行文件的机会。 所以在运行时我想要一个返回真/假的函数,这取决于是否应用了混淆。

【问题讨论】:

  • 任何人都可以评论你为什么不投票吗?这似乎是一个非常合理的问题。
  • 一个混淆器应该发出 [assembly:ObfuscateAssemblyAttribute]。如果您不知道自己的是否有,或者找不到,请联系供应商的支持以获取正确的方法。
  • 我是反射新手,我将如何测试组装:ObfuscateAssemblyAttribute ?

标签: vb.net obfuscation


【解决方案1】:

我可以看到两种方法。

如果您使用的混淆过程是发布版本的一部分,因此您的发布版本中嵌入了混淆部分的说明,您可以执行类似的操作。

AppValidator.Validate()

验证将验证它是发布版本,或者如果不是,则验证应用程序是为允许的用户(例如开发团队)运行的。

我还添加了一种通过命令行调用 Myapp.exe validate 进行验证的方法

但是。这不会验证混淆,它验证应用程序处于发布模式。

如果您的混淆器嵌入到发布版本中,如果他无法混淆发布版本或此验证的前提不好,则应该会失败。

Public Class AppValidator
#If DEBUG Then
Private Shared ReadOnly IsDebugVersion As Boolean = True
#Else
private Shared ReadOnly IsDebugVersion As Boolean = False
#End If

Private Shared ReadOnly ISValidUser As Boolean = ValidateDevUser()


''' <summary>
'''     Validate the user is authorized to run the program as 
''' </summary>
''' <returns></returns>
Private Shared Function ValidateDevUser() As Boolean
    Try
        ' Custom validation to determine if used in dev. environment such
        'as validating username and domain name or checking agains Dev. Registry key
    Catch ex As Exception
        Return False
    End Try
    Return True
End Function

Public Shared Function Validate() As Boolean
    Dim Args = Environment.GetCommandLineArgs
    Dim ConsoleValidate As Boolean = Args.Count = 2 AndAlso String.Compare(Args(1), "validate") = 0


    If IsDebugVersion Then
        If ConsoleValidate Then
            Console.WriteLine(Not IsDebugVersion)
            Application.Current.Shutdown()
            Return False
        End If

        If Not ValidateDevUser() Then
            MessageBox.Show("Access Denied")
            Application.Current.Shutdown()
            Return False
        End If

    End If

    Return True
End Function
End Class

如果您可以确定如果发布版本生成并且混淆器步骤失败,则构建将失败,那么第一个解决方案是最好的。

如果你不能确定,你可以看看 Obfuscation checker,来自 Red-gate,它是免费的,有一个命令行,可以直接做你想做的事情。

【讨论】:

  • 谢谢,我喜欢你的验证逻辑示例。但我确实想检查实际的混淆,而不是假设它在构建过程中被正确应用。
  • 查看我文章末尾的链接:Obfucation Checker 是 red-gate 提供的免费工具,可以让你直接做你想做的事。
  • 谢谢,我是通过尝试反汇编exe手动检查的。 red-gate 工具看起来很有用,尽管我担心它只是他们混淆产品的营销工具,因此低估了其他人混淆工具的结果。我最初要求一种在运行时检查的方法,因此如果正在运行非混淆版本,我可以显示错误。同样,程序可以记录没有混淆的日志。我仍然没有解决方案。
【解决方案2】:

您可以使用ILSpy 之类的东西,并在使用WM_COPYDATA API 参数构建后自动运行,如下所示:

https://github.com/icsharpcode/ILSpy/blob/master/doc/Command%20Line.txt

让它导航到一个应该被混淆的类型名称;如果失败了,你就知道混淆成功了。

【讨论】:

    猜你喜欢
    • 2021-03-24
    • 2019-03-24
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2013-06-28
    • 2014-06-06
    • 2018-12-22
    相关资源
    最近更新 更多