陸 競
(黑河學(xué)院,黑龍江 黑河 164300)
基于Web的共享軟件加密方案和對策*
陸 競
(黑河學(xué)院,黑龍江 黑河 164300)
隨著互聯(lián)網(wǎng)的普及,共享軟件得到了快速的傳播,但盜版和解密技術(shù)也一直困擾著共享軟件的發(fā)展。本文對基于Web的共享軟件加密和解密技術(shù)進(jìn)行探討,并提出軟件加密方案和應(yīng)對破解的策略。
Web;共享軟件;注冊;加密;破解
互聯(lián)網(wǎng)的出現(xiàn)極大地促進(jìn)了共享軟件的快速傳播和迅猛發(fā)展。而開發(fā)一套好的共享軟件,軟件開發(fā)商要投入較大的資金,軟件作者往往要付出許多心血,如果軟件很容易被他人破解、盜用,不但軟件開發(fā)者應(yīng)有的權(quán)益得不到保障,而且還會極大地打擊軟件作者開發(fā)、維護(hù)、升級軟件的熱情和動(dòng)力。軟件加密是軟件開發(fā)者必須要面對的問題。軟件加密的目的就是為了防盜版、防解密,保護(hù)軟件的知識產(chǎn)權(quán),維護(hù)軟件開發(fā)者的利益;同時(shí),軟件保護(hù)也是在維護(hù)軟件使用者的權(quán)益。
目前,軟件加密的方式大致包括:磁盤保護(hù)、軟件加殼、設(shè)置軟件注冊、密碼保護(hù)、軟件狗、光盤加密(CD KEY)、邏輯炸彈、客戶端和服務(wù)器端加密、License保護(hù)、Keyfile加密方式等。
基于Web的共享軟件與大型商業(yè)軟件有較大的區(qū)別,大型商業(yè)軟件一般是面向特定的企業(yè)、行業(yè)或領(lǐng)域,商業(yè)軟件通常不能隨意下載,不能試用。而“先試用后付費(fèi)”的共享軟件是面向大眾的、開放的、可以通過網(wǎng)絡(luò)隨意下載和免費(fèi)試用的軟件。因此,共享軟件在加密方式上,通過軟件狗、磁盤、光盤等硬件加密不現(xiàn)實(shí),有礙于共享軟件的傳播、推廣和銷售。
基于Web的共享軟件,90%以上都是通過 “設(shè)置軟件注冊”這種方式來進(jìn)行保護(hù)的。因此,我們通常把共享軟件限制取消或合法化的過程,稱之為“軟件注冊”。共享軟件的注冊過程一般都是:用戶先行下載、安裝并試用軟件;試用滿意后與開發(fā)商聯(lián)系,并支付一定的注冊費(fèi),同時(shí)要將在用戶計(jì)算機(jī)上產(chǎn)生的軟件機(jī)器碼或用戶身份信息提供給軟件開發(fā)商;軟件開發(fā)商將根據(jù)用戶提供的機(jī)器碼或身份信息計(jì)算出一個(gè)(組)注冊碼,并將計(jì)算出的注冊碼告訴用戶;用戶得到這個(gè)注冊碼后,按照軟件要求在軟件中依次輸入注冊信息,其注冊信息的合法性由軟件驗(yàn)證;注冊成功后,軟件就會取消掉本身的各種限制,變成合法的正式軟件。共享軟件的這種加密方式實(shí)現(xiàn)起來比較簡單,軟件作者不需要增加其他成本,用戶下載、使用、購買也非常方便。因此,采用設(shè)置軟件注冊,是共享軟件的主要加密手段,這種方式對保障軟件開發(fā)者、使用者的合法權(quán)益,起到了一定的積極作用。
但是,眾多共享軟件的破解案例表明,軟件加密僅僅通過“設(shè)置軟件注冊”是遠(yuǎn)遠(yuǎn)不夠的。一款保護(hù)成功的共享軟件必須是設(shè)置軟件注冊、邏輯炸彈、軟件加殼、實(shí)時(shí)監(jiān)控等多種軟件加密技術(shù)的混合體。
實(shí)踐證明,研究軟件的解密過程有利于軟件的加密。軟件加密的過程,往往是針對軟件解密的方式、方法進(jìn)行的。通常是先有解密,然后才有加密。當(dāng)然,也有很多加密手段,并不是源于解密技術(shù),而是軟件作者奇思妙想的結(jié)果。
筆者研究、參考了眾多網(wǎng)絡(luò)高手撰寫的加解密經(jīng)驗(yàn)介紹,并結(jié)合自己開發(fā)的幾款軟件的加密、被解密、再加密的實(shí)踐過程,和大家談?wù)劵赪eb的共享軟件加密方案和對策。這些方案和對策可操作性和實(shí)用性較強(qiáng),不易被破解,非常適合廣大共享軟件的作者學(xué)習(xí)和掌握,也適用于商業(yè)軟件的加密處理。本文不談技術(shù),只談軟件的加密方案和應(yīng)對破解的對策。
在《VB下的共享軟件注冊技術(shù)》[1]一文中,筆者通過下面的語句,在程序中設(shè)置注冊碼,并由此完成注冊過程:
其中的“abc123”就是注冊碼。但這種“顯式”的“明碼”注冊碼,極容易被破解;而且無法做到一機(jī)一用,也就是說,即使不破解,只要有一個(gè)人注冊后將注冊碼公布到網(wǎng)上,其他人在網(wǎng)上一搜,找到這個(gè)注冊碼后,就可以成功地注冊自己下載的共享軟件。因此,這樣設(shè)置軟件注冊,軟件保護(hù)形同虛設(shè)。不過,目前網(wǎng)上仍有很多軟件,包括一些大型軟件都是這樣做的。
這里,我們要求設(shè)置軟件注冊:第一,編寫程序時(shí),不能采用“明碼”注冊碼,要將“明碼”注冊碼通過建立較復(fù)雜的函數(shù)或算法換算(推薦后者)變成“隱碼”,注冊校驗(yàn)中,再通過逆函數(shù)或逆算法進(jìn)行還原;第二,進(jìn)行硬件綁定,也就是將共享軟件與計(jì)算機(jī)綁定,增加“機(jī)器碼”。由于計(jì)算機(jī)網(wǎng)卡序列號或硬盤序列號①在Visual Basic中,對于網(wǎng)卡序列號可通過調(diào)用 Windows API的 EthernetAddress函數(shù)來獲取,硬盤序列號可通過調(diào)用WindowsAPI的 GetVolumeInformation函數(shù)來獲取。的唯一性,可以將“機(jī)器碼”與計(jì)算機(jī)的網(wǎng)卡序列號或硬盤序列號等硬件信息相結(jié)合、相關(guān)聯(lián),這也保證了不同計(jì)算機(jī)對應(yīng)的“機(jī)器碼”不相同。注意,這些硬件信息與注冊碼的關(guān)聯(lián),也不能是簡單的、原原本本的信息展示,還要通過一定程度的復(fù)雜運(yùn)算或數(shù)值轉(zhuǎn)換,甚至只是截取其中的一部分進(jìn)行轉(zhuǎn)換得出。于是,我們將注冊碼由固定不變的變成可變的,并與計(jì)算機(jī)綁定,不同的計(jì)算機(jī)注冊碼也是不相同的。
實(shí)踐中,采取“序列號”外加“注冊碼”再加“激活碼”三組數(shù)據(jù)來完成軟件注冊。用三組數(shù)據(jù),通過多個(gè)硬件綁定計(jì)算機(jī),注冊碼動(dòng)態(tài)生成,“隱碼”、“算法”加“變異”,達(dá)到軟件保護(hù)的目的。
還有一點(diǎn)應(yīng)該注意:為了防止軟件被跟蹤破解,編寫程序時(shí),在軟件注冊失敗后,不要讓軟件彈出“對不起,注冊失?。 敝惖膶υ捒?;同樣,在軟件注冊成功后,也不要彈出類似于“恭喜您注冊成功!”這樣的對話框。因?yàn)檫@樣做,很容易讓軟件破解者由此跟蹤這些對話框,找到加密點(diǎn)。作為應(yīng)對破解的對策,我們建議在編寫程序時(shí),要么不寫“注冊成功”之類的語句;要么多寫,在程序中多寫幾個(gè)沒有實(shí)際意義的條件語句,在其中寫上 “注冊成功”。這樣會增加解密難度。
應(yīng)當(dāng)看到,單獨(dú)使用“設(shè)置軟件注冊”來實(shí)現(xiàn)保護(hù)軟件的目的是遠(yuǎn)遠(yuǎn)不夠的。在很多時(shí)候,軟件破解者在無法獲得軟件注冊信息的情況下,利用跟蹤和反匯編技術(shù),分析軟件中與注冊相關(guān)的邏輯變量,通過添加或修改指令,強(qiáng)制改變相關(guān)變量的屬性;或增加跳轉(zhuǎn)指令內(nèi)容,從而繞過加密或判斷程序段,達(dá)到軟件“偽注冊”的目的。這就是所謂的暴力破解。因?yàn)檫@種破解方式,通常要對某些可執(zhí)行文件進(jìn)行編輯和修改,并重新生成一個(gè)可執(zhí)行文件。因此,我們可以針對這一特點(diǎn)采取相應(yīng)的應(yīng)對措施。即:將軟件中某個(gè)(些)可執(zhí)行文件最后編譯生成的創(chuàng)建日期和文件大小記錄下來,并寫入到程序中,然后經(jīng)常性地在程序中通過條件和比較語句進(jìn)行判斷,看看這個(gè)文件是否被重新創(chuàng)建,一旦文件的大小或創(chuàng)建日期發(fā)生改變,就可以判定軟件的完整性被破壞,軟件可能被破解或改寫,于是立刻啟動(dòng)邏輯炸彈或自毀程序,把程序引入無限循環(huán)或跳轉(zhuǎn)到錯(cuò)誤的程序段運(yùn)行,由此得到錯(cuò)誤的數(shù)據(jù)或錯(cuò)誤的運(yùn)行結(jié)果。
除了通過文件的創(chuàng)建日期和大小判斷文件是否被修改外,我們還可以采用逐字逐句的方式,對兩個(gè)文件進(jìn)行精確比較,檢查文件是否被修改。采用這種方法,首先要預(yù)埋用于對比的某個(gè)(些)核心文件,為了安全起見,我們通常要把這個(gè)核心文件預(yù)先“切割”成幾個(gè)小文件,保存在軟件系統(tǒng)中;當(dāng)軟件運(yùn)行需要比較時(shí),再把這幾個(gè)小文件,按順序臨時(shí)組合“連接起來”,變成一個(gè)大文件,再與某個(gè)“暴露在外”的核心文件進(jìn)行比較,由此確認(rèn)核心文件是否被改寫,將更加準(zhǔn)確可靠。
針對軟件去殼的破解方式,我們也可以采用這種方式保護(hù)軟件,限于篇幅,不贅述之。
基于Web的共享軟件保護(hù)方法,還包括客戶端和服務(wù)器端(C/S)的注冊信息驗(yàn)證保護(hù)方式。這種軟件保護(hù)方式是在用戶下載、試用、付費(fèi)以及向軟件開發(fā)商提供機(jī)器碼等信息后,軟件開發(fā)商要先計(jì)算出對應(yīng)的注冊碼,然后將用戶的注冊信息添加到服務(wù)器端的合法軟件用戶的信息數(shù)據(jù)庫中,之后將注冊碼告訴用戶。用戶通過客戶端軟件登錄軟件主機(jī)服務(wù)器進(jìn)行注冊,注冊時(shí)軟件將用戶輸入的注冊信息與服務(wù)器中的注冊信息進(jìn)行核對,信息核對一致后,提示軟件注冊成功。這里,軟件的注冊信息應(yīng)包括:序列號、用戶名、注冊碼等。為了有效保護(hù)軟件開發(fā)商的權(quán)益,當(dāng)用戶注冊時(shí),我們還要通過客戶端程序獲取注冊時(shí)間(針對有使用期限的軟件)、機(jī)器碼(確保一機(jī)一用)、IP地址、注冊成功與否的標(biāo)示符(客戶端軟件運(yùn)行時(shí)首先判斷的變量)等信息,從而達(dá)到軟件保護(hù)的目的。當(dāng)然,客戶端/服務(wù)器端的加密方式,對客戶端程序和服務(wù)器端程序也需要采取必要的加密手段和措施。其中:客戶端程序的加密和《VB下的共享軟件注冊技術(shù)》[1]類似,同時(shí)考慮遠(yuǎn)程訪問與遠(yuǎn)端交換數(shù)據(jù)判斷;服務(wù)器端的加密,重點(diǎn)應(yīng)放在對合法用戶信息數(shù)據(jù)庫的加密和保護(hù)上,所有的客戶信息都要加密后再保存到數(shù)據(jù)庫中,以防被盜用或篡改。
還有一類基于Web的共享軟件,軟件開發(fā)商在網(wǎng)上發(fā)布的軟件版本,其軟件本身功能就是不完整的。和其他共享軟件一樣,這些軟件可以下載和試用,試用滿意后,要向軟件作者(或開發(fā)商)支付一定的費(fèi)用,獲得軟件的注冊碼,并進(jìn)行軟件注冊。但這些軟件注冊成功后,會彈出一個(gè)“確定”按鈕的對話框,要求用戶立即升級,用戶點(diǎn)擊“確定”按鈕后,軟件就自動(dòng)從軟件服務(wù)器上下載功能完整的最新版本軟件,也可能是與本地“拼接”,完成軟件升級;有些軟件在注冊成功后,會提供給用戶一個(gè)新的軟件下載網(wǎng)址(最好不要把地址寫到程序中),要求用戶下載,并重新安裝升級;當(dāng)然,也有的軟件不提示或提示“請稍候”,然后悄悄地完成新版軟件下載或軟件“拼接”等工作,完成軟件版本替換和升級。應(yīng)當(dāng)說,共享軟件的這種加密方式,可以較有效地防止軟件被破解。試想,破解者拿著一款需要注冊且本身功能就不完整的軟件,無論他使用任何手段和技術(shù)破解,都是徒勞的,因?yàn)檫@樣一款軟件,無論注冊成功與否,它的功能永遠(yuǎn)都是受限制的、不完整的。
更進(jìn)一步,我們必須把關(guān)注、搜集、研究互聯(lián)網(wǎng)上自己開發(fā)的軟件被破解的情況,作為平時(shí)軟件開發(fā)、升級工作的一部分。在對已經(jīng)注冊成功的軟件進(jìn)行升級時(shí),要在軟件的升級版本中,針對新的破解手段,增加驗(yàn)證內(nèi)容,同時(shí)通過軟件升級,剔除掉部分非法用戶,從而達(dá)到軟件保護(hù)的目的。
所謂注冊機(jī),簡單地說就是能夠計(jì)算出這款軟件注冊碼的小程序,它通常是軟件破解者通過反編譯、反匯編等技術(shù)手段,破解了軟件注冊認(rèn)證算法或注冊碼生成算法后編寫的注冊工具?;ヂ?lián)網(wǎng)上經(jīng)常會出現(xiàn)某款共享軟件的注冊機(jī),要保護(hù)自己的軟件,就要防止軟件被開發(fā)出注冊機(jī)。我們應(yīng)對的方法是:保護(hù)你的認(rèn)證、校驗(yàn)、生成和還原算法,最簡單的做法就是不使用獨(dú)立的函數(shù)來認(rèn)證、校驗(yàn)、生成和還原,而是分別把認(rèn)證、校驗(yàn)、生成和還原算法直接寫到程序代碼中,各種算法要盡可能分開寫,還可以在程序中增加一些多余的函數(shù)、過程,增加前面提到的帶有“注冊成功”之類文字的不被調(diào)用的“廢碼”,迷惑破解者,增加分析、研究軟件的難度。
把共享軟件冠名成破解版,然后盡可能多地到各大軟件下載網(wǎng)站發(fā)布,這樣,可以讓你的假破解版軟件更多地出現(xiàn)在搜索引擎的結(jié)果中。當(dāng)用戶下載了多個(gè)所謂的破解版軟件而不能正常使用后,就會將目光投向購買正版軟件。
[1]陸競.VB下的共享軟件注冊技術(shù)[J].科技資訊,2010(8).
(編輯:金冉)
TP309
B
1673-8454(2011)15-0064-03
*本文系黑龍江省教育廳科學(xué)技術(shù)研究項(xiàng)目,項(xiàng)目編號:11551306。