2010-03-04 66 views
4

我开发了一个小应用程序,现在我想保护它。保护软件只在vb.net的一台电脑上运行

我想只在我自己的电脑上运行它,而且我自己开发了它。

我该怎么做?

+2

你想要保护它到底是什么?如果你只在自己的电脑上运行它,当然没有人可以偷它?据推测,没有人会使用你的电脑,或者如果他们这样做,你相信他们? – MarkJ 2010-03-04 14:34:44

+3

您应该查看以下链接:http://stackoverflow.com/questions/651291/securing-a-net-application/651375#651375 并使用@ Jay的答案,如果你真的想追求这一点。 – David 2010-03-04 14:35:09

+0

你是说你*不小心写了病毒,现在你想阻止它传播? – 2010-03-04 14:54:19

回答

6

A.不要发布它。
B.在代码中对您的计算机名称进行硬编码,并使程序第一件事是验证System.Environment.MachineName与它匹配。

+0

如果我重新安装窗口的新副本,我不认为该机器名保持不变...... – 2010-03-04 14:31:55

+1

@testkhan:无论你喜欢什么,你都可以制作机器名称。 – 2010-03-04 14:33:56

+1

......这也意味着其他人可以设置一个机器名称来匹配运行你的代码所需要的,假设(1)他们真的想要运行你的代码,(2)他们知道需要一个特定的机器名。 – Jay 2010-03-04 18:04:38

1

这真的取决于谁是“敌人”。

如果您希望保护它免受贪婪,非破解者朋友的侵害,那么只有当在注册表中找到某个密码(使用加密安全散列函数)时才可以运行该应用程序,或者使用计算机名称杰伊建议。

但是如果你想保护它免受严重的“敌人”的攻击,请注意:数学上已证明只要硬件不安全,其上运行的任何软件本身就是不安全的。这意味着每一个软件都是可以破解的,任何保护机制都是可以绕过的(甚至是安全的硬件设备,比如Alladin的Finjan USB产品密钥,因为其余的硬件都是不安全的)。由于大多数(如果不是全部的话)今天的硬件是不安全的,你根本无法在软件中获得100%的安全性。

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

1

不管你怎么努力,如果有人真的想在另一台计算机上运行,​​他们会的。

所有需要做的保护,反向工程来

  1. 删除
  2. 发挥与它
1

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

你的计划:“现在是什么时候呢?”

输入:(+的某些地方10 - theDay + 11)国防部13

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

1

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

,我不是做了一个不可删除的文件,该文件是内部一码键特定的机器,和/或读取.PWL文件,并有多次检查,只有那些在计算机上。不可编辑的文件是由扩展字符集(如char 233)创建的,所以当一个人试图查看它时,它会打开一个空白副本(编辑)(write.ex),因此无法读取数据并且无法编辑它。或删除。

它需要是某些字符;我不知道,如果128和255之间的每一个包机将工作吧,有些扩展字符工作,要做到这一点有些不会,也可以打败,但会保留一些人出来,

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

注意:该文件将非常难以删除,也许做一个测试目录来测试这个。

我希望这是好的我不擅长向人们传达信息;我自1982年起编程。

+0

我也制作了一个程序,回来的时候我们都用软盘驱动器,叫做键盘我在软盘上放了一个不可删除的文件,然后制作一个程序读取软盘并查找那个文件,然后签名 – steven 2012-10-08 04:05:49

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

Here's a question吉姆转换为这个选项严格。

+0

在Windows 7上正常工作和Windows 10! – fedeteka 2017-01-11 19:11:57

+0

如果选项严格,Dude这不起作用。地狱类对象的对象如何支持像ExecQuery这样的方法? – 2017-03-22 08:00:25

+0

@JimThio我添加了一个链接到您的新问题。 – 2017-03-22 12:54:17

0

另一个想法...我写了一个程序,不能直接运行,它只能通过外部文件运行,所以你可以在它的密码输入部分添加并加密密码,因此不能很容易地读取,我做了一个可执行版本的vb程序来测试。它会在空间中写入一个字符,所以如果程序看到该值,它将不会运行,但是亚军程序具有不同的字符,并且将其更改为该字符,并且程序被设计为只在字符为正确的,只有跑步者做出来的,然后当它进入时它会改变它,所以它不会被打开,我做了这件事情,它确实有效,总是有办法打败任何保护,目标是以减缓它们的速度,或者阻止它们运行或使用你的程序,如果你不想它们的话。我可能在以后的例子中包括例子。

相关问题