4

我开发了一个小应用程序,现在我想保护它。

我只想在我自己的计算机上运行它,并且我已经为自己开发了它。

我怎样才能做到这一点?

4

7 回答 7

6

A. 不要发布它。
B. 在代码中硬编码您的计算机名称,并让程序首先验证System.Environment.MachineName与它匹配的名称。

于 2010-03-04T14:27:07.290 回答
2

您可以随时查看处理器 ID 或主板序列号。

Private Function SystemSerialNumber() As String
    ' Get the Windows Management Instrumentation object.
    Dim wmi As Object = GetObject("WinMgmts:")

    ' Get the "base boards" (mother boards).
    Dim serial_numbers As String = ""
    Dim mother_boards As Object = _
        wmi.InstancesOf("Win32_BaseBoard")
    For Each board As Object In mother_boards
        serial_numbers &= ", " & board.SerialNumber
    Next board
    If serial_numbers.Length > 0 Then serial_numbers = _
        serial_numbers.Substring(2)

    Return serial_numbers
End Function


Private Function CpuId() As String
    Dim computer As String = "."
    Dim wmi As Object = GetObject("winmgmts:" & _
        "{impersonationLevel=impersonate}!\\" & _
        computer & "\root\cimv2")
    Dim processors As Object = wmi.ExecQuery("Select * from " & _
        "Win32_Processor")

    Dim cpu_ids As String = ""
    For Each cpu As Object In processors
        cpu_ids = cpu_ids & ", " & cpu.ProcessorId
    Next cpu
    If cpu_ids.Length > 0 Then cpu_ids = _
        cpu_ids.Substring(2)

    Return cpu_ids
End Function

取自:http ://www.vb-helper.com/howto_net_get_cpu_serial_number_id.html

这是Jim 提出的将其转换为 Option Strict 的问题。

于 2012-09-24T14:40:33.470 回答
1

这实际上取决于谁是“敌人”。

如果您希望保护它免受贪婪、非破解的朋友的侵害,那么您可以仅在注册表中找到特定密码(使用加密安全哈希函数)时才运行应用程序,或者按照 Jay 的建议使用 MachineName .

但是,如果您正在考虑保护它免受严重的“敌人”的侵害,请注意:数学上已经证明,只要硬件不安全,在其上运行的任何软件本质上都是不安全的。这意味着每个软件都是可破解的,任何保护机制都是可绕过的(即使是安全的硬件设备,例如 Alladin 的 Finjan USB 产品密钥,因为其余硬件都是不安全的)。由于当今大多数(如果不是全部)硬件都是不安全的,因此您根本无法在软件中获得 100% 的安全性。

在这两者之间,有许多用于许可和复制保护的安全解决方案。这一切都归结为谁是敌人,什么是威胁。

于 2010-03-04T14:35:48.953 回答
1

无论你多么努力,如果有人真的想在另一台计算机上运行它,他们会的。

所需要做的就是对您的保护进行逆向工程,以

  1. 去掉它
  2. 玩它
于 2010-03-04T14:36:26.253 回答
1

另一种选择可能是让您的程序向用户询问具有派生答案的问题。这是一个脑死亡的例子......

你的程序:“现在几点了?”

你输入:(TheYear + 10 - theDay + 11)Mod 13

这样,实际上只有您可以运行程序,而不是依赖于机器。

于 2010-03-04T20:44:56.217 回答
1

我在 VB DOS 中做了这样的事情。

我要么制作了一个不可删除的文件,该文件是特定机器的关键,其中包含代码,和/或读取 .pwl 文件并进行了几次检查,这些检查仅在您的机器上。不可编辑的文件是使用 char 233 等扩展字符集制作的,因此当有人试图查看它时,它将打开一个空白副本(编辑)(write.ex),因此无法读取数据并且无法编辑移动或删除。

它需要是某些字符;我不确定 128 到 255 之间的每个宪章是否都可以正常工作,一些扩展角色可以做到这一点,有些不行,它也可以被击败,但它会阻止一些人,

它可以在程序环境中读取或检查。没有什么是完全安全的,这是我搞砸的一些事情。

注意:该文件将很难删除,可能会创建一个测试目录来测试它。

我希望这没关系我不太擅长向人们传达信息;我从 1982 年开始编程。

于 2012-09-24T03:58:44.643 回答
0

另一个想法......我写了一个不能直接运行的程序,它只能由一个外部文件运行,所以你可以在其中添加一个密码输入部分并加密密码,这样它就不能很容易地读取,我做了一个可执行文件要测试的 vb 程序版本。它将一个字符写入松弛空间,因此如果程序看到该值将不会运行,但是运行程序具有不同的字符,并将其更改为该字符,并且程序设计为仅在该字符是正确的,仅由跑步者制作,然后当它进入时将其变回以使其不会保持打开状态,我已经制作了这种东西,并且确实有效,总有一种方法可以击败任何保护,目标是如果您不希望他们运行或使用您的程序,可以减慢他们的速度或阻止他们运行或使用您的程序。

于 2012-10-24T02:50:09.323 回答