簡單算法:迷你網路電視算法分析
【軟體名稱】:迷你網路電視 v5.3
【下載位址】:http://www.web-checker.com/gb/tvsetup.exe 【軟體大小】:1.04MB 【軟體簡介】:迷你網路電視內含155個視瀕頻道和140個廣播頻道.包括許多精彩的國外影視瀕道和新聞頻道,能讓您的電腦成為具備電視機和收音機的所有功能. 未註冊用戶可以收看35個電視瀕道和40個電台廣播。 【軟體限制】:使用限制 【破解作者】:仙劍太郎 【作者宣告】:破解只為學習和興趣,無其它目的。第一次寫算法的文章哦,失誤之處還請諸位大俠賜教! 【破解工具】:FileInfo 3.01,W32dasm 9.0,OllyDbg 1.09C 漢化版 ====================================================== 【分析程序】: 簡單算法:迷你網路電視算法分析 執行迷你網路電視,點擊註冊,顯示我的機器碼是38068421,HEX即為244E0C5,隨便輸入註冊碼,這裡輸入123456789,HEX為75BCD15作為假註冊碼. 用w32dasm的串式字串參考,找到"迷你網路電視-註冊版",然後向上看,00402274是關鍵跳轉(若在這裡暴破,執行時顯示是註冊版,但電視台的表單依然不可用,所以另想辦法),用OllyDbg在0040226D關鍵CALL處下斷點,F7跟入 ;====================================================== :0040224A FF431C inc [ebx+1C] :0040224D 8B10 mov edx, dword ptr [eax] :0040224F 8B86F4020000 mov eax, dword ptr [esi+000002F4] :00402255 E89AC20B00 call 004BE4F4 :0040225A FF4B1C dec [ebx+1C] :0040225D 8D856CFFFFFF lea eax, dword ptr [ebp+FFFFFF6C] :00402263 BA02000000 mov edx, 00000002 :00402268 E8F7A70F00 call 004FCA64 :0040226D E886340000 call 004056F8 ;關鍵CALL,跟入 :00402272 84C0 test al, al ;測試標誌位 :00402274 7448 je 004022BE ;跳就完了 :00402276 33D2 xor edx, edx :00402278 8B8618030000 mov eax, dword ptr [esi+00000318] :0040227E E8C5770800 call 00489A48 :00402283 66C74310C800 mov [ebx+10], 00C8 * Possible StringData Ref from Data Obj ->"迷你網路電視-註冊版" | :00402289 BA52035300 mov edx, 00530352 :0040228E 8D8568FFFFFF lea eax, dword ptr [ebp+FFFFFF68] :00402294 E8FBA60F00 call 004FC994 :00402299 FF431C inc [ebx+1C] :0040229C 8B10 mov edx, dword ptr [eax] :0040229E 8B86F0020000 mov eax, dword ptr [esi+000002F0] :004022A4 E827C00300 call 0043E2D0 :004022A9 FF4B1C dec [ebx+1C] :004022AC 8D8568FFFFFF lea eax, dword ptr [ebp+FFFFFF68] :004022B2 BA02000000 mov edx, 00000002 :004022B7 E8A8A70F00 call 004FCA64 :004022BC EB56 jmp 00402314 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00402274(C) | :004022BE 66C74310D400 mov [ebx+10], 00D4 * Possible StringData Ref from Data Obj ->"迷你網路電視-未註冊版" | :004022C4 BA66035300 mov edx, 00530366 :004022C9 8D8564FFFFFF lea eax, dword ptr [ebp+FFFFFF64] :004022CF E8C0A60F00 call 004FC994 :004022D4 FF431C inc [ebx+1C] :004022D7 8B10 mov edx, dword ptr [eax] :004022D9 8B86F0020000 mov eax, dword ptr [esi+000002F0] :004022DF E8ECBF0300 call 0043E2D0 :004022E4 FF4B1C dec [ebx+1C] :004022E7 8D8564FFFFFF lea eax, dword ptr [ebp+FFFFFF64] :004022ED BA02000000 mov edx, 00000002 :004022F2 E86DA70F00 call 004FCA64 :004022F7 6A01 push 00000001 ;=============================================================== ;從0040226D跟入後來到這裡 004056F8 /$ BA 78785400 MOV EDX,nettvprj.00547878 004056FD |. FF02 INC DWORD PTR DS:[EDX] 004056FF |. 8302 09 ADD DWORD PTR DS:[EDX],9 00405702 |. 33C0 XOR EAX,EAX 00405704 |> FF02 /INC DWORD PTR DS:[EDX] ;這裡循環次數為25=37次 00405706 |. 2902 |SUB DWORD PTR DS:[EDX],EAX 00405708 |. 40 |INC EAX 00405709 |. 83F8 25 |CMP EAX,25 ;這個循環有什麼用??不知道~ 0040570C |.^7C F6 \JL SHORT nettvprj.00405704 ;按F8三十七次,注意別按過頭了 0040570E |. E8 EDFEFFFF CALL nettvprj.00405600 ;來到這個CALL,跟入 00405713 \. C3 RETN ;=============================================================== ;從0040570E跟入後來到這裡,這才是算法的關鍵: 00405600 /$ 53 PUSH EBX 00405601 |. 56 PUSH ESI 00405602 |. 57 PUSH EDI 00405603 |. 55 PUSH EBP 00405604 |. 803D A8025300 >CMP BYTE PTR DS:[5302A8],0 ;機器碼標誌是否為0? 0040560B |. 75 32 JNZ SHORT nettvprj.0040563F ;不為0,跳到0040563F;為0,重新電腦器碼 0040560D |. 68 39300000 PUSH 3039 ;機器碼計算程序 00405612 |. E8 519D1200 CALL <JMP.&MC.fnMc> 00405617 |. 59 POP ECX 00405618 |. 8BD0 MOV EDX,EAX 0040561A |. C1E0 03 SHL EAX,3 0040561D |. 2BC2 SUB EAX,EDX 0040561F |. 8D0482 LEA EAX,DWORD PTR DS:[EDX+EAX*4] 00405622 |. 05 0FCD7F00 ADD EAX,7FCD0F 00405627 |. B9 1F000000 MOV ECX,1F 0040562C |. 99 CDQ 0040562D |. F7F9 IDIV ECX 0040562F |. 05 0FCD7F00 ADD EAX,7FCD0F 00405634 |. A3 A4025300 MOV DWORD PTR DS:[5302A4],EAX 00405639 |. FE05 A8025300 INC BYTE PTR DS:[5302A8] 0040563F |> 8B1D A4025300 MOV EBX,DWORD PTR DS:[5302A4] ;取機器碼入EBX 00405645 |. A1 A0025300 MOV EAX,DWORD PTR DS:[5302A0] ;這裡EBX為機器碼HEX值 0040564A |. A3 74785400 MOV DWORD PTR DS:[547874],EAX 0040564F |. 8BC3 MOV EAX,EBX 00405651 |. 99 CDQ 00405652 |. B9 1F000000 MOV ECX,1F ;1F=31入ECX 00405657 |. F7F9 IDIV ECX ;機器碼244E0C5除以1F=12BCED入EAX 00405659 |. 8BE8 MOV EBP,EAX ;EBP=EAX=12BCED 0040565B |. 8BC3 MOV EAX,EBX 0040565D |. 99 CDQ 0040565E |. B9 07000000 MOV ECX,7 ;ECX=7 00405663 |. F7F9 IDIV ECX ;機器碼244E0C5除以7=52FB89作為原始註冊碼入EAX 00405665 |. FF05 A0025300 INC DWORD PTR DS:[5302A0] 0040566B |. FF05 A0025300 INC DWORD PTR DS:[5302A0] 00405671 |. C605 8C025300 >MOV BYTE PTR DS:[53028C],0 00405678 |. 8BF0 MOV ESI,EAX ;EAX=ESI=52FB89 0040567A |. A1 A0025300 MOV EAX,DWORD PTR DS:[5302A0] 0040567F |. 0105 74785400 ADD DWORD PTR DS:[547874],EAX 00405685 |. FF05 A0025300 INC DWORD PTR DS:[5302A0] 0040568B |. 8B3D 90025300 MOV EDI,DWORD PTR DS:[530290] ;位址530290為假註冊碼 00405691 |. B9 01000000 MOV ECX,1 ;啟始化記數器 00405696 |. EB 0B JMP SHORT nettvprj.004056A3 00405698 |> 03F1 /ADD ESI,ECX ;循環開始,ECX=1,原始註冊碼累加 0040569A |. FF05 74785400 |INC DWORD PTR DS:[547874] 004056A0 |. 2BF9 |SUB EDI,ECX ;EDI為假註冊碼,遞減 004056A2 |. 41 |INC ECX ;記數器加1 004056A3 |> 8BC3 MOV EAX,EBX ;上面00405696直接跳轉到這裡,所以循環次數為1F-1=1E即30次 004056A5 |. 99 |CDQ 004056A6 |. F7FD |IDIV EBP ;機器碼244E0C5除以12BCED=1F作為循環次數 004056A8 |. 3BC8 |CMP ECX,EAX ;記數器是否等於循環次數? 004056AA |.^7C EC \JL SHORT nettvprj.00405698 ;循環 004056AC |. 3BF7 CMP ESI,EDI ;這裡就是比較,記憶體註冊機在這裡做,得到的數要加上465 004056AE |. 75 1D JNZ SHORT nettvprj.004056CD 【分析總結】: 註冊碼儲存在Windows目錄下的mntv.ini文件中。 記憶體註冊機: 中斷位址:40226D 次數:1 指令:E8 長度:5 中斷位址:40570E 次數:1 指令:E8 長度:5 中斷位址:4056AC 次數:1 指令:3B 長度:2 暫存器方式->ESI->十進制 得到的數值再加上465即為註冊碼 【算法分析】: 機器碼244E0C5/1F=12BCED作為被除數 然後再用機器碼244E0C5/12BCED=1F作為循環次數 機器碼244E0C5/7=52FB89作為註冊碼原始數值 通過1F-1=1E兩次的累加,即1+2+3+4....+1D+1E=1D1,則原始註冊碼+1D1*2(即十進制465)為正確註冊碼. 用VB寫個註冊機,Text1為機器碼,Text2為註冊碼 ------------------------ Dim ESI As Long ESI = Int(Val(Text1.Text) / 7) For i = 1 To Int(Val(Text1.Text) / 1228013) - 1 ESI = ESI + i * 2 Next i Text2.Text = ESI ------------------------ 仙劍太郎 http://cnokweb.yeah.net |
太神奇了
看不懂 喝喝 |
所有時間均為台北時間。現在的時間是 06:12 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *