史萊姆論壇

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

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

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

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

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-12, 03:47 AM   #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 金幣
預設 Directory Scanner v1.5 註冊算法分析

Directory Scanner v1.5 註冊算法分析

破解目標:Directory Scanner v1.5
官方主頁:http://dekasoftware.mastak.com/
軟體簡介:通過設定過濾掩碼,讓你快速搜尋電腦中的文件
下載位址:http://dekasoftware.mastak.com/dirscan.zip

使用工具:W32Dasm、Ollydbg、Windows 自帶的計算器、32bit Calculator 1.6 by cybult

作者:炎之川
時間:2003.4.2
主頁:http://skipli.yeah.net/

宣告: 此文僅用於學習及交流,若要轉載請保持文章完整。


Delphi 寫的軟體,也沒有什麼干擾分析的東西,W32Dasm 反彙編後可以在串式參考中找到註冊成功及失敗的提示,算法也比較簡單。

簡單分析後用 Ollydbg 載入程序,在 43D538 處下斷點,然後 Ctrl+F2 重新開始,F9 執行程序,在註冊對話視窗中填入註冊名和假註冊碼,我填入:
Name: lovefire
S/N: 78787878

按 Register,被 Ollydbg 斷下:
(; 後是 Ollydbg 所分析的內容,// 後是我加的註釋)

0043D538 /. 55 PUSH EBP //停在這裡
0043D539 |. 8BEC MOV EBP,ESP
0043D53B |. 6A 00 PUSH 0
0043D53D |. 6A 00 PUSH 0
0043D53F |. 53 PUSH EBX
0043D540 |. 56 PUSH ESI
0043D541 |. 57 PUSH EDI
0043D542 |. 8BF8 MOV EDI,EAX
0043D544 |. 33C0 XOR EAX,EAX
0043D546 |. 55 PUSH EBP
0043D547 |. 68 3BD64300 PUSH DirScan.0043D63B
0043D54C |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0043D54F |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0043D552 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0043D555 |. 8B87 E0010000 MOV EAX,DWORD PTR DS:[EDI+1E0]
0043D55B |. E8 20E4FDFF CALL DirScan.0041B980 //取得註冊名
0043D560 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //註冊名放入 eax
0043D563 |. E8 2465FCFF CALL DirScan.00403A8C //比較是否已輸入註冊名
0043D568 |. 33DB XOR EBX,EBX
0043D56A |. 8BF0 MOV ESI,EAX //eax 中是註冊名
0043D56C |. 85F6 TEST ESI,ESI //用戶名輸入了麼?
0043D56E |. 7E 22 JLE SHORT DirScan.0043D592 //沒有輸入就886啦~~~
0043D570 |. B9 01000000 MOV ECX,1 //ecx 置1,作為記數器

//算法開始
0043D575 |> 69C1 15CD5B07 /IMUL EAX,ECX,75BCD15 //eax = ecx*75BCD15,ecx 是記數器
0043D57B |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4] //註冊名送 edx
0043D57E |. 0FB6540A FF |MOVZX EDX,BYTE PTR DS:[EDX+ECX-1] //逐位取註冊名的字串
0043D583 |. F7EA |IMUL EDX //eax*edx,得數放入eax,溢出值放入edx
0043D585 |. 03C3 |ADD EAX,EBX //eax=eax+ebx,此處第一次循環時ebx=0
0043D587 |. 99 |CDQ //edx 清零
0043D588 |. 33C2 |XOR EAX,EDX //eax異或edx,得數放入eax
0043D58A |. 2BC2 |SUB EAX,EDX //eax=eax-edx,edx中是上面乘法運算的溢出值
0043D58C |. 8BD8 |MOV EBX,EAX //ebx=eax
0043D58E |. 41 |INC ECX //ecx+1,即記數器+1
0043D58F |. 4E |DEC ESI //esi-1
0043D590 |.^75 E3 \JNZ SHORT DirScan.0043D575 //跳回去繼續循環
//算法結束,eax 中儲存的就是註冊碼的16進制值,轉換為10進制即是註冊碼

0043D592 |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
0043D595 |. 8B87 E8010000 MOV EAX,DWORD PTR DS:[EDI+1E8]
0043D59B |. E8 E0E3FDFF CALL DirScan.0041B980
0043D5A0 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] //取假碼
0043D5A3 |. 33D2 XOR EDX,EDX
0043D5A5 |. E8 3294FCFF CALL DirScan.004069DC
0043D5AA |. 3BD8 CMP EBX,EAX //比較真假註冊碼
0043D5AC |. 75 4D JNZ SHORT DirScan.0043D5FB //不同則註冊失敗,若此處改為 jne 0043D5AE,不管註冊碼是否正確都寫入 dirscan.ini 文件,即可爆破(軟體沒有在啟動的時候再次驗證註冊碼有效性)
0043D5AE |. A1 E8FA4300 MOV EAX,DWORD PTR DS:[43FAE8]
0043D5B3 |. 8918 MOV DWORD PTR DS:[EAX],EBX
0043D5B5 |. B9 54D64300 MOV ECX,DirScan.0043D654 ; ASCII "dirscan.ini"
0043D5BA |. B2 01 MOV DL,1
0043D5BC |. A1 644F4300 MOV EAX,DWORD PTR DS:[434F64]
0043D5C1 |. E8 FA79FFFF CALL DirScan.00434FC0
0043D5C6 |. 8BF0 MOV ESI,EAX
0043D5C8 |. 53 PUSH EBX
0043D5C9 |. B9 68D64300 MOV ECX,DirScan.0043D668 ; ASCII "Serial"
0043D5CE |. BA 78D64300 MOV EDX,DirScan.0043D678 ; ASCII "Register" //註冊成功就將信息寫入 dirscan.ini 中
0043D5D3 |. 8BC6 MOV EAX,ESI
0043D5D5 |. E8 DE7BFFFF CALL DirScan.004351B8
0043D5DA |. 8BC6 MOV EAX,ESI
0043D5DC |. E8 5B57FCFF CALL DirScan.00402D3C
0043D5E1 |. 6A 40 PUSH 40
0043D5E3 |. B9 84D64300 MOV ECX,DirScan.0043D684 ; ASCII "Directory scanner"
0043D5E8 |. BA 98D64300 MOV EDX,DirScan.0043D698 ; ASCII "Thank you for registering Directory Scanner!" //註冊成功
0043D5ED |. A1 A4FB4300 MOV EAX,DWORD PTR DS:[43FBA4]
0043D5F2 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0043D5F4 |. E8 53DFFEFF CALL DirScan.0042B54C
0043D5F9 |. EB 18 JMP SHORT DirScan.0043D613
0043D5FB |> 6A 10 PUSH 10
0043D5FD |. B9 84D64300 MOV ECX,DirScan.0043D684 ; ASCII "Directory scanner"
0043D602 |. BA C8D64300 MOV EDX,DirScan.0043D6C8 ; ASCII "Wrong Serial Number. Register aborted!" //註冊失敗
0043D607 |. A1 A4FB4300 MOV EAX,DWORD PTR DS:[43FBA4]
0043D60C |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0043D60E |. E8 39DFFEFF CALL DirScan.0042B54C
0043D613 |> A1 68074400 MOV EAX,DWORD PTR DS:[440768]
0043D618 |. E8 5BBDFEFF CALL DirScan.00429378
0043D61D |. 33C0 XOR EAX,EAX
0043D61F |. 5A POP EDX
0043D620 |. 59 POP ECX
0043D621 |. 59 POP ECX
0043D622 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0043D625 |. 68 42D64300 PUSH DirScan.0043D642
0043D62A |> 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0043D62D |. E8 DE61FCFF CALL DirScan.00403810
0043D632 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0043D635 |. E8 D661FCFF CALL DirScan.00403810
0043D63A \. C3 RETN


具體算法:
1、具體循環次數乘預設的數75BCD15,再乘逐位取得的註冊名的ASCII值,值放入eax,溢出值放入edx,最後加上ebx的值,ebx初始值為0,第二次循環的值由第一次循環所得值決定,之後累加;
2、edx雙字擴展(清零)之後,(eax*edx)-edx,得出的值放入 ebx,供下次循環使用;
3、循環完成之後,eax中存放的值即註冊碼的16進制數,轉換為10進制即為註冊碼。

一組可用的註冊碼:
Name: lovefire
S/N: 1870109538

註冊成功後,註冊信息寫入 windows 安裝目錄下的 dirscan.ini 文件中。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

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

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

相似的主題
主題 主題作者 討論區 回覆 最後發表
Win2k域的制作備份與恢復 psac 作業系統操作技術文件 0 2006-03-20 08:11 AM
新增可引導光碟更完美的解決之道 psac 應用軟體使用技術文件 1 2004-02-22 07:52 PM
Windows 活動目錄詳解 psac 作業系統操作技術文件 3 2003-12-17 11:15 AM
Windows 活動目錄詳解 psac 作業系統操作技術文件 0 2003-12-01 01:41 PM
解決 Windows 2000 中的一般 Active Directory 安裝問題 psac 作業系統操作技術文件 0 2003-10-31 01:34 AM


所有時間均為台北時間。現在的時間是 03:33 PM


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


SEO by vBSEO 3.6.1