2011-12-12 28 views
1

我不是一名軟件工程師,因爲您會看到如果您繼續閱讀,但是我設法編寫了一個非常有價值的應用程序,爲我們公司節省了大量資金。我沒有支付編寫軟件的費用,我沒有爲編寫此應用程序付費,我的職位也不是軟件工程師,所以如果我必須離開,我想完全控制誰使用此應用程序,因爲據我所知這在法律上並不屬於他們(也不在公司時間內寫)。使用WebRequest檢查許可證是否有效

這聽起來可能幼稚,但我已經投入了很多時間,而且我幾乎每天都在維護它,所以我覺得我應該有一些控制權,或者至少可以把它賣給我公司如果他們曾經讓我離開,或者我想繼續前進。

這個應用程序我目前的保護方案看起來是這樣的:

string version; 
WebRequest request = WebRequest.Create("http://MyWebSiteURL/Licence text file that either says 'expired' or "not expired'"); 
WebResponse response = request.GetResponse(); 
StreamReader stream = new StreamReader(response.GetResponseStream()); 
version = stream.ReadToEnd(); 
stream.Close(); 
response.Close(); 

if (version == ("not expired") == false) 
{ 
    MessageBox.Show(Environment.NewLine + "application expired etc etc", "Version Control"); 
} 

它會檢查我的服務器「未過期」(純文本),而如果WebRequest的回來,只能作爲「未過期「,它最終會彈出另一個表單,說明它已過期,並允許您輸入日期的密碼,這是當前日期的某些預定數字的乘法,以便在需要時創建」日間通行證「(我認爲Alan Turing只是翻過他的墳墓)。

不是最好的安全方案,但我認爲這是非常聰明的沒有軟件安全經驗。然而,我聽說過十六進制編輯來解決安全問題,所以我做了一些科學測試,發現我編譯的EXE的這個區域:

「System.Net.WebRequest」。我填滿了零,看起來像這樣:System.Net000000000

這是所有花抵消應用程序的加載服務器檢查這讓我點擊「繼續」時打嗝,完全繞過所有我的「安全」,並繼續使用該程序,而不會過期。

現在一個普通人會去這個長度(十六進制編輯)試圖超越我的保護計劃嗎?儘管不像學習經驗那麼可能,但作爲增加步驟來進行十六進制編輯或其他任何常用解決方法,除非是「專業」解密者,否則我可以做些什麼?

我再次不是偏執狂,我只是渴望更多地瞭解應用程序的安全性。我既爲自己感到自豪,又爲創造和打破自己的保護而感到羞愧。

如果發表評論,請客氣,因爲我知道這可能是一個比我更知情的肱骨文章,因爲我真的沒有什麼經驗來編寫軟件,並且從未接受過任何類型的課程等。感謝您的閱讀!

+3

這聽起來像你應該說你的公司約及彼的補償,而不是採取技術措施。 –

+0

@MitchWheat,他說他在他自己的時間裏工作。 – Amy

回答

1

繞過許可證檢查的另一種方法是將檢查url重定向到localhost,始終返回所需的文本...
更好的方法是調用函數做同樣的事情,但要讓服務器響應一個包含服務器響應時間戳的簽名XML,以便使用系統日期時間檢查添加(在雙方中使用UTC日期) 。只要某些事情不像您期望的那樣拋出異常,並通過異常處理來控制程序的流程,這也是一個好主意。
檢查以下內容以獲得如何線索:
How to: Sign XML Documents with Digital Signatures
How to: Verify the Digital Signatures of XML Documents

+0

用於XML簽名的+1 – Vamsi

+0

用於輸入的Thx – Saintjah

+0

總是很高興 – 2011-12-12 18:04:57

0

現在將一個正常的人去這個長度(十六進制編輯)嘗試 過去我的保護計劃?

嗯,我想,這取決於應用程序對於「普通人」的有用程度,以及如何確定他是否能夠正常工作。

大多數.NET應用程序,除非混淆可以很容易地去編譯使用工具,如(Telerik JustDecompile)的源代碼,或者他們可以簡單的使用ildasm看到IL代碼,我聽到有,甚至反編譯混淆工具.net庫,雖然我還沒有使用或找到任何。

憑藉自己的一點經驗,我可以建議兩種方法

  1. 強制許可和中清楚地運行在用戶機器上的應用程序破解它是一個cat and mouse game,您可以通過移動添加一些額外的保護你的代碼某些部分的應用程序功能向​​服務器公開,並將其公開爲客戶端可以使用的Web服務,移動到服務器的部分必須是應用程序工作的重要部分,應該是難以模擬的東西。
  2. 另一種方法是將自動更新功能添加到您的應用程序中,以檢查服務器是否有最新更新,並且何時發現新版本會覆蓋舊版本,從而覆蓋任何破解版本,這可以很容易禁用,但是如果禁用此也將停止

我都嘗試了一種方法,你可能會釋​​放任何錯誤修復,但他們只是在一定程度上有用的,你必須決定它是否是值得的執行與否

+0

是的,我之前進行了反編譯,非常有趣!感謝您提供的信息,我喜歡此主題上的所有回覆。 – Saintjah

相關問題