|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-12-11, 07:50 PM | #1 |
榮譽會員
|
AntiSpy PRO 1.02 註冊算法分析 + 註冊機來源碼(tc2)
AntiSpy PRO 1.02 註冊算法分析 + 註冊機來源碼(tc2)
破解目標:AntiSpy PRO 1.02 官方主頁:http://www.antispypro.com/ 軟體簡介:AntiSpy 可以幫你清除Cookies、瀏覽網站紀錄、網路緩衝文件、Windows操作系統中的開啟程序紀錄、最近開啟文件。 下載位址:http://www.antispypro.com/antispy/antispypro.exe 使用工具:PEiD 0.8、W32Dasm、Ollydbg 1.09b 漢化版、Windows 自帶的計算器、32bit Calculator 1.6 by cybult、UltraEdit 作者:炎之川[BCG] 時間:2003.4.10 主頁:http://skipli.yeah.net/ 宣告: 此文僅用於學習及交流,若要轉載請保持文章完整。 經 PEiD 0.8 檢查可知,AntiSpy PRO 的主程序為 VC++ 6.0 編寫且無殼,W32Dasm 反彙編,一時似乎看不出什麼東西,所以直接用 OD 裝入程序。載入完成後,在 CPU 視窗中右擊,選項「搜尋」->「字串參考」,然後在出現的視窗中搜尋到了軟體註冊出錯的提示,雙按之,進入對應的程式碼區。 稍作分析後,在 4157C2 處下斷點,然後 Ctrl+F2 重新載入程序,F9 執行,輸入註冊名及假註冊碼: Name: lovefire[BCG] Serial: 78787878 (; 後是 Ollydbg 所分析的內容,// 後是我加的註釋,文中數值均為16進制值) 004157C2 . 68 D8B34500 PUSH AntiSpyP.0045B3D8 ; SE handler installation //下斷點 004157C7 . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 004157CD . 50 PUSH EAX 004157CE . 64:8925 000000>MOV DWORD PTR FS:[0],ESP 004157D5 . 83EC 0C SUB ESP,0C 004157D8 . 56 PUSH ESI 004157D9 . 8BF1 MOV ESI,ECX 004157DB . E8 E7080400 CALL AntiSpyP.004560C7 004157E0 . 8B48 04 MOV ECX,DWORD PTR DS:[EAX+4] 004157E3 . E8 BB320300 CALL AntiSpyP.00448AA3 004157E8 . A1 34744700 MOV EAX,DWORD PTR DS:[477434] 004157ED . C74424 18 0000>MOV DWORD PTR SS:[ESP+18],0 004157F5 . 894424 08 MOV DWORD PTR SS:[ESP+8],EAX 004157F9 . 894424 04 MOV DWORD PTR SS:[ESP+4],EAX 004157FD . 8D4424 08 LEA EAX,DWORD PTR SS:[ESP+8] 00415801 . 8D8E 88010000 LEA ECX,DWORD PTR DS:[ESI+188] 00415807 . 50 PUSH EAX 00415808 . C64424 1C 02 MOV BYTE PTR SS:[ESP+1C],2 0041580D . E8 914D0300 CALL AntiSpyP.0044A5A3 00415812 . 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4] 00415816 . 51 PUSH ECX 00415817 . 8D8E 98000000 LEA ECX,DWORD PTR DS:[ESI+98] 0041581D . E8 814D0300 CALL AntiSpyP.0044A5A3 00415822 . 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8] //假碼放入edx 00415826 . 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] //註冊名放入eax 0041582A . 52 PUSH EDX //edx 入棧 0041582B . 50 PUSH EAX //eax 入帳 0041582C . E8 4F010000 CALL AntiSpyP.00415980 //關鍵 call!F7 跟進 00415831 . 83C4 08 ADD ESP,8 00415834 . 84C0 TEST AL,AL //呵呵,傳統的比較 00415836 . 74 7D JE SHORT AntiSpyP.004158B5 //跳轉的話就886啦~~ 00415838 . 6A 00 PUSH 0 ; /Arg3 = 00000000 0041583A . 6A 40 PUSH 40 ; |Arg2 = 00000040 0041583C . 68 285C4700 PUSH AntiSpyP.00475C28 ; |Arg1 = 00475C28 ASCII "Registration Successful!" //不跳則註冊成功 00415841 . E8 289C0300 CALL AntiSpyP.0044F46E ; \AntiSpyP.0044F46E 00415846 . 51 PUSH ECX 00415847 . 8D5424 08 LEA EDX,DWORD PTR SS:[ESP+8] 0041584B . 8BCC MOV ECX,ESP 0041584D . 896424 10 MOV DWORD PTR SS:[ESP+10],ESP 00415851 . 52 PUSH EDX 00415852 . E8 D2190300 CALL AntiSpyP.00447229 00415857 . 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10] 0041585B . B9 289C4700 MOV ECX,AntiSpyP.00479C28 00415860 . 50 PUSH EAX 00415861 . E8 CAFEFEFF CALL AntiSpyP.00405730 00415866 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C] 0041586A . E8 451C0300 CALL AntiSpyP.004474B4 0041586F . 51 PUSH ECX 00415870 . 8D5424 0C LEA EDX,DWORD PTR SS:[ESP+C] 00415874 . 8BCC MOV ECX,ESP 00415876 . 896424 10 MOV DWORD PTR SS:[ESP+10],ESP 0041587A . 52 PUSH EDX 0041587B . E8 A9190300 CALL AntiSpyP.00447229 00415880 . 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10] 00415884 . B9 089C4700 MOV ECX,AntiSpyP.00479C08 00415889 . 50 PUSH EAX 0041588A . E8 A1FEFEFF CALL AntiSpyP.00405730 0041588F . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C] 00415893 . E8 1C1C0300 CALL AntiSpyP.004474B4 00415898 . B9 289C4700 MOV ECX,AntiSpyP.00479C28 0041589D . E8 1E000100 CALL AntiSpyP.004258C0 004158A2 . B9 089C4700 MOV ECX,AntiSpyP.00479C08 004158A7 . E8 14000100 CALL AntiSpyP.004258C0 004158AC . 8BCE MOV ECX,ESI 004158AE . E8 C93C0300 CALL AntiSpyP.0044957C 004158B3 . EB 1F JMP SHORT AntiSpyP.004158D4 004158B5 > 6A 44 PUSH 44 004158B7 . 68 64564700 PUSH AntiSpyP.00475664 ; ASCII "AntiSpy PRO" 004158BC . 68 5C5B4700 PUSH AntiSpyP.00475B5C ; ASCII "If you haven't ordered this software yet, please press "yes" to get registration number. If you already have registration number - please press "no" and verify that you entered it correctly and try again" //註冊失敗 004158C1 . 8BCE MOV ECX,ESI 004158C3 . E8 C15A0300 CALL AntiSpyP.0044B389 004158C8 . 83F8 06 CMP EAX,6 004158CB . 75 07 JNZ SHORT AntiSpyP.004158D4 004158CD . 8BCE MOV ECX,ESI 004158CF . E8 4C000000 CALL AntiSpyP.00415920 004158D4 > 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4] 004158D8 . C64424 18 01 MOV BYTE PTR SS:[ESP+18],1 004158DD . E8 D21B0300 CALL AntiSpyP.004474B4 004158E2 . 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8] 004158E6 . C64424 18 00 MOV BYTE PTR SS:[ESP+18],0 004158EB . E8 C41B0300 CALL AntiSpyP.004474B4 004158F0 . C74424 18 FFFF>MOV DWORD PTR SS:[ESP+18],-1 004158F8 . E8 CA070400 CALL AntiSpyP.004560C7 004158FD . 8B48 04 MOV ECX,DWORD PTR DS:[EAX+4] 00415900 . E8 B3310300 CALL AntiSpyP.00448AB8 00415905 . 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10] 00415909 . 5E POP ESI 0041590A . 64:890D 000000>MOV DWORD PTR FS:[0],ECX 00415911 . 83C4 18 ADD ESP,18 00415914 . C3 RETN ----------------------------------------------------------------------------- 進入 41582C 的關鍵 call: 00415980 /$ 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 00415986 |. 6A FF PUSH -1 00415988 |. 68 F8B34500 PUSH AntiSpyP.0045B3F8 0041598D |. 50 PUSH EAX 0041598E |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP 00415995 |. 53 PUSH EBX 00415996 |. 56 PUSH ESI 00415997 |. 57 PUSH EDI 00415998 |. 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C] //註冊名放入edi 0041599C |. B9 D0A54A27 MOV ECX,274AA5D0 //ecx 賦值為 274AA5D0 004159A1 |. 8A07 MOV AL,BYTE PTR DS:[EDI] //取 edi 中的字串 004159A3 |. 84C0 TEST AL,AL //比較是否為0(這裡估計是判斷有沒有輸入註冊名) 004159A5 |. 74 1E JE SHORT AntiSpyP.004159C5 //為0則跳,這裡一定不能跳轉… //計算開始 004159A7 |> 0FBEF0 /MOVSX ESI,AL //al 送 esi,al 中是註冊名 004159AA |. 8BC6 |MOV EAX,ESI //esi 送 eax,註冊名字串送回 eax 004159AC |. BB 11000000 |MOV EBX,11 //ebx=11 004159B1 |. 99 |CDQ //edx雙字擴展(清零) 004159B2 |. F7FB |IDIV EBX //eax=eax/11,餘數放入 edx 004159B4 |. 8BC1 |MOV EAX,ECX //eax = ecx,第一次ecx 為循環前賦的值 274AA5D0,第二次開始為上一次累積的值 004159B6 |. 8BCA |MOV ECX,EDX //ecx=edx,edx 為上面除法運算的餘數 004159B8 |. D3E0 |SHL EAX,CL //邏輯左移cl位,cl 為上面除法運算的餘數,等於 cl 次 *2 運算 004159BA |. 33C6 |XOR EAX,ESI //eax 異或 esi,esi 為註冊名字串的 ASCII 值 004159BC |. 47 |INC EDI //edi+1,edi中是註冊名,所以這是為了下面取下一位的註冊名字串作準備 004159BD |. 8BC8 |MOV ECX,EAX //eax的值放入ecx,留待下次循環使用 004159BF |. 8A07 |MOV AL,BYTE PTR DS:[EDI] //從 edi 中取下一位註冊名的字串 004159C1 |. 84C0 |TEST AL,AL //比較 al 是否為0 004159C3 |.^75 E2 \JNZ SHORT AntiSpyP.004159A7 //不為0就跳回去繼續循環。當取完註冊名字串後的下一次循環時al將為0,故此時才不再循環 //算法結束 //所有循環完成後,eax 中儲存的就是真正的註冊碼。 004159C5 |> 8B15 34744700 MOV EDX,DWORD PTR DS:[477434] ; AntiSpyP.00477448 004159CB |. 895424 1C MOV DWORD PTR SS:[ESP+1C],EDX 004159CF |. 51 PUSH ECX 004159D0 |. 8D4424 20 LEA EAX,DWORD PTR SS:[ESP+20] 004159D4 |. 68 805C4700 PUSH AntiSpyP.00475C80 ; ASCII "%08X" 004159D9 |. 50 PUSH EAX 004159DA |. C74424 20 0000>MOV DWORD PTR SS:[ESP+20],0 004159E2 |. E8 FAF60200 CALL AntiSpyP.004450E1 004159E7 |. 8B4C24 2C MOV ECX,DWORD PTR SS:[ESP+2C] ; | //假碼放入 ecx 004159EB |. 8B5424 28 MOV EDX,DWORD PTR SS:[ESP+28] ; | //真碼放入 edx 004159EF |. 51 PUSH ECX ; |Arg2 004159F0 |. 52 PUSH EDX ; |Arg1 004159F1 |. E8 DC120200 CALL AntiSpyP.00436CD2 ; \AntiSpyP.00436CD2 //比較真假註冊碼 004159F6 |. 83C4 14 ADD ESP,14 004159F9 |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C] 004159FD |. 85C0 TEST EAX,EAX 004159FF |. 0F94C3 SETE BL 00415A02 |. C74424 14 FFFF>MOV DWORD PTR SS:[ESP+14],-1 00415A0A |. E8 A51A0300 CALL AntiSpyP.004474B4 00415A0F |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C] 00415A13 |. 5F POP EDI 00415A14 |. 8AC3 MOV AL,BL 00415A16 |. 5E POP ESI 00415A17 |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX 00415A1E |. 5B POP EBX 00415A1F |. 83C4 0C ADD ESP,0C 00415A22 \. C3 RETN 算法總結如下: 設註冊名位數為n,即有效循環也為n次,存在 N0、N1、N2、N3、N4、N5…其中 N0=274AA5D0,則: N(n)=(N(n-1) shl ((註冊名ASCII) mod 11)) xor (註冊名ASCII) 最後的 N(n) 就是註冊碼 試按照我輸入的註冊名「lovefire[BCG]」,列舉如下, 第一位註冊名「l」,N(1)=(274AA5D0 shl ((6C) mod 11)) xor 6C = (274AA5D0 shl 6) xor 6C = D2A97400 xor 6C = D2A9746C 第二位註冊名「o」,N(2)=(D2A9746C shl ((6F) mod 11)) xor 6F = (D2A9746C shl 9) xor 6F = 52E8D800 xor 6F = 52E8D86F …… 最後一位註冊名「]」,N(12)=(0210025F shl ((5D) mod 11)) xor 5D = (D2A9746C shl 8) xor 5D = 10025F00 xor 5D = 10025F5D 所以得出正確的註冊碼:10025F5D 至此 AntiSpy PRO 1.02 算法分析完成,一組可用的註冊碼:Name: lovefire[BCG] Serial: 10025F5D 註冊信息儲存: [HKEY_LOCAL_MACHINE\SOFTWARE\HT\AntiSpyPRO] "strRegNum"="10025F5D" "strUserName"="lovefire[BCG]" ---------------------------------------------------------- 註冊機來源碼(TC 2.0) /* KeyGen by 炎之川[BCG],2003.4.11 */ /* 感謝hoto兄、菩提兄、小樓兄回答我提的弱智問題^^ */ #include <stdio.h> main() { char name[255]; int name_len,i; unsigned long sn1=0x274AA5D0; clrscr(); /*非tc的C編譯程序可能不能識別此指令*/ printf(" _/_/_/ _/_/_/ _/_/_/\n _/ _/ _/ _/\n _/_/_/ _/ _/ _/_/\n _/ _/ _/ _/ _/\n_/_/_/ _/_/_/ _/_/_/\n\n -= AntiSpy PRO 1.02 KeyGen by lovefire[BCG] =-\n\n\nPlease enter your name: "); gets(name); name_len=strlen(name); if (name_len>0) { for (i=0;i<name_len;i++) { sn1=(sn1<<(name[i]%0x11))^name[i]; } printf("\nok, try this serial: %08lX\n",sn1); printf("\n\nNOTE: serial only for test!"); printf("\nIf you like it, buy it to support the soft's author!"); } else { printf("\nI think you should tell me your name first \n"); } printf("\n\nhave fun^^\nwelcome to http://skipli.yeah.net/"); getch(); } ---------------------------------------------------------- 炎之川 屬於中國破解組織BCG(Beginner's Cracking Group) _/_/_/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/_/_/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/_/_/ _/_/_/ _/_/_/ |
送花文章: 3,
|
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
手腳太慢就沒囉...[90P] | jacky0936 | 網路及生活有趣圖片貼圖區 | 4 | 2005-06-13 10:16 AM |
PRO/E超級技巧 | mic64 | 繪圖軟體應用技術文件 | 3 | 2004-12-17 11:07 AM |