2010-03-04 68 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程序來測試。它會在空間中寫入一個字符,所以如果程序看到該值,它將不會運行,但是亞軍程序具有不同的字符,並且將其更改爲該字符,並且程序被設計爲只在字符爲正確的,只有跑步者做出來的,然後當它進入時它會改變它,所以它不會被打開,我做了這件事情,它確實有效,總是有辦法打敗任何保護,目標是以減緩它們的速度,或者阻止它們運行或使用你的程序,如果你不想它們的話。我可能在以後的例子中包括例子。

相關問題