一般軟件的注冊機制可以通過獲取硬件序列號,然后用 非對稱加密算法 生成相應的 公鑰 和 私鑰 。但是用Managed Code寫獲取硬盤序列號的代碼不能解決所有的問題,比如不能在非管理員的權限下使用,前幾天Sunmast在他的Blog上發布了《 如何得到硬盤序列號?.NET版本[C#] 》,就是沒有解決這個問題,用WMI也有很多問題。
要想順利獲取硬盤的序列號,目前只能依靠非托管代碼了。 DiskId32 是一個源碼公開的C++程序,可以解決上述問題。由于代碼比較底層,我對VC和DDK不熟悉,沒有能力將其封裝為DLL,希望各位幫忙!
還有,就算封裝好了這個Native DLL并可以使用了,但還有問題沒有解決。如果封裝到了Native DLL,該DLL很容易被人替換成另外一個,畢竟在Managed Code里面可以看到調用Native DLL的函數聲明,別人只要模仿這些函數界面重新寫一個新的就很容易達到破解目的了。不過具體我沒有測試過,不知道行不行。
于是我又想到了另外一個方法,就是把獲取硬盤序列號的Native DLL作為資源文件封裝到Managed Code中,然后在每次要調要該DLL時,先把該DLL寫入磁盤,再動態綁定。由于Managed Code可以通過混淆器來保護,以致不能對其進行修改,這個我在《
如何保護我們的 .NET 程序集?
》中已經給出了答案。動態綁定Native DLL又是另外一個技術難題,我已經找到了一些資料,與大家分享。
Late binding on native DLLs with C#
Late-Binding DLLs in C#
Using legacy plug-ins with .NET - Part 1
Using legacy plug-ins with .NET - Part 2
C-Function pointer for .NET
Dynamic PInvoke method calls
不過最牛的就是下面這一招了!直接把Native Code用字節數組保存在Managed Code中,然后調用,真是牛B,不過我還沒有完全弄懂,希望大家來實踐實踐。
Execute Native Code From .NET
另外還有一篇文章是關于加密字符串的,值得研究!
Poly-Engine Crypt String
希望各位多多交流.NET程序的保護問題,找出最好的解決方案!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
