史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > Hacker/Cracker 及加解密技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-11, 07:35 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 一個菜鳥對密碼學的理解

前言:

就在菜鳥們正為破了一個明碼比較的軟體而歡欣鼓舞時,各位大大都在研究密碼學了,本菜鳥我也不自量力地緊跟其後,怎奈各種介紹密碼學的書都太專業了,而且不是針對CRACK的.一上來就是一堆公鑰,私鑰,HASH之類的東東,大概不少菜鳥一看到這些都被嚇回去了.這裡我把密碼學在軟體加密上的大體思路向各位菜鳥同胞們介紹一下.如果你是菜鳥,你會發現,密碼學不是你想像中的那麼難;如果你是大俠,最好跳過這篇文章,不然就要把大牙捂好,當心笑掉了.

好了,廢話少說,我先來講講軟體加密中的基本思想.

我們知道,不管形式怎樣複雜,各種共享軟體都是把用戶名和註冊碼經過一定的計算後進行比較.現在假設有一個軟體,作者採用的註冊算法是把註冊名的每一位都+1而得到註冊碼(當然實際中不可能這麼簡單).我是一個用戶,我想註冊這個軟體,於是我把我的名字RoBa和SOME MONEY給作者送去,作者那裡肯定有一個註冊機的,作者的註冊機經過計算('R'+1='S','o'+1='p','B'+1='C','a'+1='b')後把註冊碼SpCb發給我,然後我把用戶名RoBa註冊碼SpCb輸入軟體中,點擊"OK",這時候軟體該怎麼辦呢?如何進行註冊判斷才安全呢?

一種很一般的方法是,軟體把用戶名經過計算後與註冊碼比較,也就是判斷
if 註冊碼==F(用戶名) then 成功 else 失敗
現在我是Cracker,我不想給作者MONEY,那麼我跟蹤這個軟體,輸入用戶名RoBa,假碼5678,然後可以發現,它把'R'+1,把'o'+1,把'B'+1,把'a'+1,再把結果'SpCb'組合起來與'5678'進行比較.也就是說,軟體實際上把作者手裡的註冊機的功能再現了一遍,其實這個軟體本身就包含一個註冊機,破解者甚至不必看懂註冊算法,只要把軟體中計算註冊碼的那一部分提取出來就是註冊機了.這顯然是非常不安全的,一些CRACK初學者只要到處亂D,就可能把註冊碼D出來(我以前經常這樣做^_^).

那麼正確的做法應該怎樣呢?我假設仍然是這個註冊算法,作者手中的註冊機也不變,只是要把軟體中判斷註冊的部分變一下.不去根據用戶名計算註冊碼,而是根據註冊碼反算用戶名,即
if 用戶名==F'(註冊碼) then 成功 else 失敗
我又來跟蹤這個軟體了,輸入用戶名RoBa,假碼5678,然後開始跟蹤,結果發現軟體計算'5'-1,'6'-1,'7'-1,'8'-1,然後把結果'4567'與'RoBa'比較,這樣就給人一種莫名其妙的感覺.如果我是一個初學者,我會在記憶體中發現一個字串'4567',但這個字串卻不是用戶名RoBa所對應的正確註冊碼,這樣就防止軟體被破解和寫出註冊機.當然在上面這種情況下我可以在用戶名輸入'4567',然後在註冊碼輸入'5678',但這樣會給人的感覺很不爽,而且大多數情況下胡亂輸入的假碼經過反算後得到的用戶名含有不可顯示字串,這樣就給破解帶來了麻煩.

還有一點是非常需要注意的,採用第二種方法時,註冊算法必須是可逆的,也就是說作者必須有方法通過用戶名算出註冊碼來,而軟體也必須能通過註冊碼算出註冊名.

各位菜鳥同志可能有疑問了,這樣只是不讓初學者把註冊碼亂D出來,如果遇上高手呢,軟體中那個減1的運算不是很容易就會被識破嗎?所以說,這時候我們的密碼學就派上用場了.(終於來到正題了*_*)

下面我把三類一般的加密算法介紹一下: (按看雪書上的順序)

(一)單向散列算法,也叫Hash算法

呵呵,別被這個名字嚇住哦!其實說通俗一些,就是把一個字串A亂七八糟計算一通,得到一個亂七八糟的字串B,不管你有多大本事,你也不可能從字串B反算出原來字串A,也就是說是一個不可逆的計算.
各位可能又問了,你前邊說了半天註冊算法必須可逆,這種不可逆的計算有什麼用呢?完全正確,這種算法在軟體註冊中其實並沒有什麼實際作用,最多只是作為一個中間程序而己,所以不詳細介紹了.

這一類的一般算法:MD5,SHA等

(二)非對稱算法

根據前面所講的,軟體的計算實際上是兩個互逆的運算:
在作者的註冊機上計算: F(用戶名),在上面的例子中即為 註冊碼=用戶名+1 (計算1)
在發佈的軟體中計算: F'(註冊碼),在上面的例子中即為 用戶名=註冊碼-1 (計算2)
CRACKER只能得到計算2,但是在一般的可逆計算中,通過計算2可以很容易用數學知識求出計算1,比方上面的例子,有小學數學知識的人就會吧?只要把計算1研究出來,註冊機也就寫成了.

那麼有沒有雖然存在逆運算但不能被隨意求逆的算法呢?這就是非對稱算法了.
這種算法是可逆的,但它的計算有點特別,需要兩個關鍵的KEY(密鑰),而且這兩個KEY不同,如果沒有KEY就無法計算.軟體作者經過一定的規則設定這兩個KEY,然後用下面的方法:
作者的註冊機上: 註冊碼=F(用戶名,KEY1)
發佈的軟體中: 用戶名=F'(註冊碼,KEY2)
這樣CRACKER跟蹤時可以發現KEY2,也知道用戶名是怎樣計算出來的,但他不知道KEY1,無法把這個運算逆回去,很奇妙吧?這裡面有許多高等數學中數論的知識,各位可以研究一下.(不要來找我,我高中還沒畢業 )
這樣的算法怎樣破解呢?雖然KEY1和KEY2不同,但它們是有一定的關係的,只是這樣的關係很難求解(比如大數分解等一些數學上的難題),如果KEY設計得足夠大,由KEY2求出KEY1幾乎是不可能的.但因為算法要用在註冊判斷上,如果KEY太大的話要浪費很多時間,在實際中不可取,所以這就給我們CRACKER提供了機會,用相應的工具可以在較短的時間間由KEY2解出KEY1來,從而寫出註冊機.

這一類的一般的算法有RSA,ECC等

(三)對稱算法

對稱算法和上面的非對稱算法最大的不同就是兩個關鍵的KEY是相同的,這樣的算法用在通信上當然沒有問題,但在軟體加密上就很不安全了,因為你發佈的軟體中要進行解密運算,必定會包括這個KEY,而軟體只要在別人的電腦上執行,軟體中包含的一切對高手來講都沒有安全性可言,這個KEY一旦被跟蹤出來,軟體就被破解了.

這一類的一般算法有BlowFish等

後記:囉囉嗦嗦說了這麼多,也不知道各位聽懂了沒有,本文並沒有涉及到各種算法的具體實現程序(其實我也不會),只是想把各類算法簡要介紹一下,消除菜鳥對密碼學的恐懼感,如果你想瞭解更詳細的內容,請參考各位大俠的文章,讓我們共同提高吧.
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 01:11 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1