史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > Hacker/Cracker 及加解密技術文件
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

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

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

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

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-01-15, 01:38 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 金幣
預設 輕鬆班主任的偵錯筆記[keyfile]

輕鬆班主任的偵錯筆記[keyfile]

【破文作者】 rdsnow[BCG][PYG][D.4s]

【作者主頁】 http://rdsnow.ys168.com

【 E-mail 】 rdsnow@163.com

【 作者QQ 】 83757177

【文章題目】 輕鬆班主任的偵錯筆記[keyfile]

【軟體名稱】 輕鬆班主任V4.4[個人版]

【下載位址】 http://www1.skycn.com/soft/15261.html

----------------------------------------------------------------------------------------------
【加密方式】 keyfile

【破解工具】 ODbyDYK v1.10[05.09]

【軟體限制】 功能限制

【破解平台】 MicroSoft Windows XP SP2

----------------------------------------------------------------------------------------------
【軟體簡介】

對班主任的工作能系統地管理.包括學生的基本情況,考勤,成績,評語等,對班主任的計劃,總結,應有盡有,還收集了不少對班主任工作很有說明 的文章.盡可能地使班主任的工作變得輕鬆!操作方便,功能齊全,成績管理功能強大是本軟體的特點和優勢.如果你註冊成為了正式用戶,將一直可以免費昇級.

----------------------------------------------------------------------------------------------
【文章簡介】

最近被外殼的ANTI搞的頭大,找個簡單的調整一下,這是一個典型的Keyfile保護的共享軟體,因為keyfile文件較短,難度不大,高手就忽略了,只是用來練手,通過這個程序瞭解一下破解kyefile的一般程序。

----------------------------------------------------------------------------------------------
【破解程序】

先脫掉程序的殼,Aspack 2.12的壓縮殼很容易搞定。

開啟程序的時候,同時開啟FileMon監視,顯示zuce.dat:File Not Found。從名字上猜想這就是註冊文件了,
於是在安裝目錄下偽造一個keyfile。取名為zuce.dat。跟蹤程序對該檔案的讀取動作。

00779961 |. 50 PUSH EAX
00779962 |. 8D45 F4 LEA EAX,[LOCAL.3]
00779965 |. B9 189A7700 MOV ECX,qsbzr.00779A18 ; ASCII "zuce.dat"
0077996A |. 8B15 64DC7800 MOV EDX,DWORD PTR DS:[78DC64]
00779970 |. E8 37B4C8FF CALL qsbzr.00404DAC ; 開啟keyfile
00779975 |. 8B45 F4 MOV EAX,[LOCAL.3]
00779978 |. B9 2C9A7700 MOV ECX,qsbzr.00779A2C ; ASCII "name"
0077997D |. BA 3C9A7700 MOV EDX,qsbzr.00779A3C
00779982 |. E8 59FDFFFF CALL qsbzr.007796E0 ; 讀取用戶名
00779987 |. 8B45 F8 MOV EAX,[LOCAL.2]
0077998A |. 8D55 FC LEA EDX,[LOCAL.1]
0077998D |. E8 46FCFFFF CALL qsbzr.007795D8 ; 算法Call,跟進
00779992 |. 8B45 FC MOV EAX,[LOCAL.1]
00779995 |. 50 PUSH EAX
00779996 |. 68 4C9A7700 PUSH qsbzr.00779A4C ; ASCII "123"
0077999B |. 8D45 F0 LEA EAX,[LOCAL.4]
0077999E |. 50 PUSH EAX
0077999F |. 8D45 EC LEA EAX,[LOCAL.5]
007799A2 |. B9 189A7700 MOV ECX,qsbzr.00779A18 ; ASCII "zuce.dat"
007799A7 |. 8B15 64DC7800 MOV EDX,DWORD PTR DS:[78DC64]
007799AD |. E8 FAB3C8FF CALL qsbzr.00404DAC ; 再次開啟keyfile
007799B2 |. 8B45 EC MOV EAX,[LOCAL.5]
007799B5 |. B9 589A7700 MOV ECX,qsbzr.00779A58 ; ASCII "code"
007799BA |. BA 689A7700 MOV EDX,qsbzr.00779A68
007799BF |. E8 1CFDFFFF CALL qsbzr.007796E0 ; 讀出keyfile中的假碼
007799C4 |. 8B55 F0 MOV EDX,[LOCAL.4]
007799C7 |. 58 POP EAX
007799C8 |. E8 DFB4C8FF CALL qsbzr.00404EAC ; 真假註冊比較
007799CD |. 75 04 JNZ SHORT qsbzr.007799D3 ; 爆破點
007799CF |. B3 01 MOV BL,1 ; 返回值=1
007799D1 |. EB 02 JMP SHORT qsbzr.007799D5
007799D3 |> 33DB XOR EBX,EBX ; 返回值=0
007799D5 |> 33C0 XOR EAX,EAX

原來的keyfile讀取資料不成功,這個keyfile不需要用WinHex產生,直接用記事本輸入一個txt文件,將副檔名改為dat,根據讀取資料的參數,結果一般的ini文件的格式,加上猜想,在記事本內輸入:

[班主任]
name=rdsnow[BCG][PYG][D.4s]
[註冊]
code=98765432-87654321-abcdefgh-hijklmno

這個格式我也是試了很多次才成功的。註冊碼的格式可以從0077998D處的CALL qsbzr.007795D8的返回結果可以看到。那裡返回的就是真碼。

----------------------------------------------------------------------------------------------
要知道註冊碼是怎樣得到的,跟進0077998D處的CALL qsbzr.007795D8:

007795D8 /$ 55 PUSH EBP
007795D9 |. 8BEC MOV EBP,ESP
007795DB |. B9 05000000 MOV ECX,5
007795E0 |> 6A 00 /PUSH 0
007795E2 |. 6A 00 |PUSH 0
007795E4 |. 49 |DEC ECX
007795E5 |.^ 75 F9 \JNZ SHORT qsbzr.007795E0
007795E7 |. 51 PUSH ECX
007795E8 |. 53 PUSH EBX
007795E9 |. 8BDA MOV EBX,EDX
007795EB |. 8945 FC MOV [LOCAL.1],EAX
007795EE |. 8B45 FC MOV EAX,[LOCAL.1]
007795F1 |. E8 5AB9C8FF CALL qsbzr.00404F50
007795F6 |. 33C0 XOR EAX,EAX
007795F8 |. 55 PUSH EBP
007795F9 |. 68 C7967700 PUSH qsbzr.007796C7
007795FE |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00779601 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00779604 |. 8D55 D4 LEA EDX,[LOCAL.11]
00779607 |. 8B45 FC MOV EAX,[LOCAL.1]
0077960A |. E8 2D04C9FF CALL qsbzr.00409A3C ; 對註冊碼進行格式校驗
0077960F |. 8B45 D4 MOV EAX,[LOCAL.11]
00779612 |. 8D55 D8 LEA EDX,[LOCAL.10]
00779615 |. E8 56BED3FF CALL qsbzr.004B5470 ; 算法,看輸超過範圍式,應該使用了MD5算法,跟進
0077961A |. 8D45 D8 LEA EAX,[LOCAL.10]
0077961D |. 8D55 F8 LEA EDX,[LOCAL.2]
00779620 |. E8 17BFD3FF CALL qsbzr.004B553C ; 將MD5輸出128位訊息轉為32個字元
00779625 |. 8D45 F4 LEA EAX,[LOCAL.3]
00779628 |. 50 PUSH EAX
00779629 |. B9 08000000 MOV ECX,8
0077962E |. BA 01000000 MOV EDX,1
00779633 |. 8B45 F8 MOV EAX,[LOCAL.2]
00779636 |. E8 85B9C8FF CALL qsbzr.00404FC0 ; 取前8個字元
0077963B |. 8D45 F0 LEA EAX,[LOCAL.4]
0077963E |. 50 PUSH EAX
0077963F |. B9 08000000 MOV ECX,8
00779644 |. BA 09000000 MOV EDX,9
00779649 |. 8B45 F8 MOV EAX,[LOCAL.2]
0077964C |. E8 6FB9C8FF CALL qsbzr.00404FC0 ; 取第9到16個字元
00779651 |. 8D45 EC LEA EAX,[LOCAL.5]
00779654 |. 50 PUSH EAX
00779655 |. B9 08000000 MOV ECX,8
0077965A |. BA 11000000 MOV EDX,11
0077965F |. 8B45 F8 MOV EAX,[LOCAL.2]
00779662 |. E8 59B9C8FF CALL qsbzr.00404FC0 ; 取第17到24個字元
00779667 |. 8D45 E8 LEA EAX,[LOCAL.6]
0077966A |. 50 PUSH EAX
0077966B |. B9 08000000 MOV ECX,8
00779670 |. BA 19000000 MOV EDX,19
00779675 |. 8B45 F8 MOV EAX,[LOCAL.2]
00779678 |. E8 43B9C8FF CALL qsbzr.00404FC0 ; 取第25到32個字元
0077967D |. FF75 F4 PUSH [LOCAL.3]
00779680 |. 68 DC967700 PUSH qsbzr.007796DC
00779685 |. FF75 F0 PUSH [LOCAL.4]
00779688 |. 68 DC967700 PUSH qsbzr.007796DC
0077968D |. FF75 EC PUSH [LOCAL.5]
00779690 |. 68 DC967700 PUSH qsbzr.007796DC
00779695 |. FF75 E8 PUSH [LOCAL.6]
00779698 |. 8BC3 MOV EAX,EBX
0077969A |. BA 07000000 MOV EDX,7
0077969F |. E8 7CB7C8FF CALL qsbzr.00404E20 ; 用"-"連接得到註冊碼
007796A4 |. 33C0 XOR EAX,EAX
007796A6 |. 5A POP EDX
007796A7 |. 59 POP ECX
007796A8 |. 59 POP ECX
007796A9 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
007796AC |. 68 CE967700 PUSH qsbzr.007796CE
007796B1 |> 8D45 D4 LEA EAX,[LOCAL.11]
007796B4 |. E8 E7B3C8FF CALL qsbzr.00404AA0
007796B9 |. 8D45 E8 LEA EAX,[LOCAL.6]
007796BC |. BA 06000000 MOV EDX,6
007796C1 |. E8 FEB3C8FF CALL qsbzr.00404AC4
007796C6 \. C3 RETN

----------------------------------------------------------------------------------------------
跟進00779615處的CALL qsbzr.004B5470

004B5470 /$ 55 PUSH EBP
004B5471 |. 8BEC MOV EBP,ESP
004B5473 |. 83C4 9C ADD ESP,-64
004B5476 |. 53 PUSH EBX
004B5477 |. 33C9 XOR ECX,ECX
004B5479 |. 894D 9C MOV [LOCAL.25],ECX
004B547C |. 894D A0 MOV [LOCAL.24],ECX
004B547F |. 8BDA MOV EBX,EDX
004B5481 |. 8945 FC MOV [LOCAL.1],EAX
004B5484 |. 8B45 FC MOV EAX,[LOCAL.1]
004B5487 |. E8 C4FAF4FF CALL qsbzr.00404F50
004B548C |. 33C0 XOR EAX,EAX
004B548E |. 55 PUSH EBP
004B548F |. 68 0B554B00 PUSH qsbzr.004B550B
004B5494 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004B5497 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004B549A |. 8D45 A4 LEA EAX,[LOCAL.23]
004B549D |. E8 A6FEFFFF CALL qsbzr.004B5348 ; MD5啟始化,進出可以看到MD5的四個常數
004B54A2 |. 8D45 A0 LEA EAX,[LOCAL.24]
004B54A5 |. B9 20554B00 MOV ECX,qsbzr.004B5520 ; ASCII "jltxgl"
004B54AA |. 8B55 FC MOV EDX,[LOCAL.1]
004B54AD |. E8 FAF8F4FF CALL qsbzr.00404DAC ; 用戶名後接字元串"jltxgl"得到S1
004B54B2 |. 8B45 A0 MOV EAX,[LOCAL.24]
004B54B5 |. E8 A6F8F4FF CALL qsbzr.00404D60 ; S1的長度
004B54BA |. 50 PUSH EAX
004B54BB |. 8D45 9C LEA EAX,[LOCAL.25]
004B54BE |. B9 30554B00 MOV ECX,qsbzr.004B5530
004B54C3 |. 8B55 FC MOV EDX,[LOCAL.1]
004B54C6 |. E8 E1F8F4FF CALL qsbzr.00404DAC ; 用戶名後接字元串"江龍工作室"得S2
004B54CB |. 8B45 9C MOV EAX,[LOCAL.25]
004B54CE |. E8 8DFAF4FF CALL qsbzr.00404F60
004B54D3 |. 8BD0 MOV EDX,EAX
004B54D5 |. 8D45 A4 LEA EAX,[LOCAL.23] ; MD5的四個常數
004B54D8 |. 59 POP ECX ; S1的長度
004B54D9 |. E8 9EFEFFFF CALL qsbzr.004B537C ; 對S2進行MD5運算,參數卻是S1的長度
004B54DE |. 8BD3 MOV EDX,EBX ; 上面可以簡單成實際只在用戶名後接了"江龍工"
004B54E0 |. 8D45 A4 LEA EAX,[LOCAL.23]
004B54E3 |. E8 14FFFFFF CALL qsbzr.004B53FC ; 標準MD5核心運算,沒有必要跟進了
004B54E8 |. 33C0 XOR EAX,EAX
004B54EA |. 5A POP EDX
004B54EB |. 59 POP ECX
004B54EC |. 59 POP ECX
004B54ED |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004B54F0 |. 68 12554B00 PUSH qsbzr.004B5512
004B54F5 |> 8D45 9C LEA EAX,[LOCAL.25]
004B54F8 |. BA 02000000 MOV EDX,2
004B54FD |. E8 C2F5F4FF CALL qsbzr.00404AC4
004B5502 |. 8D45 FC LEA EAX,[LOCAL.1]
004B5505 |. E8 96F5F4FF CALL qsbzr.00404AA0
004B550A \. C3 RETN

----------------------------------------------------------------------------------------------
【破解心得】

從破解程序來看,對用keyfile保護的文件有下面一些建議。

1、keyfile的檔案名不要使用zhuce、reg、key等敏感的檔案名或副檔名,現在有一些作者將keyfile偽裝成DLL、exe、com等就是一個很好的做法。

2、keyfile的內容不要過於簡單,內容越多越好,並將關鍵訊息分開儲存在keyfile的各個不同地方。干擾偵錯者偽造。或者產生幾個不同的keyfile儲存在不同的地方。

3、keyfile內儲存的內容不要直接是明碼,文字,這樣會給偵錯者不少提示訊息。最好用戶名、機器碼、註冊碼等訊息要經過加密,讓偵錯者看到的是亂碼。

4、程序內分不同的地方不同的時刻對keyfile的不同的部分進行驗證,不要使用同一個驗證Call,比如開機時驗證keyfile的一部分,進入程序後再驗證其他部分。增加暴力修改點。

5、keyfile的位置也要隱蔽,不要總是放在程序安裝目錄內。

6、最後盡可能採取一些反跟蹤的手段組織程序被偵錯。

----------------------------------------------------------------------------------------------
【註冊機源碼】

Microsoft Visual C++ 6.0寫的MFC程序,使用網上下載MD5類,下載的類不同,用法也不大一樣。

void CMyDlg::OnOK()
{
// TODO: Add extra validation here

//CDialog::OnOK();

unsigned char inbuff[512],outbuff[16];
int i,n;
CString temp,MD5En;
FILE *keyfile;

//檢查輸入
UpdateData(true);
n=m_Edit1.GetLength ();
if(n==0){
MessageBox("★★★請輸入你的用戶名★★★","提示",MB_OK);
return;
}

//MD5編碼,結果賦給MD5EN
n+=6;
memcpy(inbuff,m_Edit1+"江龍工",n);
MD5_CTX context;
context.MD5Update (inbuff,n);
context.MD5Final (outbuff);
for(i=0;i<16;i++){
temp.Format ("%02x",outbuff[ i]);
MD5En += temp;
}

//插入'-'形成註冊碼
MD5En.Insert (8,'-');
MD5En.Insert (17,'-');
MD5En.Insert (26,'-');

//輸出註冊文件
keyfile=fopen("zuce.dat","w+t");
if(keyfile){
fwrite("[班主任]\nname=",1,14,keyfile);
fwrite(m_Edit1,1,n-6,keyfile);
fwrite("\n[註冊]\ncode=",1,13,keyfile);
fwrite(MD5En,1,35,keyfile);
fclose(keyfile);
MessageBox(" ★註冊文件zuce.dat已經產生★\n\n★將該檔案拷貝到軟體安裝目錄完成註冊★","成功",MB_OK);
}
else MessageBox("註冊文件zuce.dat產生不成功,請重試一下","錯誤",MB_OK);

}

----------------------------------------------------------------------------------------------
【破解聲明】 我是一隻小菜鳥,偶得一點心得,願與大家分享
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
 


主題工具
顯示模式

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

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


所有時間均為台北時間。現在的時間是 03:41 AM


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


SEO by vBSEO 3.6.1