****源自:
一般是以計算機硬件(如主板,網卡,硬盤)的唯一序列號作為注冊源,通過一定的算法(即注冊機)來形成所謂的注冊碼!一般的程序通過在程序中設置一個全局變量來進行注冊碼的記錄;
時間的實現類似于:
last = "2002/02/20";
int year,month,day,,,;
CTime date = CTime::();
= date.();
= date.();
= date.();
year = atoi(last.Left(4));
month = atoi(last.Mid(4,2));
day = atoi(last.Right(2));
次數可以在注冊表里設置一個鍵值來判斷,若有此鍵,則說明已經到期!
一般情況下軟件的注冊是通過比較來實現的,也就是說軟件本身就是注冊機注冊碼加密是什么意思,因為他本身就有個真正的注冊碼,用他來和你所輸入的注冊碼做比較。不過有的是明碼比較有的是加密比較,以明碼比較來說:我們已經知道了軟件自己可能會產生注冊碼的有的在內存中有的在軟件中有的在注冊表中,更有甚者是有個通用的萬能注冊碼。
輸入注冊碼成功是因為軟件中用了跳轉,也就是說。當你輸入的號碼和真正的注冊碼比較完的時候有個跳轉。
跳轉分為一下幾個類型
若相等則跳
若不相等則跳
無條件跳
若小于則跳
若大于則跳
若大于等于則跳
若小于則跳
若小于等于則跳
****源自:
大部分注冊算法的原理是:軟件或者用戶自己觸發了軟件的注冊模塊-》軟件跳轉到注冊認證模塊。-》彈出注冊窗口-》用戶輸入注冊名+注冊碼A,把它們存放在內存中。然后軟件的注冊碼驗證部分根據用戶輸入的注冊名生成正確的注冊碼B并和用戶輸入的注冊碼A做對比。如果結果為相同則注冊通過,并運行“注冊成功”后面的程序分支,比如解除各種軟件限制。如果不相同則提示“無效的注冊碼,請重新輸入!”或者“ key!”等等警告。
知道了原理,我們只要用和等匯編調試軟件去做軟件的動態反匯編。來找到軟件注冊部分的入口(這個過程就不細說了,有興趣去看看匯編調試和軟件破解的資料)
破解:
這時候后如果我們在軟件的注冊失敗的那段代碼前面加一個跳轉,說得容易理解一點就是:跳過軟件注冊碼驗證失敗后應該運行的分支,而將它轉到注冊成功的那個分支上。那么這時候不管你輸入的注冊碼是對是錯,都會提示注冊成功。直接將它跳到注冊通過的那個程序分支上。這是一種破解方式。還有一種就是直接屏蔽注冊窗口,這個最簡單,在那段窗口代碼前面加一個跳轉指令。這個適合于那種頻繁彈出注冊窗口但軟件功能并沒有限制的注冊軟件
注冊機:
通過反匯編和調試器跟蹤來得到軟件的注冊碼驗證部分的匯編代碼,然后根據它寫出來的逆向算法生成的注冊程序。就是注冊機了
內存注冊機:
跟簡單了,因為經過上面的步驟,你已經知道的那個軟件的注冊算法。知道它會在做注冊認證的時候將用戶輸入的注冊碼和正確的注冊碼做對比。把正確內存里的注冊碼取出來就OK了。所以內存注冊機的使用方法都是:先開注冊機,用注冊機載入軟件。然后你隨便輸入一個注冊碼,按確定。軟件會提示注冊失敗,因為你的注冊碼是錯誤的。不過這個時候正確的注冊碼已經被內存注冊機截取到了
****源自:
注冊碼、使用期限相對于收費而言的,注冊碼可以達到一臺電腦只能安裝一次的效果,使用期限可以達到超過期限不能使用的效果。
(1)獲取機器硬盤序列號(因設計者而異,根據獲取類型、種類等結果而不同)
(2)序列號根據一系列的算法(加密的范疇)得出注冊碼
(3)注冊碼根據一系列的算法得出注冊號(算法因人而異,千奇百怪)
也就是說,在軟件剛開始安裝的時候,其實注冊碼已經算出來了,就存放在你的電腦中,只不過不知道放在哪而已。由使用者算出注冊碼,發給開發者,開發者得出注冊碼回發使用者,使用者輸入注冊碼,與電腦中存儲的對比,成功就注冊成功,否則就注冊失敗。
使用期限也是一個道理,軟件只記錄安裝時候的計算機時間,每啟動軟件一次,就對比一次時間,當對比本地時間>安裝時間的時候也就過期啦,而且不要指望修改系統時間,對比本地時間也可能被記錄,一旦時間和對比本地時間有出處,也是會誤認為過期滴。
至于使用次數就是毛毛雨了,每啟動一次加1而已,當大于軟件里設定的最大次數,就伴隨的失效了。使用期限和次數可以有傻瓜破解的辦法,就是重做系統,使用。到期限后,在重做系統,重安,在使用,太麻煩,不推薦~@~
****源自:
認識注冊機破解法
顧名思義,寫注冊機來破解軟件注冊的方法,就是模仿你的注冊碼生成算法或者逆向注冊碼驗證算法而寫出來的和你一模一樣的注冊機。如果被寫出注冊機,你的軟件只好免費了。或者你必須更換算法,但以前注過冊的合法用戶都得被迫更換注冊碼了。
要寫注冊機必須詳細研究你軟件的驗證模塊,這必須先將你的軟件脫殼,再反匯編或者用調試器跟蹤。市面上許多加殼和保護軟件都吹噓不可能被脫殼,但到目前為止沒有一個軟件兌現了自己的諾言。由于CPU最終執行的都是有效指令,所以等你的程序自解壓完成后再從內存中Dump出來就可以實現脫殼。因此不要在殼上面花很多功夫,因為沒有這個必要。
第一招:制造假相
反匯編和調試器跟蹤都是不可能防止的,因為所有的Win32程序都必須通過API來調用系統中的關鍵DLL的(如.dll、GDI32.dll等),然而API是可以Hook的。我們只能從自己的代碼著手來保護我們的勞動果實了。
為了自己調試和以后維護的方便,我們一般采用有意義的名字給我們的函數命名,可這給了可乘之機。例如這樣的函數是什么意思大家應該一目了然吧?(),(),(),()……這樣就可以輕松地從數千個函數中找到他的目標——你的注冊碼校驗函數!而且破解編寫的軟件還有一件TMG小組的破解利器——DeDe。它可以輕松地看到你軟件里的Form、Unit和函數名注冊碼加密是什么意思,還可以反匯編一部分代碼,更可以和合作反匯編更多的代碼,對編出的程序威脅大。
為了不給創造溫馨舒適的破解環境,要故意混亂()我們的代碼,將軟件中所有的函數名全部替換成隨機生成的函數名。例如 。這個函數是什么意思?恐怕只有天知道了。網上有現成的代碼混亂器,按你使用的編程語言的種類可以找到一些。但要注意,只有當你要發布軟件時才使用它,而且一定注意備份源代碼。否則,當你看不懂你自己的代碼時就著急了:)
第二招:用公匙,并改名
另外,一定要使用公開密匙算法保護你的軟件。RSA、DSA和El Gamal之類的算法都可以從網上找到。但注意:將你算法單元中所有涉及到算法名稱的字符串全部改名。避免被發現你用的算法而模仿寫出注冊機來!你還可以張冠李戴,明明用的DSA,將名字全部替換成RSA。
其它算法,如對稱算法和Hash算法也要注意改名,否則這樣:
= (MD5(),MD5(Key));
//你的加密算法,使用了(對稱算法)和MD5(Hash算法)
雖然那些不了解和MD5算法的原理,也不會逆向推測它們,但他們了解你的校驗算法的流程和算法名,便可馬上從網上找到類似的和MD5算法包,從而模擬你的軟件仿造出注冊機。
如果你用不常見的,算法如(NASA美國航天局標準算法)、LOKI、3-WAY、Safer之類不出名但保密程度很高的算法,并且全部改名,這樣就會傷透他們腦筋了。
當然,最好把Hash算法也全部改名,會給他們制造更多的困難。但注意,MD5和SHA之類的Hash初始值會被從內存中找到,這樣他就知道你用的Hash了。所以建議同時使用MD5的變形算法Ripe-MD(RMD)128或160或其它的Hash,如Tiger、Haval等算法。
第三招:阻止別人調試
還有一點,調試器對我們的威脅很大,我們不會讓們舒舒服服地使用、TRW或來調試我們的程序。除了常用的方法外,這里我給一個筆者寫的方法:
{檢查自己的進程的父進程是否為.exe,否則是被調試器加載了}
{不過注意,控制臺程序的父進程在WinNT下是Cmd.exe!}
{注意加載.pas單元}
;
var //檢查自己的進程的父進程
Pn: ;
:;
H,,:Hwnd;
Found:;
:array[0..1023]of Char;
Path:;
begin
H:= 0;
:= 0;
:= 0;
//得到的目錄
(Path,)
(,()- 1));
Path:= (Path)+ '/EX .EXE';//得到的路徑
//得到所有進程的列表快照
:= Shot(,0);
Found:= (,Pn);//查找進程
while Found do //遍歷所有進程
begin
if Pn. = (0)then //自己的進程
begin
:= Pn.://得到父進程的進程ID
//父進程的句柄
H:= (PRO ,True,Pn. );
end
else if (Pn.)= Path then
:= Pn.;//Ex 的PID
Found:= (,Pn);//查找下一個
end;
//父進程不是,是調試器……
if then
begin
(H,0);//殺之!除之而后快也! :)
//你還可以加上其它什么死機代碼來消遣消遣這位可愛的:)
end
end
你可以在或者VC中試試,這樣可以把和VC殺掉了,因為你現在用的是和VC的內置調試器來運行你的程序。調試的時候你還是把它的注釋刪掉吧,發布時別忘記激活喲!
第四招:保護字符串
最后一個問題,這也是一個非常重要的問題:保護你的字符串!字符串在注冊模塊中非常重要!當一個富有經驗的破解你的軟件時,首先做的就是竊取你的字符串。比如他會輸入錯誤的注冊碼,得到你關于錯誤注冊碼的提示,通常是“無效的注冊碼,請重新輸入!”或者“ key( input again)”等等,然后用進行斷點調試或者用、IDA Pro等靜態分析工具在被他脫殼后的程序中查找那個字符串,找到后進行分析。因此,請一定加密你的字符串! 使用時再臨時解密出來,而且要盡量少使用消息提示框,避免被找到漏洞。加密字符串不需要太復雜的算法,隨便找一個快速的對稱算法就可以了。
最后提醒大家一句,不要在加密上花太多的功夫!你應該把更多的時間和精力都用來完善你的軟件,這樣會更合算。借用一位前輩的話來忠告大家吧:花點時間考慮你自己的軟件,看看它是否值得保護?如果沒人用你的軟件,保護也就沒有意義了,不要過高估計你的軟件“對世界的重要性”!呵呵..