【问题标题】:Close wpf application using dll使用 dll 关闭 wpf 应用程序
【发布时间】:2019-11-19 07:34:08
【问题描述】:

我有一个带有“身份验证”方法的 dll,用于检查密码是否有效,如下所示:

public static void AuthenticationExample(string password)
{
    if (PasswordIsValid(password))
        this.locked = false;
}

为了防止密码被循环“破解”,我希望该方法在身份验证失败时使整个应用程序崩溃,如下所示:

public static void AuthenticationExample(string password)
{
    if (PasswordIsValid(password))
        this.locked = false;
    else
        Crash();
}

有没有办法做到这一点?

另外,保护 dll 的更好方法是什么?

【问题讨论】:

  • 据我所知,使应用程序崩溃的唯一可靠方法是导致StackOverflowException,因为其他异常可能会被捕获和忽略。为什么你的 DLL 有密码?为什么您希望最终用户不简单地对 DLL 进行逆向工程以破解它。也许更值得注意的是,您为什么希望用户不会简单地通过反射设置locked = false?我在运行时替换了第三方 DLL 许可类中的属性一次(为了好玩,而不是为了盈利),然后 DLL 调用我的方法来验证许可。
  • 另外我猜用户可以重新启动应用程序,或者我错过了什么?
  • 该 dll 有一个密码,使盗版更加困难。我开始只是混淆它,但后来我意识到如果他们在项目中实现它,任何人仍然可以使用它。您能否详细说明如何更改“锁定”字段?是的,用户可以重新启动应用程序,但它更难,更耗时。
  • typeof(AuthenticationClass).GetField("locked", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField).SetValue(authenticationClassInstance, false); - Working example
  • 撕掉我的锁定方法。你知道更好的方法吗?

标签: c# wpf dll


【解决方案1】:

关闭 WPF:

您可以只调用主窗口并将其关闭或引发自定义异常。

密码保护:

我有同样的问题。最后,明白了无论做什么,都可以破解。没有什么是失败的证明。如果您的许可证验证是在云端完成的,例如将一些信息发送到服务器并接收回响应,则可以在一定程度上对其进行管理。

仅仅因为一切都可以被黑客入侵,并不意味着您必须让您的产品敞开大门以供破解。你可以添加一些障碍,这样饼干就不难了。如果产品值得付出努力,最终会有人破解它。

对于我的应用程序,我有 2 或 3 个许可步骤(这可以减慢黑客的速度,但不会阻止他/她)

  1. 具有用于验证许可证的加密方法的 dll(例如 DLL-A)。 DLL-A 将被放置在工作目录中。除此之外,此 dll 的副本(例如 DLL-B)也将作为嵌入式资源放置。

  2. 在运行时,当即将加载 DLL-A 时,将提取 DLL-B 并比较两者的哈希值。这是为了确保 DLL-A 不被篡改。如果 DLL-A 被篡改,DLL-B 将替换 DLL-A。

  3. 与该 dll 方法一起,还将使用 XML 签名文件。这将在代码中的某处得到验证。

  4. 一个 C++ 本地库,具有不同的加密方法。这也将用于类似于 DLL-A /DLL-B 过程(步骤 1,2)。

因此,在我的应用程序中,我通常使用 3 到 4 种不同的许可证验证方案。都是独立的。即使一切都可以被黑客入侵和破坏,黑客将不得不厌倦尝试入侵所有 4。而且每年,我都会更改我的许可方法并更新新的应用程序。因此,这意味着每年,黑客都必须花费大量时间来破解它。 (这最终会让他们感到沮丧)。

最重要的是,我还为我的应用程序(将凭据存储在云数据库中的应用程序)进行了基于云的验证。但是,仍然有一些客户希望他们的应用程序在没有连接到互联网的情况下运行(由于某些安全原因)。

注意:最终一切都可以破解。关键是你只是让黑客很难。

【讨论】:

  • 要解决这 4 个问题,我可能只是看看我是否可以替换那些认为他们正在进行验证的方法。是的,可以在运行时替换方法,而无需继承类等。我确实花了一段时间才找到足够的信息来做这件事,而且我不能立即再次找到它,所以你的方法可能会坚持下去/劝阻大多数人。
  • 完全正确.. 有可能.. 我也使用基于 RSA 的公钥/私钥方法。所以,关键是它比没有保护的应用程序需要更多的时间来破解。最终,一切都是可以破解的。
  • 正如你所指出的,他们“思考”的方法..他们必须思考和弄清楚..所以,我们可以在不同的地方检查它..在我的一个应用程序中,验证在一个阶段完成,异常在不同阶段抛出。所以,这些都是让黑客措手不及的小技巧..
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多