文章目錄
- 方法一 以Red Gate的SQL Toolbet為代表的 需要串連到伺服器端進行驗證
- 方法二 企業管理軟體類 ERP 許可授權檔案
- 方法三 序號註冊碼
- 方法四 license to license2 雙重許可驗證
- 方法五 微軟大量啟用工具
使用.NET開發程式,因為中繼資料存在於程式集中,可以輕易的被反編譯成原始碼。在分發給客戶之間,會應用加密軟體混淆程式集,這樣讓程式集被反編譯時間,
理解起來困難一些,增加一點破解難度。以下列舉我常見到的幾種保護方法,可應用於實際的產品保護。
方法一 以Red Gate的SQL Toolbet為代表的 需要串連到伺服器端進行驗證
Red Gate開發的SQL系列工具非常有名氣,比如著名的SQL Prompt,可以在SQL Server Management Studio實現智能提示功能。每當有新的可用的版本
出現(希望你可以理解我說的意思),它成為必收藏的工具之一。它的保護機制比較典型,客戶下載並安裝試用版軟體,超過試用期限後,需要串連到
伺服器進行啟用驗證,否則退出程式。
這種情況下網路連接必須可用。然而由於種種原因,有些機器是不能串連到互連網上的,或是因為程式開發伺服器,資料和資料比較寶貴,或是因為開發人員
不允許上網,沒有網路防問許可權。這種情況下,它也提供了一種驗證機制,可以將驗證資訊打包,通過郵件或是即時通訊軟體發送到官方,
擷取一個類似於註冊碼的字串,如所示
這兩種方式配合起來,這種類型的驗證保護機制就做的相對完善,也比較人性化。
方法二 企業管理軟體類 ERP 許可授權檔案
在企業管理軟體中,經常要涉及軟體許可(license)。無論是按網站收費(用友),還是按功能收費(金蝶),或是按使用者用量收費, 這種方法的靈活性高。
使用者從官方網站或是CD盤中得到的是正式的安裝程式檔案,需要一個license檔案才能啟用進入系統。根據使用者的實際購買情況,產生不同的license檔案,
在系統運行時,會檢測檔案是否有效,是否有授權,全部的秘密都在產生的這個license檔案,以下面的license檔案所示
<?xml version="1.0" encoding="utf-16"?><SolutionLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <RegistrationName>Enterprise Solution Limited</RegistrationName> <Version>2.2</Version> <MaxUser>100</MaxUser> <MaxViewer>100</MaxViewer> <MaxDatabase>4</MaxDatabase> <WithHaspKey>false</WithHaspKey> <AllowInstallOnVirtualMachine>true</AllowInstallOnVirtualMachine> <IssuedDate>2013-05-27T15:55:15.3440758+08:00</IssuedDate> <ExpiryDate>2013-06-26T23:59:59.997</ExpiryDate> <LicenseType>Internal</LicenseType> <HardwareFingerprint>+MV/ImkUxQV3RWDrD4rso4dplxmr5WHDDJ37WdwE09ogGhACKWjp+tWmDB5RVqfu/
tqx5i1p15g7t5ChynBwR0UKxNaSb1WyG4kdt5etndm7wg45DWzDpIryKLCYVQ4SuE3ykmXTR8NgTsYriI0CCP1DC5YrCiGfbAjNJ8zwC5A=wfUHYiIpI2DQ/kSXyM6TMx
0pCUWqa9V/UGukBPcAhafmeseTEBKeJ1Fdqwoie8QuV3Zy8GzGz9DX9d43QXYKMKpHzdLG6CL848a4MzRw1nmQ9s7i+kB/+AjPM+yaJGFp8EpxYROfjJoDgat+ES1KSimh
t5VNB5AL2FY1QLwqoiOjk6q/ClCzsEB6ieLMHsS0HLmc=GQQTPgTgRuI4NsVLZ803HhUP+Lf/cG9OqtOreEWdMSRbuYIJKCyp8SDBygH7B+Omt1k3nEvpt3FUyMR+yyDNRql
qhAH7/KtVcJwvrs9Ye7LywpwcGKSJcJot/jTKKagSFn20fYXjZROIpxfc8tsnxBXpkchYSrTMJb+93EnLOUg=ACvXKe/WfGEvjyrUIm+BVZty0NfxemFLeQDZtdQnsLnfjDcK
FP3fhLY3dcYvDMJJmJx4cnYtp+8kabxxPr1M5i6qosEUULyIGb6kjyWjGQJ7M1/JEO8J5oZv/3PRLs307FO69WpIZ36O4Y=</HardwareFingerprint> <AdditionalInformations /><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC
-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><T
ransform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms><DigestMethod Algorithm="http://ww
w.w3.org/2000/09/xmldsig#sha1" /><DigestValue>RUdHeihpzCcTda4kH9VPm/n7aBE=</DigestValue></Reference></SignedInfo><Sig
natureValue>OHBWoz1WjG2D2Pfno9mSOuHg9oFRaSTYjw7w9oJh0NTtBYbMhb5CLwZz5WXXpfYsghnax4RfqoUt3edvYU2b1vu3//0YaQHkY+qbczrBiX
3svfKB+DSSm+WZvyruucnTsTp39RKutcim+fhAt/wDA2Iarwdm1/ztPAhoOi+zzbA=</SignatureValue></Signature></SolutionLicense>
license檔案的格式是文字檔,以方便查看。上面的許可檔案中,我給了100個使用者,4 個帳套的許可權。再運用SignedXml對檔案內容進行簽名,
阻止篡改。此外,如果想限定使用者,還可以加上機器標識(hardware fingerprint),如果檢測到被收取的license檔案,不在被授權的機器上運行,
也會拋出異常,終止程式。
還有一個許可產生工具,它的原型看起來像這樣
再來說明一下,如何破解這種加密。首先,如果程式集有強簽名(strong name),需要找一個工具,把它的簽名去掉,其次,找到演算法驗證license.xml檔案的地方,把它的public key替換成自己產生的public key,再寫一個以private key產生的licnese產生工具,產生license檔案,同時替換自己修改過的驗證程式集檔案,即可讓程式驗證成功
上面所說的破解過程,是比較理想的情況。如果程式集有strong name,而且在程式集中有驗證strong name是否存在,strong name是否匹配作者產生的public token,這種情況下,要產生一個strong name,替換作者產生的和已經寫入到程式集中的public token。其次,要可以反編譯器集,著名的工具Red Gate Reflector, ILSpy,dotPeek,都可以做到反編譯器集。如果程式集有加殼,還應該去殼。
方法三 序號註冊碼
經典的原始碼編輯軟體UltraEdit至今還保持這種保護方法。在首次運行時,需要輸入註冊碼
一個使用者名稱和註冊碼,可以讓多台機器的試用版軟體變成正式版。這個問題,在我們國家是普遍存在的。許可一般是Single PC 許可,而我們常常是只要來自於官方下載,又有官方的許可檔案或是序號,即把它當成正版,其實這種情況下,也非正版。僅僅是輸入註冊碼,不需要串連到網路驗證伺服器,如果想進一步串連到伺服器做驗證,還需要網路連接。
關於網路連接的額外話。Windows 自Windows 7開始,為了啟用它,就必須要有網路連接可用。對於新買的機器,想裝舊的Windows Server 2003,死活都找不到網卡驅動,無法串連到網路上去,無法啟用,只好裝最新的系統。有個小小的建議,如果你的機器是Windows 7以下的,可以考慮備份一下你手頭的驅動程式,網卡,顯卡,主板晶片集。這些驅動以後會越來越難找,廠家也直接拒絕提供舊系統的驅動(Windows 2003,XP),讓你被迫無奈只能用Windows 7或是更新的系統。硬體製造裝置廠商也是有預謀的逼迫你對舊機器改朝換代啊。
方法四 license to license2 雙重許可驗證
以著名的.NET加密軟體.NET Reactor為代表,要通過它的許可驗證需要兩次許可檔案。
購買正版軟體後,軟體供應商會給出一個license.license 檔案。開啟dotNET_Reactor.exe,菜單->Help-》 Registeration ,線上擷取另外一個License檔案, 點擊超連結進入官方網站:查收郵件,下載真正的License
開啟dotNET_Reactor.exe,菜單->Help-Registeration ,註冊,軟體才成為正式使用者。
回想一下這個註冊過程,它會產生一個原生硬體標識,把這個複製到網頁中去才能啟用軟體,從而得知這個軟體需要配合硬體,即使有序號,許可檔案,但是硬體標識不相同,也是無效的license檔案。
硬體標識通常會寫到license許可檔案中,這是唯一可以動手腳,但又不會出問題的地方。硬體標識寫註冊表,可以被使用者匯出,再匯入到其它機器上,硬體表示可以寫到系統隱藏檔案中,使用者誤刪除會導致出錯。
方法五 微軟大量啟用工具
以Office 2010為代表,它的大量啟用工具主介面如下,控制台介面風格,小巧強悍
再比如殺毒軟體卡巴斯基,對企業大量授權。也是實現批量產生許可的方式。
這種授權方法的好處是,可以被命令列調用。在域管理的企業基礎架構中,只需要網域系統管理員修改一下域策略,在每台用戶端登入網域時,執行一個指令檔即刻啟用企業內所有的軟體許可。
我理解的這種加密方法,也是產生一個許可檔案。因為Office系列軟體太流行了,可以很輕鬆的找到可用的版本。很少會被他的許可難住,不過這種產生許可的方式,值得學習和研究。