溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談共享軟件如何不被暴力蹂躪

發(fā)布時間:2020-07-12 17:18:31 來源:網(wǎng)絡 閱讀:506 作者:liquan165 欄目:安全技術

本文來自泉貿(mào)軟件工作室 轉(zhuǎn)載請注明 http://www.qmboy.com

共享軟件是目前世界上軟件業(yè)比較熱門的話題,國內(nèi)更是如此。成千上萬的程序員以極大的熱情投入到這個領域來,都憧憬著用辛勤的勞動獲得豐厚的回報;但,實際并非如此,絕大多數(shù)的人都鎩羽而歸。值得注意的是:除了軟件設計和技術上的原因外,最大的原因就是共享件被破解(Crack)了……

  面對破解

一個做共享件的作者,面對的是已經(jīng)形成團伙的眾多破解高手,國內(nèi)的什么CCG、BCG,國外的eGis、King、Core、TNT、DAMN和TMG,皆為水平一流的破解組織。全球盜版軟件不少于80%都是由他們的破解的,技術實力連大軟件公司都不可小視。

看到這里,你是否已經(jīng)灰心了?別怕,雖然目前我們理論上無法完全避免被破解,但如果能夠有效地拖延被破解的時間,并充分打擊破解者的自信心,是可以讓破解者無法忍受這種折磨從而最終放棄的。

破解,通常的做法有兩種——暴力破解(爆破)和寫注冊機。筆者就自己積累的經(jīng)驗來依次講解每種破解方法的原理和應對方法,某些關鍵的例程講解(Delphi代碼),使用C++和VB的朋友可以自己稍微修改一下。希望這能對一些新手有些幫助,能夠更有效地保護自己的勞動成果。

  認識暴力破解

暴力破解簡稱「爆破」,這是破解手段中最常見的,也是最簡單的破解方法。該法最適合于對付沒有CRC校驗的軟件,破解新手樂于采用。

大凡共享件,驗證是否注冊大多采用if條件語句來進行判斷,即使你采用了什么RSA或ECC等強力加密算法,也免不了使用if條件語句。這里就是共享件最為危險的地方,也是爆破新手孜孜不倦所尋求的目標。
例如,你的注冊函數(shù)類似如下:

利用RSA進行注冊碼的數(shù)字簽名驗證

if RSAVerify MD5 Key  MD5 Code e n  then
ShowMessage '注冊成功!' 
else
ShowMessage '注冊失敗!' 

這里Key是用戶輸入的注冊碼,是由你發(fā)送給注冊使用者的,Code是根據(jù)用戶輸入的用戶名自動計算出來的注冊碼,e是RSA算法的公匙,而n是RSA算法的模數(shù)。

第一次過招

上例注冊函數(shù)即使使用了強勁的RSA算法進行注冊碼驗證,但依然很容易被破解,我們只要把這里修改為:

將邏輯判斷改為否

if not RSAVerify MD5 Key  MD5 Code  e n  then
ShowMessage '注冊成功!' 
else
ShowMessage '注冊失敗!' 

這時戲劇性的結(jié)果會產(chǎn)生:隨便輸入任何注冊碼都可以注冊通過,相反輸入正確的注冊碼卻無法通過注冊。

要破解這樣的軟件就必須先反匯編或者跟蹤你的程序,找到判斷注冊碼的cmp、test等匯編指令后的關鍵跳轉(zhuǎn)指令處,通常是je、jz之類的匯編指令,把它們修改為jne或jnz即可,這樣常常只需要修改一個字節(jié)就可以完美破解了。

目前大部分共享件都是用以上方法進行判斷,這也是為什么網(wǎng)上被破解的軟件鋪天蓋地的主要原因。因為這樣破解實在是太簡單了……

第二次過招

其實只要把軟件的關鍵代碼嵌入到注冊碼或者注冊檔中就可以充分防止破解。

最簡單的方法就是把關鍵代碼(你的軟件功能限制部分最關鍵而且最簡單的一個函數(shù))做成一個小DLL(動態(tài)鏈接庫),用強力對稱算法加密(密匙可以是主程序某一固定不變的部分或殼的特征Hash值)后生成一個注冊檔(License檔,這格式只有你知道),或者Base64編碼后生成一個注冊表文件,用戶可以雙擊導入注冊表內(nèi)。

校驗流程如下:已注冊用戶驗證注冊碼時,先驗證有沒有檔,沒有檔則自然受限制的功能無法使用。如果有注冊檔,解密后即生成一個小臨時檔。如果主程序被脫殼或者被修改(爆破),自然Hash值密碼不符,解密出來的肯定都是垃圾碼,沒有一點用處。只有沒有被修改的主程序才能正確地譯碼,而且當然
只有解密正確的檔才是一個真正的DLL文件,才能被GetProcAddress函數(shù)找到欲調(diào)用的關鍵函數(shù)地址。這樣只有已注冊用戶才可以享受到你的軟件的全部功能了。如此一來,Cracker破解你的軟件就變得很困難了。

首先,他如果沒有注冊檔,即使他把主程序脫殼了,由于受限制的部分和注冊檔是關聯(lián)的,他也根本無法修補完整。

第二,即使他得到了你的注冊檔,由于是加密檔,他也無法直接利用,這樣就逼迫他去拆解你的算法,這可是他們最不愿意碰到的事情啊!如果到了這一步,只有真正對加密算法有研究的Cracker高手才會繼續(xù)破解下去。

第三,你是可以用些小技巧來使他的破解工作更加繁鎖。這里我推薦大家使用DSA公開密匙加密算法,它和RSA一樣,可以進行數(shù)字簽名(RSA還可以加密,DSA則只能進行數(shù)字簽名)。這里選用它的原因就是它有一項非常實用的特性:隨機數(shù)填充機制。即DSA每次簽名都要使用一個隨機數(shù)K,正因為有這個K的存在,即使是相同的用戶名和機器標識符,由DSA加密過的每份注冊檔都不會相同。這對Cracker拆解你的注冊檔來說是一個極大的障礙。

第四,即使他得到了解密后的DLL檔,他也需要大幅度地修改主程序或者把你的DLL部分的關鍵代碼拆出來添到主可執(zhí)行文件中。這就看他對PE文件格式理解得如何了。即使這樣,如果你的程序中有大量的Hash校驗和死機代碼,你就耐心等著我們可愛的Cracker同志吐血吧……:)

最后還要記?。河猛赀@個DLL臨時文件后立即從內(nèi)存中卸除此DLL并刪掉,而且注意在解密之前探測一下,系統(tǒng)中有沒有FileMon這個威脅極大的探測器:

 泉貿(mào)|軟件定制|破解|營銷軟件|網(wǎng)站設計|軟件服務|數(shù)據(jù)采集|軟件設計|研發(fā)|軟件工作室|移動開發(fā)|協(xié)議分析|安卓IOS


探測FileMon

function DetectFileMon Boolean
begin
if CreateFile PChar '\\.\FILEVXD' 
GENERIC_READ or GENERIC_WRI
TE
FILE_SHARE_READ or FILE_SHAR
E_WRITE
nil
OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL
0 <> INVALID_HANDLE_VALUE then
Result = True //如果有,就關機!
else
Result = False
end

當然,你可以保護得更好一些:可以不采用臨時DLL,而把解密后的關鍵代碼用WriteProcessMemory這個API函數(shù)寫入到主可執(zhí)行文件自己進程被提交(Committed)的內(nèi)存頁面的指定位置去。這樣由于磁盤上沒有解密后的臨時文件,破解更加困難。事實上,目前世界上最強勁的專業(yè)保護軟件Amadillo就是用的這種方法。而且這種方法可以充分防止被調(diào)試器Dump。但實現(xiàn)起來比較困難,尤其是在WinNT 5以后的操作系統(tǒng)中。
由于這種方法將注冊檔和受限制代碼惟一關聯(lián),爆破手拿到你的軟件也只有干瞪眼。建議大家都給共享件加上功能限制,這樣比時間和次數(shù)限制更加安全。

  

 

=========================================================
泉貿(mào)軟件工作室
承接中小Windows桌面軟件開發(fā),軟件的破解及逆向。內(nèi)核軟件開發(fā)。脫機、協(xié)議分析。使用語言:C++、C。
承接各種外包項目,接口開發(fā)項目。JAVA、C#語言的各種框架平臺的開發(fā)。
提供系統(tǒng)各種問題的解決方案,解決系統(tǒng)崩潰問題,提供裝機方案。
官方網(wǎng)站: http://
www.svch0st.com  聯(lián)系Q1483187 191968212  電話 18810615383

http://www.qmboy.com
=========================================================


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI