基于SSL的軟件序列號網(wǎng)上驗證分析與實現(xiàn)
第27卷第1期 2010年1月 計算機應(yīng)用與軟件Computer App licati ons and Soft w are Vol 127No . 1Jan . 2010基于SS L 的軟件序

第27卷第1期 2010年1月 計算機應(yīng)用與軟件
Computer App licati ons and Soft w are Vol 127No . 1
Jan . 2010
基于SS L 的軟件序列號網(wǎng)上驗證分析與實現(xiàn)
劉國良 張智斌 徐迪新 孔 娟
(昆明理工大學(xué)信息工程與自動化學(xué)院 云南昆明650051)
摘 要 在軟件序列號網(wǎng)上驗證過程中, 若數(shù)據(jù)為明文傳輸?shù)脑? 則容易被捕獲及分析, 從而令驗證失效。為降低軟件盜版比例,
介紹序列號驗證技術(shù)的基本原理, 通過實例詳細說明利用SS L 加密驗證過程的必要性, 給出獲取SS , 利用W indows HTTP 服務(wù)(W inHTTP ) 為軟件開發(fā)人員提供解決方案。、關(guān)鍵詞 軟件保護 序列號 安全套接字層(SS L ) 數(shù)字證書 W ANALY S N F SO FT W ARE SER I AL NU M BER
I VAL I DAT IO N BASED O N SSL
L iu Guoliang Zhang Zhibin Xu D ixin Kong Juan
(Faculty of Infor m ation Engineering and Auto m ation, Kunm ing U niversity of Science and Technology, Kunm ing 650051, Yunnan, China )
Abstract During the s oft w are serial nu mber online validati on p r ocess, data can be cap tured and analysed when they are trans m itted in p lain text, thereby leading t o validati on failure . I n order t o reduce s oft w are p iracy rati o, this article intr oduces the basic p rinci p le of serial nu m 2ber validati on techniques, illustrates the necessity of using SS L encryp ti on validati on p r ocess with a p ractical exa mp le in detail, p r ovides differ 2
ent ways of obtaining SS L server certificates, and offers a s oluti on for s oft w are devel opers by usingW indows HTTP Services (W inHTTP ) . The method p r oposed is effective, p ractical and easy t o be i m p lemented .
Keywords Soft w are p r otecti on Serial nu mber Secure s ockets layer (SS L ) D igital certificate W inHTTP
0 引 言
軟件保護是維護軟件開發(fā)人員利益的主要手段, 是軟件開發(fā)過程中的重要環(huán)節(jié), 以往大多數(shù)軟件采用序列號(又稱注冊碼) 的驗證方式且驗證過程在本地進行[1]。隨著互聯(lián)網(wǎng)的應(yīng)用日漸普及, 已具備聯(lián)網(wǎng)注冊認(rèn)證的可操作性。目前國內(nèi)有很多銷量大的軟件采用了聯(lián)網(wǎng)注冊正版認(rèn)證的方法以減少盜版。不過, 在聯(lián)網(wǎng)注冊認(rèn)證過程中, 若信息是明文傳輸?shù)脑? 則容易被軟件破解者捕獲本地與遠程服務(wù)器之間通信的內(nèi)容, 從而分析其認(rèn)證過程, 找出破解辦法, 令聯(lián)網(wǎng)注冊無效。所以, 需要采用有效的辦法令破解難度大幅增加, 以達到降低軟件盜版的比例的目的。
責(zé)驗證序列號合法性的代碼是在用戶機器上運行的, 因此只要有人把用戶名和序列號在網(wǎng)上公布, 不管在哪臺電腦上, 都可用同一用戶名和序列號進行注冊。
1. 2 基于硬盤序列號的驗證
為了保證每臺電腦上的序列號唯一, 軟件開發(fā)人員后來利用了硬盤序列號。猶如每張網(wǎng)卡MAC 地址各不相同一樣, 每個硬盤序列號亦具有唯一性。網(wǎng)卡地址可以很容易地通過操作系統(tǒng)進行邏輯上的修改, 但硬盤序列號卻無法修改, 于是軟件開發(fā)人員把軟件序列號計算公式變?yōu)?
序列號=F (硬盤序列號) 這樣一來, 軟件保護的效果就大大提高了。不過, 此種保護方式亦有其不利之處, 就是如果用戶更換硬盤的話, 原有的序列號就無法再用, 必須重新向軟件作者索取序列號。
1 序列號驗證的基本原理
1. 1 基于用戶名的驗證
基于序列號保護方式的軟件隨著破解技術(shù)的不斷提高, 采用的保護措施亦越來越強大。
最初, 此類軟件一般以用戶名等信息作為自變量, 通過函數(shù)F 變換之后得到序列號, 然后將此序列號與用戶輸入的序列號進行字符串比較或數(shù)值比較, 以確定用戶是否為合法用戶[1]。其公式可簡單表示如下:
序列號=F (用戶名)
此種保護方式最大的問題是不能防止序列號擴散。由于負(fù)
1. 3 本地驗證方式的不足
對采用本地驗證方式的軟件, 用戶需用電子郵件等方式向軟件作者聯(lián)系以獲取序列號, 故只適用于用戶數(shù)目較少的場合; 而對于用戶數(shù)目龐大的軟件, 往往是直接把序列號貼在軟件包裝盒內(nèi)且序列號不重復(fù)。
1. 4 基于互聯(lián)網(wǎng)的聯(lián)網(wǎng)驗證
隨著互聯(lián)網(wǎng)應(yīng)用逐步成熟, 不少軟件開始把本地驗證和網(wǎng)上驗證結(jié)合起來———即通過本地驗證后, 再把序列號發(fā)到軟件指定的網(wǎng)站的服務(wù)器進行分析。如果該序列號已被廣泛使用,
收稿日期:2008-07-18。劉國良, 碩士生, 主研領(lǐng)域:網(wǎng)絡(luò)管理。
? 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
,
第1期
劉國良等:基于SS L 的軟件序列號網(wǎng)上驗證分析與實現(xiàn) 281
則可斷定用戶使用網(wǎng)上得來的序列號進行注冊, 從而服務(wù)器可
返回驗證失敗的信息。不過, 現(xiàn)在很多利用網(wǎng)上注冊的軟件的驗證過程都是以明文的形式傳送數(shù)據(jù), 從而大大降低了軟件保護的效果。
們可以考慮較便宜的解決方案, 如WoSign (www . wosign . com ) , 其SS L 服務(wù)器證書價格不足千元。頒發(fā)WoSign 代碼簽名證書的根證書已經(jīng)預(yù)置在所有瀏覽器的受信任根證書中, 支持所有瀏覽器和服務(wù)器, 用戶無需安裝任何根證書或升級根證書。
WoSign 目前亦提供一個月免費SS L 服務(wù)器證書。作為加密網(wǎng)
2 簡單網(wǎng)上驗證的漏洞分析及對策
2. 1 實例分析
本文以一個背英語單詞的軟件為例(為尊重版權(quán), 軟件名稱不標(biāo)出) , 解析一下序列號以明文形式向服務(wù)器發(fā)送的安全漏洞。該軟件是一個成熟的產(chǎn)品, 經(jīng)過10年八個版本的發(fā)展, 已擁有用戶500多萬。軟件有多個地方都要驗證序列號, 并且在啟動時對軟件里面的一些重要文件進行校驗, 改??梢哉f作者為了防止軟件被破解, , 軟有加密, , 如W indows 內(nèi)置的網(wǎng)絡(luò)監(jiān)視器, 可以得知該軟件是直接把序列號以明文方式通過類似以下的URL 格式發(fā)送出去:htt p://www. exa mp le . com /cgi2bin /check. p l? 1234567890, 其中www . examp le . com 是軟件的官方網(wǎng)站(真實網(wǎng)址不標(biāo)出, 以www . exa mp le . com 代替) , “1234567890”是用戶輸入的序列號。網(wǎng)站服務(wù)器返回的信息有“NoPr oble m ”, “Hei3”和“Hei4”。經(jīng)分析, “NoPr oble m ”說明序列號沒問題; “Hei3”是指序列號正確, 但已在網(wǎng)上公開, 多人使用后進入了黑名單; 而“Hei4”說明輸入的序列號不正確。軟件里面的驗證程序根據(jù)網(wǎng)站返回的信息決定是否注冊成功。這種簡單的網(wǎng)上驗證很不安全, 破解者只要分析驗證過程, 然后在本機安裝一個W eb 服務(wù)器, 并把域名設(shè)置為www . exa mp le . com, 不管軟件認(rèn)證程序發(fā)送過來的內(nèi)容是什么, 服務(wù)器都返回“No 2Pr oble m ”, 這樣就通過了驗證, 達到了破解的目的。
上驗證過程的目的, 免費SS L 服務(wù)器證書已足夠, 因為即使證書過期, 亦不影響驗證過程的有效性。
(2) 軟件需要增加或修改網(wǎng)上驗證模塊以支持SS L 連接。最簡單、有效的辦法是利用M icr os oft 的平臺S DK (Platf or m Soft 2
ware Devel opment Kit ) AP I (App licati on Pr o 2gra mm ing ) [3]
(DLL ) 文件供
, C#、Del phi 、V isual Basic , 降低編程難度。
3 網(wǎng)上驗證模塊的程序?qū)崿F(xiàn)
3. 1 程序流程
在本地程序發(fā)送序列號去服務(wù)器前, 先利用W inHTTP 建立起SS L 連接, 考慮到整個驗證過程是在后臺進行, 且對本文討論的實現(xiàn)方法而言, 安全證書的關(guān)鍵內(nèi)容是“使用者(Subject ) ”字段里面的“公用名稱CN (Common Na me ) ”, 即網(wǎng)站的名稱(如www . google . com ) 。網(wǎng)站的名稱必須與安全證書上的站點名稱匹配, 而證書的日期是否有效并不影響驗證過程的準(zhǔn)確性, 所以我們可以在連接時加入忽略證書的有效時間的選項。
要利用W indows HTTP 服務(wù), 除了安裝V isual C 6. 0或以上版本外, 還要到M icr os oft 的官方網(wǎng)站下載M icr os oft Platf or m
S DK 。程序必須包含的頭文件是W inhtt p. h 。W inhtt p. h 提供了W inHTTP 實現(xiàn)有關(guān)的結(jié)構(gòu)體、常量及各函數(shù)的定義。為節(jié)省篇
幅, 這里所用的函數(shù)的具體參數(shù)及相關(guān)代碼不予列出, 請讀者參考平臺S DK 文檔或M S DN 文檔。程序流程如下:
(1) W inH tt pOpen () , 為應(yīng)用程序使用W inHTTP 函數(shù)進行初始化并返回一個會話句柄;
(2) W inH tt pConnect () , 指定HTTP 請求的目標(biāo)服務(wù)器的地址及端口(默認(rèn)SS L 端口為443) 并返回一個連接句柄;
(3) W inH tt pOpenRequest () , 創(chuàng)建一個HTTP 請求句柄。最后一個參數(shù)必須指定為W I N HTTP_FLAG_SECURE;
(4) W inH tt pSet O p ti on () , 設(shè)定選項??晒┻x項有40多個, 不過對本程序而言只需加入忽略證書有效日期的選項, 即SE 2C UR I TY_FLAG_I G NORE_CERT_DATE_I N VAL I D ;
(5) W inH tt pSendRequest () , 發(fā)送請求。如果成功, 函數(shù)返回TRUE, 否則返回F ALSE;
(6) 如果(5) 成功, 說明遠程服務(wù)器身份已經(jīng)確認(rèn), 程序可以進行正式的序列號驗證過程, 即直接把主程序發(fā)過來的注冊信息發(fā)送到服務(wù)器, 然后等待服務(wù)器的返回信息以判斷網(wǎng)上驗證成功與否。如成功, 可向主程序返回0。
2. 2 引入SS L 機制增強安全性
為了加強網(wǎng)上驗證的可靠性, 本文引入安全套接字層/傳輸層安全性(SS L /TLS ) 機制。SS L 是一個確保安全HTTP 交易的已確立的標(biāo)準(zhǔn), SS L 提供一個可支持客戶和服務(wù)器之間所有交易高達128位加密的機制, 可防止攔截關(guān)鍵信息(如信用卡卡號) [2]。T LS 是最新的也是更為安全的SS L 協(xié)議版本。SS L 可以讓客戶透過使用服務(wù)器證書證實服務(wù)器屬于可信任的實體, 而服務(wù)器亦可用客戶證書證實客戶身份[2]。SS L 同時利用了公鑰加密和對稱密鑰加密技術(shù)的長處, 公鑰加密用于驗證客戶和服務(wù)器的身份, 而對稱密鑰加密速度遠快于公鑰加密, 故用來加密應(yīng)用程序數(shù)據(jù)[4]。公鑰加密使用了兩個數(shù)學(xué)相關(guān)的密鑰的加密方法, 一個密鑰稱為“私鑰”, 并一直保持機密; 另一個密鑰
[2]
稱為“公鑰”, 可隨意交給所有潛在的通信者。通常, 發(fā)送方使用接收方的公鑰來加密消息, 只有收件人才有能對消息進行解密的相關(guān)私鑰。
2. 3 實現(xiàn)網(wǎng)上加密驗證方法
為使軟件實現(xiàn)加密的序列號網(wǎng)上驗證, 軟件作者須在網(wǎng)上服務(wù)器進行配置并對軟件本身作出改動。方法如下:
(1) 向證書頒發(fā)機構(gòu)C A (Certificati on Authority ) 購買一個W eb 服務(wù)器的SS L 證書, 證書的作用是確保遠程服務(wù)器的身份并對客戶端和服務(wù)器端的通信加密。目前最有名的CA 是Veri 2Sign (www . verisign . com ) , 但VeriSign 提供的證書價格較貴, 我
3. 2 應(yīng)用示例
為驗證本文描述的方法的有效性, 現(xiàn)根據(jù)上述流程簡述編程實現(xiàn)過程。
(1) 運行V isual C 6. 0, 創(chuàng)建一個MFC App W izard (dll ) 工程, 命名為Verify (可自定義名稱) 。
(2) 在Verify . h 頭文件的類CVerify App 外部添加代碼行
? 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
,
282
計算機應(yīng)用與軟件2010年
extern " C" int P ASC AL EXP ORT CheckS N (char 3p szSn ) , 其中CheckS N () 為自定義的導(dǎo)出函數(shù), 供主程序調(diào)用; 而“char 3szSn ”是入口參數(shù), 用來接收主程序發(fā)過來的序列號, 是char 3
類型; int 代表導(dǎo)出函數(shù)的返回值是整型, 例如可定義返回0代表服務(wù)器證書正常且序列號亦合法, 返回非0則代表出錯。
(3) 在Verify . cpp 源文件定義extern " C" int P AS CAL EX 2P ORT CheckS N (char 3p szSn ) 函數(shù), 并在CheckS N () 函數(shù)內(nèi)首行加入AFX_MANAGE_STATE (AfxGetStatic ModuleState () ) 語句后即可按3. 1節(jié)所述流程添加代碼。
(4) 在Verify . def 文件內(nèi)的EXP ORTS 段加入CheckS N 標(biāo)記, 以表明CheckS N 函數(shù)是動態(tài)鏈接庫的導(dǎo)出函數(shù)。
(5) 為使程序可正常編譯和鏈接, 程序需包含平臺S DK 提供的W inhtt p. h 頭文件以及W inhtt p. lib 庫文件。
當(dāng)動態(tài)鏈接庫做好后即可供主程序調(diào)用, 鏈接庫的代碼很簡單, 在此不一一贅述, 于20m 后明顯優(yōu)于未改進的質(zhì)心算法, 且誤差是處于不斷下降趨勢。
表1是仿真數(shù)據(jù)和CS A 質(zhì)心算法誤差下降比例。由表1可以看到誤差下降最高達40以上, 除個別點外, 平均降低:14. 5當(dāng)R 大于16時, 誤差降低都在10以上且R 越大誤差改善越大。而經(jīng)典質(zhì)心算法在R 大于25后誤差不降反升且增加R 不再能改進誤差。
表1 誤差統(tǒng)計表
算法
R (m )
610121416182022232425262728
質(zhì)心(誤差)
0. 61570. 53130. 48700. 49400. 44310. 40490. 42090. 39340. 39890. 38980. 43300. 43310. 3179
A (誤差) 0. 65190. 58060. 50210. 45290. 44550. 39600. 32620. 34190. 31110. 29980. 28340. 29470. 28310. 2487
誤差下降比例
12. 20. 35. 75. 57. 09. 8. 6. 4. 8 . 9$. 8'. 31. 94. 6A. 0
3. 3 結(jié)果分析
通過自建網(wǎng)站以模擬遠程W eb 服務(wù)器的方法對3. 2節(jié)所
寫的程序進行測試, 運行結(jié)果表明實現(xiàn)方法有效, 達到了預(yù)期目標(biāo):如果遠程服務(wù)器身份驗證不成功(如遠程服務(wù)器無響應(yīng)或服務(wù)器返回的證書的公用名稱無效等各種錯誤) , 則驗證模塊返回非零值, 驗證失敗; 當(dāng)遠程服務(wù)器身份被確認(rèn)且序列號亦為合法的話, 返回0, 驗證通過。
如果主程序需要獲取特定的出錯信息, 如無效公用名稱、未知證書頒發(fā)機構(gòu)等, 可以在動態(tài)鏈接庫里面加入W inH tt pSetSta 2tus Callback () 函數(shù)并指定一個用戶自定義的回調(diào)函數(shù)。當(dāng)服務(wù)器證書出錯時, 回調(diào)函數(shù)會自動被操作系統(tǒng)調(diào)用, 并取得出錯的代號。不過, 此功能并非必須, 且增加編程的復(fù)雜性, 可不增加。
為進一步提高網(wǎng)上驗證的有效性, 驗證程序可在每次程序啟動時進行網(wǎng)上驗證, 甚至可以把軟件里面的重要文件的哈希值(Hash ) 發(fā)往遠程服務(wù)器, 讓服務(wù)器判斷文件是否與原始文件不同。如有不同, 則可認(rèn)為文件被破壞, 如程序被破解或感染病毒等。
3 結(jié)論語
仿真結(jié)果證明CS A 算法能夠?qū)?jīng)典質(zhì)心算法的誤差進行有效的改進。但算法的計算量較之經(jīng)典質(zhì)心算法有較大增加, 這是此算法的缺點。如何更有效地找到位于未知節(jié)點周圍均勻的有效分布的少數(shù)錨節(jié)點來實施質(zhì)心算法, 從而在利用質(zhì)心定位算法簡單、通信量少的特點的同時, 進一步降低定位誤差仍需進一步研究。
4 結(jié) 論
本文首先介紹基于序列號保護方式的軟件的序列號計算的基本原理及發(fā)展過程; 隨后舉例分析采用聯(lián)網(wǎng)驗證軟件序列號的軟件若驗證過程為明文傳輸?shù)脑? 則容易被破解的原因; 接著說明采用SS L 服務(wù)器證書增強驗證過程安全性的辦法, 最后提供編程實現(xiàn)的過程。本文提出的實現(xiàn)方法有效且易于實現(xiàn), 對打算采用網(wǎng)上驗證軟件合法性的軟件開發(fā)者有很大的實用價值。
參考文獻
[1]孫利民. 無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社, 2005:
1482155.
[2]Bulusu B, Heidemann J, Estrin D. Density adap tive algorithm s f or bea 2
con p lace ment in wireless sens or net w orks [C ]//I EEE I CDCS ’01, Phoenix, AZ, Ap ril 2001.
[3]安恂. 一種用于無線傳感器網(wǎng)絡(luò)的質(zhì)心定位算法[J ].計算機工程
參考文獻
[1]段鋼. 加密與解密[M].2版. 北京:電子工業(yè)出版社, 2003. [2]M icr os oft TechNet . htt p://technet . m icr os oft . com /.[3]M icr os oft Platf or m S DK 文檔. htt p://msdn . m icr os oft . com /.[4]Allen Jones . SS L De mystified . W indo wsWeb S oluti ons,Dece mber 2000.
與應(yīng)用, 2007, 43(20) :1362138.
[4]陳維克. 基于RSSI 的無線傳感器網(wǎng)絡(luò)加權(quán)質(zhì)心定位算法[J ].武漢
(上接第214頁)
理工大學(xué)學(xué)報:交通科學(xué)與工程版, 2006, 30(2) :2652267.
[5]N iculescu D, Nath B. DV based Positi oning in ad hoc net w orks [J ].
Journal of Telecommunicati on Syste m s, 2003, 22(1/4) :2672280.
改進的質(zhì)心算法CS A 與多跳質(zhì)心算法坐標(biāo)估計比較如圖2
所示。在整個R 變化過程中都優(yōu)于未改進的質(zhì)心算法, 在R 大
? 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net