(原創)叮咚極品網路電視電影III V3.92-----演算法分析

看雪資料發表於2004-05-28

這篇文章是我前兩天寫的,本來沒有發表在這裡的意思,畢竟這種文章對於高手們來說簡直不屑一顧,但我發現這裡有好多想入門和想學破解的朋友急於希望能看到一些對自己有幫助的文章,所以我才獻醜發表在這裡,畢竟我也是菜鳥所以很理解那些朋友的心情,讓大家見笑了。
假如我的這篇文章對你哪怕有一點點幫助,那我的目的也就達到了。


==================================================================================
【工程作者】深海遊俠
【作者郵箱】shenhaiyouxia@163.com
==================================================================================
【軟體名稱】叮咚極品網路電視電影III V3.92 
【下載地址】http://www1.skycn.com/soft/16782.html
【所受限制】功能限制
【加殼保護】ASPack加殼
【軟體介紹】
軟體大小:  1052 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 網路電視
應用平臺:  Win9x/NT/2000/XP
介面預覽:  無
加入時間:  2004-05-25 21:58:32
下載次數:  4725

中國線上電視電影數量第一位的軟體!追求穩定、高速的網路電視電影軟體!
彙集國內、外、港澳臺300多家電視臺以及精彩的明星寫真,精彩電影,學習影片、動聽音樂、遊戲動畫等,同時收集了許多當今國內、外最酷、最流行的上百套音樂和外語廣播電臺節目。本軟體最注重節目質量,專用伺服器提供熱點影視,節目收看率極高。 
1、提供超過幾百套超高畫質晰的衛星電視節目,高速HBO大片,BBC新聞,日本MM、港臺鳳凰、華娛、星空、TVB系列,國內中央及各省衛星電視節目 。
2、提供境內外廣播、特別影視、精彩實況、線上電影,線上音樂,精彩動畫、時尚寫真、遊戲等。 
3、採用\"智慧鏈\"技術,內建多種加速引擎,智慧分析網路狀態追尋最佳速度方案 
4、小巧玲瓏,以實用為本,啟動快速,佔用系統資源極少,不產生垃圾檔案! 不修改登錄檔系統! 
5、專業人員每天更新電視電影資料,釋出前經過嚴格測試,確保每個節目有效,回報註冊使用者 。

==================================================================================
【工程平臺】WIN ME
【除錯工具】Ollydbg  W32DASM  FI 2.5  WINDOWS自帶計算器
【脫殼方式】專用工具脫殼
==================================================================================
【破解過程】
因為今天心情煩悶,新買的麥居然用不了,看來明天還要跑趟商店換換哈。想看電視又怕影響到家人,沒辦法去下個網路電視吧,沒想到限制多多,於是就想研究起這方面的軟體演算法來,這類軟體最近不是很火的嘛:)好拉廢話不多說開始我們的破解旅程!!

查殼 ASPACK 2.12,脫之→Borland Delphi 6.0 - 7.0。用偶最熟悉的TRW2000載入,恩?非法。暈系統死瑣,從起再試還是不行,不知道是不是我機器的問題,沒辦法只好用我最不擅長的OD了。沒想到這東西這麼方面。
W32DASM載入程式,找到關鍵爆點 4D4E75,在他前面的地方下斷點,F9執行輸入使用者名稱:cxxx 假碼:121212.程式斷在這裡:

004D4E01   .  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D4E07   .  E8 D87AF6FF   CALL UNPACKED.0043C8E4           
004D4E0C   .  837D FC 00    CMP DWORD PTR SS:[EBP-4],0            ------->是否輸入註冊碼?
004D4E10   .  74 14         JE SHORT UNPACKED.004D4E26            ------->沒,那再見。
004D4E12   .  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
004D4E15   .  8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004D4E1B   .  E8 C47AF6FF   CALL UNPACKED.0043C8E4
004D4E20   .  837D F8 00    CMP DWORD PTR SS:[EBP-8],0            -------->是否輸入使用者名稱?
004D4E24      75 35         JNZ SHORT UNPACKED.004D4E5B           -------->沒?那再見。跳下去。
004D4E26   >  A1 20D34D00   MOV EAX,DWORD PTR DS:[4DD320]
004D4E2B   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
004D4E2D   .  E8 266BF8FF   CALL UNPACKED.0045B958
004D4E32   .  6A 00         PUSH 0
004D4E34   .  B9 CC4F4D00   MOV ECX,UNPACKED.004D4FCC
004D4E39   .  BA D44F4D00   MOV EDX,UNPACKED.004D4FD4
004D4E3E   .  A1 20D34D00   MOV EAX,DWORD PTR DS:[4DD320]
004D4E43   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
004D4E45   .  E8 4E7CF8FF   CALL UNPACKED.0045CA98
004D4E4A   .  A1 20D34D00   MOV EAX,DWORD PTR DS:[4DD320]
004D4E4F   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
004D4E51   .  E8 126BF8FF   CALL UNPACKED.0045B968
004D4E56   .  E9 32010000   JMP UNPACKED.004D4F8D
004D4E5B   >  33C0          XOR EAX,EAX                      
004D4E5D   .  55            PUSH EBP
004D4E5E   .  68 7C4F4D00   PUSH UNPACKED.004D4F7C
004D4E63   .  64:FF30       PUSH DWORD PTR FS:[EAX]
004D4E66   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
004D4E69   .  A1 00EF4D00   MOV EAX,DWORD PTR DS:[4DEF00]
004D4E6E   .  E8 2DFEFFFF   CALL UNPACKED.004D4CA0           -------->演算法CALL,跟進!
004D4E73   .  84C0          TEST AL,AL
004D4E75   .  0F84 BA000000 JE UNPACKED.004D4F35             -------->剝破這裡即可。(我想你不會只爆他吧:))
004D4E7B   .  B8 0C504D00   MOV EAX,UNPACKED.004D500C
004D4E80   .  E8 3B15F6FF   CALL UNPACKED.004363C0           -------->成功之門
004D4E85   .  B2 01         MOV DL,1
004D4E87   .  A1 0C0E4600   MOV EAX,DWORD PTR DS:[460E0C]
004D4E8C   .  E8 7BC0F8FF   CALL UNPACKED.00460F0C
004D4E91   .  8BF0          MOV ESI,EAX
004D4E93   .  BA 02000080   MOV EDX,80000002
004D4E98   .  8BC6          MOV EAX,ESI
004D4E9A   .  E8 0DC1F8FF   CALL UNPACKED.00460FAC
004D4E9F   .  B1 01         MOV CL,1
004D4EA1   .  BA 20504D00   MOV EDX,UNPACKED.004D5020                ;  ASCII "Software\dingdongsoft\ddnettviii"   不用我說也知道這個是成功後的標誌吧。
004D4EA6   .  8BC6          MOV EAX,ESI


演算法CALL:
004D4E6E   .  E8 2DFEFFFF   CALL UNPACKED.004D4CA0
|
004D4CA0  /$  55            PUSH EBP
004D4CA1  |.  8BEC          MOV EBP,ESP
004D4CA3  |.  B9 05000000   MOV ECX,5
004D4CA8  |>  6A 00         /PUSH 0
004D4CAA  |.  6A 00         |PUSH 0
004D4CAC  |.  49            |DEC ECX
004D4CAD  |.^ 75 F9         \JNZ SHORT UNPACKED.004D4CA8
004D4CAF  |.  51            PUSH ECX
004D4CB0  |.  53            PUSH EBX
004D4CB1  |.  56            PUSH ESI
004D4CB2  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
004D4CB5  |.  33C0          XOR EAX,EAX
004D4CB7  |.  55            PUSH EBP
004D4CB8  |.  68 CE4D4D00   PUSH UNPACKED.004D4DCE
004D4CBD  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004D4CC0  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004D4CC3  |.  33F6          XOR ESI,ESI
004D4CC5  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
004D4CC8  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004D4CCB  |.  8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
004D4CD1  |.  E8 0E7CF6FF   CALL UNPACKED.0043C8E4
004D4CD6  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]         ------->出現敵情。(機器碼)
004D4CD9  |.  E8 AAFCF2FF   CALL UNPACKED.00404988
004D4CDE  |.  8BD8          MOV EBX,EAX
004D4CE0  |.  85DB          TEST EBX,EBX
004D4CE2  |.  7E 43         JLE SHORT UNPACKED.004D4D27          ------->一定不會跳吧。
004D4CE4  |.  C745 F8 01000>MOV DWORD PTR SS:[EBP-8],1
004D4CEB  |>  8D45 F0       /LEA EAX,DWORD PTR SS:[EBP-10]
004D4CEE  |.  50            |PUSH EAX
004D4CEF  |.  8D55 EC       |LEA EDX,DWORD PTR SS:[EBP-14]
004D4CF2  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004D4CF5  |.  8B80 0C030000 |MOV EAX,DWORD PTR DS:[EAX+30C]
004D4CFB  |.  E8 E47BF6FF   |CALL UNPACKED.0043C8E4
004D4D00  |.  8B45 EC       |MOV EAX,DWORD PTR SS:[EBP-14]       ------->EAX為機器碼,又出現一遍。
004D4D03  |.  B9 01000000   |MOV ECX,1
004D4D08  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]
004D4D0B  |.  E8 D0FEF2FF   |CALL UNPACKED.00404BE0
004D4D10  |.  8B45 F0       |MOV EAX,DWORD PTR SS:[EBP-10]
004D4D13  |.  E8 68FEF2FF   |CALL UNPACKED.00404B80
004D4D18  |.  8A00          |MOV AL,BYTE PTR DS:[EAX]            -------->機器碼第一位變成ASCII形式入AL,
004D4D1A  |.  25 FF000000   |AND EAX,0FF                         -------->只留前兩為。EAX=機器碼第一位
004D4D1F  |.  03F0          |ADD ESI,EAX                         -------->ESI=ESI+EAX,累加用。
004D4D21  |.  FF45 F8       |INC DWORD PTR SS:[EBP-8]
004D4D24  |.  4B            |DEC EBX                             -------->EBX充當計數器。
004D4D25  |.^ 75 C4         \JNZ SHORT UNPACKED.004D4CEB         -------->沒全部累加?繼續。
004D4D27  |>  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
004D4D2A  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004D4D2D  |.  8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004D4D33  |.  E8 AC7BF6FF   CALL UNPACKED.0043C8E4
004D4D38  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]        -------->出現我們輸入的加碼,當沒看見:)
004D4D3B  |.  50            PUSH EAX                             -------->壓棧了,看來是用於下面比較了。
004D4D3C  |.  8BC6          MOV EAX,ESI                          -------->ESI入EAX,此時ESI為機器碼累加結果。
004D4D3E  |.  B9 1C000000   MOV ECX,1C                           -------->ECX=1C
004D4D43  |.  99            CDQ
004D4D44  |.  F7F9          IDIV ECX                             -------->EAX/ECX,商入EAX,餘入EDX。
004D4D46  |.  8D55 E0       LEA EDX,DWORD PTR SS:[EBP-20]
004D4D49  |.  E8 8243F3FF   CALL UNPACKED.004090D0               -------->這個CALL著實讓我費了好大力氣跟,結果眼都花了都沒有結果,最後看了下規律才知道是把剛才的計算記過轉為10進位制。(算出註冊碼第一部分)
004D4D4E  |.  FF75 E0       PUSH DWORD PTR SS:[EBP-20]
004D4D51  |.  8D55 DC       LEA EDX,DWORD PTR SS:[EBP-24]
004D4D54  |.  8BC6          MOV EAX,ESI                          -------->累加結果再入EAX
004D4D56  |.  C1E0 05       SHL EAX,5                            -------->EAX邏輯左移5位,EAX=EAX*32
004D4D59  |.  2BC6          SUB EAX,ESI                          -------->EAX=EAX-ESI
004D4D5B  |.  E8 7043F3FF   CALL UNPACKED.004090D0               -------->EAX結果轉為10進位制,(註冊碼第二部分)
004D4D60  |.  FF75 DC       PUSH DWORD PTR SS:[EBP-24]
004D4D63  |.  8D55 D8       LEA EDX,DWORD PTR SS:[EBP-28]
004D4D66  |.  8D86 BE070000 LEA EAX,DWORD PTR DS:[ESI+7BE]       -------->不要被迷惑,其實就是EAX=ESI+7BE.(註冊碼第三部分)
004D4D6C  |.  E8 5F43F3FF   CALL UNPACKED.004090D0               -------->結果轉為10進位制,(註冊碼第三部分)
004D4D71  |.  FF75 D8       PUSH DWORD PTR SS:[EBP-28]
004D4D74  |.  8D55 D4       LEA EDX,DWORD PTR SS:[EBP-2C]
004D4D77  |.  69C6 BC000000 IMUL EAX,ESI,0BC                     -------->EAX=ESI*0BC
004D4D7D  |.  83C0 02       ADD EAX,2                            -------->EAX=EAX+2
004D4D80  |.  E8 4B43F3FF   CALL UNPACKED.004090D0               -------->結果轉為10進位制,(註冊碼第四部分)
004D4D85  |.  FF75 D4       PUSH DWORD PTR SS:[EBP-2C]
004D4D88  |.  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
004D4D8B  |.  BA 04000000   MOV EDX,4
004D4D90  |.  E8 B3FCF2FF   CALL UNPACKED.00404A48               -------->把四部分連線起來。
004D4D95  |.  8B55 E4       MOV EDX,DWORD PTR SS:[EBP-1C]        -------->記憶體序號產生器的位置!
004D4D98  |.  58            POP EAX
004D4D99  |.  E8 2EFDF2FF   CALL UNPACKED.00404ACC               -------->比較CALL,有興趣的朋友可以跟進看看,我是沒心情了。
004D4D9E  |.  75 04         JNZ SHORT UNPACKED.004D4DA4          -------->關鍵跳
004D4DA0  |.  B3 01         MOV BL,1                             -------->關鍵的鑰匙啊,用與下面使AL=1,大關鍵跳才能過關。
004D4DA2  |.  EB 02         JMP SHORT UNPACKED.004D4DA6
004D4DA4  |>  33DB          XOR EBX,EBX
004D4DA6  |>  33C0          XOR EAX,EAX
004D4DA8  |.  5A            POP EDX
004D4DA9  |.  59            POP ECX
004D4DAA  |.  59            POP ECX
004D4DAB  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004D4DAE  |.  68 D54D4D00   PUSH UNPACKED.004D4DD5
004D4DB3  |>  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
004D4DB6  |.  BA 05000000   MOV EDX,5
004D4DBB  |.  E8 34F9F2FF   CALL UNPACKED.004046F4
004D4DC0  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
004D4DC3  |.  BA 04000000   MOV EDX,4
004D4DC8  |.  E8 27F9F2FF   CALL UNPACKED.004046F4
004D4DCD  \.  C3            RETN
004D4DCE   .^ E9 81F2F2FF   JMP UNPACKED.00404054
004D4DD3   .^ EB DE         JMP SHORT UNPACKED.004D4DB3
004D4DD5   .  8BC3          MOV EAX,EBX                         -------->就是這裡拉。EAX=1就可以看電視拉!!
004D4DD7   .  5E            POP ESI
004D4DD8   .  5B            POP EBX
004D4DD9   .  8BE5          MOV ESP,EBP
004D4DDB   .  5D            POP EBP
004D4DDC   .  C3            RETN


1>演算法總結:
1)必須輸入使用者名稱和註冊碼。(廢話)

2)機器碼轉為ASCII碼然後累加,累加結果入ESI用於下面運算。

3)算註冊碼第一部分:
EAX=ESI/1C
結果轉為10進位制。

4)算註冊碼第二部分:
EAX=ESI*32-ESI
結果轉為10進位制。

5)算註冊碼第三部分:
EAX=ESI+7BE
結果......

6)算註冊碼第四部分:
EAX=ESI*0BC+2
結果......

7)合併註冊碼四個部分。


2>例項運算:
我的機器碼是306650343,轉為ASCII碼累加後的結果是1CE.

         註冊碼第一部分    註冊碼第二部分    註冊碼第三部分    註冊碼第四部分

運算:    1CE/1C=10         1CE*20-1CE=37F2    1CE+7BE=98C      1CE*BC+2=1534A

註冊碼:       16              14322             2444              86858


看到了麼?最後把註冊碼連起來就是了:1614322244486858

3)記憶體序號產生器:
中斷地址:4D4D98
中斷次數:1
第一位元組:58
位元組長度:1
暫存器:EDX

4)VB序號產生器:
我已經編寫出來,但因為是國產軟體所以不公開了。畢竟我們只為技術。

5)恢復註冊辦法:
HKEY_LOCAL_MACHINE\SOFTWARE\dingdongsoft\ddnettviii\ddnettviiisn: "1614322244486858"
HKEY_LOCAL_MACHINE\SOFTWARE\dingdongsoft\ddnettviii\user: "cxxx"
刪除以上兩個鍵值後面的數值即可。


破後感評:
累啊,終於寫完了,計算過程可都是偶用計算器算的哦。
也許高手們看了這篇文章會覺的羅嗦,其實我寫這篇文章的主要目的是希望更多朋友能趕快找到演算法的入門,畢竟問題不是理所當然來的,當然我也是菜鳥就更身有體會了。
如果你能在這篇文章學到些東西,那我的目的也就達到了。
外邊還在淅瀝的下著小雨,看著漸明的天空,感慨又一個破解之夜過去了,但我不會後悔的!

                                                                    ----------深海遊俠
                                                                    ----------2004.5.27凌晨

相關文章