如何破解Multimedia Builder MP3 4.7b (7千字)

看雪資料發表於2001-10-04

如何破解Multimedia Builder MP3 4.7b
軟體簡介:
    多媒體制作軟體,假如你需要製作一些有創作力的多媒體產品,而沒有時間學習如何製作,不妨試
試MMB這種互動式的多媒體制作軟體,MMB能製作互動式多媒體應用產品,容易使用並且操作簡單,能製作的
多媒體產品包含卡片,產品介紹發表,光碟AutoRun選單等。

所需工具:
1.TRW2000
2.W32Dasm
3.運氣 ^_^

正文:
    廢話少說,按照一般的方法,我們可以跟蹤到如下資訊:
:004A19B9 8D755C                  lea esi, dword ptr [ebp+5C]

* Possible StringData Ref from Data Obj ->"@"
                                  |
:004A19BC 681CC45D00              push 005DC41C
:004A19C1 8BCE                    mov ecx, esi
:004A19C3 E866D60A00              call 0054F02E    //判斷名字中是否有@符號存在
:004A19C8 83F8FF                  cmp eax, FFFFFFFF
:004A19CB 7521                    jne 004A19EE
:004A19CD 6A00                    push 00000000
:004A19CF 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Please enter the Name exactly "
                                        ->"as it is stated
in the registration "
                                        ->"e-mail you received."
                                  |
:004A19D1 68BCE05D00              push 005DE0BC
:004A19D6 E814D90B00              call 0055F2EF
:004A19DB 8B4C2424                mov ecx, dword ptr [esp+24]

    名字判斷正確後,來到:
* Possible StringData Ref from Data Obj ->"1-"
                                  |
:004A1B98 6868C55D00              push 005DC568
:004A1B9D 8D4C2428                lea ecx, dword ptr [esp+28]

* Possible Ref to Menu: MenuID_0075, Item: "Close"
                                  |
:004A1BA1 C744241C01000000        mov [esp+1C], 00000001
:004A1BA9 E880D40A00              call 0054F02E  //判斷註冊號起始是否為“1-”
:004A1BAE 85C0                    test eax, eax
:004A1BB0 752D                    jne 004A1BDF

    繼續走,來到:
:004A1BDF 55                      push ebp
:004A1BE0 56                      push esi
:004A1BE1 57                      push edi

* Possible StringData Ref from Data Obj ->"-"
                                  |
:004A1BE2 6828B55D00              push 005DB528
:004A1BE7 8D4C2434                lea ecx, dword ptr [esp+34]
:004A1BEB E83ED40A00              call 0054F02E    //判斷註冊號後面是否含有“-”
:004A1BF0 8B0D7CCF5E00            mov ecx, dword ptr [005ECF7C]
:004A1BF6 8BF0                    mov esi, eax
:004A1BF8 894C2410                mov dword ptr [esp+10], ecx
:004A1BFC 83FEFF                  cmp esi, FFFFFFFF
:004A1BFF C644242403              mov [esp+24], 03
:004A1C04 7E59                    jle 004A1C5F

    名字和註冊號格式的判斷到此為止,我們可以知道序列號的格式應該是:
    1-xxxxxx-yyyy
    下面來到關鍵比較:
:004A1CBD 8A1438                  mov dl, byte ptr [eax+edi//eax+edi指向我們輸入的序列號的
                                    1-xxxxxx部分
:004A1CC0 88542418                mov byte ptr [esp+18], dl
:004A1CC4 8B542418                mov edx, dword ptr [esp+18]
:004A1CC8 81E2FF000000            and edx, 000000FF
:004A1CCE 03F2                    add esi, edx              //ASCII碼相加
:004A1CD0 40                      inc eax
:004A1CD1 3BC1                    cmp eax, ecx
:004A1CD3 7CE8                    jl 004A1CBD

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004A1CBB(C)
|
:004A1CD5 5F                      pop edi
:004A1CD6 3BF5                    cmp esi, ebp    //ebp中的值就是序列號中的yyyy,和上面計算
                            出來的和進行比較
:004A1CD8 5E                      pop esi
:004A1CD9 5D                      pop ebp
:004A1CDA C644241803              mov [esp+18], 03
:004A1CDF 8D4C2400                lea ecx, dword ptr [esp]
:004A1CE3 7548                    jne 004A1D2D  //bad guy!
    跟蹤到這裡,假設一個序列號:
    Name: luoyi@263.net
    Code: 1-98765-369
    輸入,回車。沒有出錯提示。資訊視窗顯示:Registed to: luoyi@263.net
    成功了?
    別急,點選單:Project-->Run
    看到沒有?“Created with unregisted version of Multimedia Builder”!
    做出來的東西如果帶著這麼一個標記?是不是很醜?呵呵……
    怎麼辦?bpm?bpr?
    看看未註冊資訊與眾不同的地方:黃色的背景色!熟悉Windows程式設計的馬上就會想到:
    SetBkColor!對!我們就用SetBkColor設斷!
    bpx setbkcolor if (*(esp+8)==0000ffff) //顏色為黃色:Red=255,Green=255,Blue=0
    繼續點選選單,boom!被TRW2000攔下,pmodule,來到如下地點:
:0055A485 FF74240C                push [esp+0C]
:0055A489 56                      push esi
:0055A48A FFD7                    call edi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0055A483(C)
|
:0055A48C 5F                      pop edi
:0055A48D 5E                      pop esi
:0055A48E C20400                  ret 0004
    F12出去,看到:
:004B33AC E883750A00              call 0055A934

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B3329(C)
|
:004B33B1 81BE90030000CA380400    cmp dword ptr [esi+00000390], 000438CA
:004B33BB 0F848B010000            je 004B354C
:004B33C1 8B157CCF5E00            mov edx, dword ptr [005ECF7C]
:004B33C7 89542410                mov dword ptr [esp+10], edx

* Possible StringData Ref from Data Obj ->"!thhqjwE$fjfhqnunxQ%gq#rtjuui{!fhvjuulkjspx$mu"
                                        ->"kz$ifvdiwD""
                                  |
:004B33CB 68D4305E00              push 005E30D4
:004B33D0 8D4C2414                lea ecx, dword ptr [esp+14]
:004B33D4 C684249000000002        mov byte ptr [esp+00000090], 02
:004B33DC E887390A00              call 00556D68
:004B33E1 68FFFF0000              push 0000FFFF
:004B33E6 8D4C2448                lea ecx, dword ptr [esp+48]
:004B33EA E873700A00              call 0055A462
:004B33EF 53                      push ebx
:004B33F0 8D4C2448                lea ecx, dword ptr [esp+48]
:004B33F4 E850710A00              call 0055A549
:004B33F9 895C2440                mov dword ptr [esp+40], ebx
:004B33FD C744243C84275B00        mov [esp+3C], 005B2784
    那一大堆亂七八糟的字串參考就是“Created with unregisted version of
    Multimedia Builder”的密文。很明顯,比較處在:
:004B33B1 81BE90030000CA380400    cmp dword ptr [esi+00000390], 000438CA
        看看[esi+390]裡頭放了什麼東西?1864fH=99919D
    莫名其妙,看不出和我們輸入的序列號有什麼聯絡,你想找到他的來源?好,一層層的往外剝,結
    果還是一無所獲。
    現在知道我為什麼把“運氣”列為第3個工具了吧?如果不是今天我運氣好,可能這個軟體就搞不定
    了!運氣是什麼呢?接著往下看:
    讓我們改變一下序列號,然後看看改變以後[esi+390]中存放的值有何變化:

    序列號                      [esi+390]
      1-98765-369                      99919
      1-98766-370                      99920
      1-98775-370                      99929
      1-98865-370                      100019
      1-99765-370                      100919
      1-88765-368                      89919

      還需要更詳細的說明嗎?規律很明顯了,至於99919和98765中間所差的那1154,相信你也應該能猜到
      了――對!就是luoyi@263.net字串各字元ASCII碼的和!
      憑藉著好運氣,找到了演算法,可是序號產生器的編寫就沒什麼運氣了。老老實實的一句句的寫:
     
      檔名:mmb.c
      編譯環境:turbo c 2.0
      編譯方法:直接在整合開發環境裡Make EXE就成功了!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
unsigned long sum;
int i;
char sn[20]={"1-"},temp3[2]={"-"};
static char temp1[10],temp2[10],name[20];
again: puts("Please Input Your Name:\n");
gets(name);
if (!strchr(name,'@'))
    {
    puts("Name Must Include '@'!");
    goto again;
    }
for (i=0,sum=0;i<strlen(name);i++) sum+=name[i];
ultoa(276682-sum,temp1,10);
strcat(sn,temp1);
sum=0;i=0;
while(sn[i])
    {
    sum+=sn[i];
    i++;
    }
ultoa(sum,temp2,10);
strcat(sn,temp3);
strcat(sn,temp2);
printf("Your RegCode Is:%s",sn);

}

    說真的,真希望以後每次都能有這麼好的運氣!

相關文章