我正在使用ConfuserEx来混淆我的程序在发布之前,我希望程序显示一个警告,如果它是运行没有混淆。以便减少未混淆的可执行文件被运送的机会。所以在运行时,我想要一个返回true/false的函数,这取决于是否应用了混淆。
发布于 2016-05-28 22:27:24
我可以看到两种方法。
如果您使用的混淆过程是发布构建的一部分,因此您的发布构建具有用于混淆部分的嵌入式指令,那么您可以这样做。
AppValidator.Validate()验证将验证它是否为发布版本,如果不是,则验证应用程序是否为允许的用户(开发人员)运行。例如团队)。
我还添加了一种通过命令行调用Myapp.exe validate进行验证的方法
然而。这不会验证每个see的模糊处理,而是验证应用程序是否处于发布模式。
如果您的混淆器嵌入到发布版本中,那么如果他不能混淆发布版本,或者这个验证的前提不好,那么它就会失败。
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第一个解决方案是最好的,如果你能确定如果发布版本产生了,那么构建将会失败,并且模糊步骤失败。
如果你不能确定这一点,也许你可以看看Red-gate上的Obfuscation checker,它是免费的,有一个命令行,可以直接做你想做的事情。
发布于 2017-02-06 22:55:27
您可以使用类似ILSpy的代码,并在使用WM_COPYDATA API参数进行构建后自动运行它,如下所示:
https://github.com/icsharpcode/ILSpy/blob/master/doc/Command%20Line.txt
让它导航到应该进行模糊处理的类型名称;如果失败,您就知道模糊处理成功了。
https://stackoverflow.com/questions/37497617
复制相似问题