MIDI軟體COMPOSER2.0暴破

看雪資料發表於2002-01-14


這個軟體是MID修改和編輯用的,不註冊不能存檔,所以要破.用TRW2000,W32DSM,HIEW三種兵器.
點註冊,在兩個空行裡填入自己的信箱和一組自編的密碼,執行TRW2000,下斷,最普通的HMEMCPY就可以了,GO之後,回到程式介面,點註冊,被斷,直接用BC *,PMODULE,再次來到程式領空,一下子就到了,不用按F12,按一下就出錯了.程式程式碼如下:

:0040435B 6804010000              push 00000104
按F10走.
:00404360 68C1EB4100              push 0041EBC1

* Possible Reference to Dialog: DialogID_03E7, CONTROL_ID:03FC, ""
                                 |
:00404365 68FC030000              push 000003FC
:0040436A 53                      push ebx

* Reference To: USER32.GetDlgItemTextA, Ord:0000h
                                 |
:0040436B E8CA980100              Call 0041DC3A  
來到下面這個CALL.
:00404370 E8DBF6FFFF              call 00403A50  
注意這個CALL,下面有比較,有跳轉,說明有問題.按F8進入:
* Possible StringData Ref from Data Obj ->"鐿溧痤?
                                 |
:00403A55 B8CBF64100              mov eax, 0041F6CB
:00403A5A BAC1EB4100              mov edx, 0041EBC1  
這裡下D 0041EBC1可以看到自己剛才輸入的註冊碼,那麼上面的0041F6CB裡的亂七八糟的東西就可能是真正的註冊碼了.但是我看不出來是什麼.還請高手指點.往下走是比比跳跳.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A79(C)
|
:00403A5F 8A08                    mov cl, byte ptr [eax]
:00403A61 3A0A                    cmp cl, byte ptr [edx]
:00403A63 7516                    jne 00403A7B
程式在這裡顯示要跳,因為上面的比較肯定不相等.當然如果不跳就會註冊成功的.所以在這裡就可以下手了.不過改這裡的話下面的JE也得改,不如讓它走下去,直接跳到00403A7B處再改.
 {:00403A65 84C9                    test cl, cl
 :00403A67 743C                    je 00403AA5  (注意)
 :00403A69 8A4801                  mov cl, byte ptr [eax+01]
 :00403A6C 3A4A01                  cmp cl, byte ptr [edx+01]
 :00403A6F 750A                    jne 00403A7B
 :00403A71 83C002                  add eax, 00000002
 :00403A74 83C202                  add edx, 00000002
 :00403A77 84C9                    test cl, cl
 :00403A79 75E4                    jne 00403A5F}
以上是跳過的程式碼.下面來到了真正要改的地方:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403A63(C), :00403A6F(C)

:00403A7B 7428                    jne 00403AA5  (和上面的跳一樣,只有在這裡跳才能成功)
* Possible StringData Ref from Data Obj ->"鐿溧痤?
                                 |
:00403A7D B8D3F64100              mov eax, 0041F6D3
:00403A82 BABCEA4100              mov edx, 0041EABC

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403AA1(C)
|
:00403A87 8A08                    mov cl, byte ptr [eax]
:00403A89 3A0A                    cmp cl, byte ptr [edx]
:00403A8B 7524                    jne 00403AB1
:00403A8D 84C9                    test cl, cl
:00403A8F 7412                    je 00403AA3
:00403A91 8A4801                  mov cl, byte ptr [eax+01]
:00403A94 3A4A01                  cmp cl, byte ptr [edx+01]
:00403A97 7518                    jne 00403AB1
:00403A99 83C002                  add eax, 00000002
:00403A9C 83C202                  add edx, 00000002
:00403A9F 84C9                    test cl, cl
:00403AA1 75E4                    jne 00403A87

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A8F(C)
|
:00403AA3 750C                    jne 00403AB1  
以上就是反覆比比跳跳,總之不讓你跳到正地方.那麼究竟為什麼非要跳到0403AA5這個地方呢?現在我們來看看這個地方有什麼.

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
:00403A67(C), :00403A7B(C)
* Possible Reference to String Resource ID=00001: "AKoff Music Composer - Version 2.0"
                                 |
:00403AA5 C705C8EC410001000000    mov dword ptr [0041ECC8], 00000001
上面的程式碼現在把一個00000001放到了[0041ECC8]裡.然後程式開始回去.
:00403AAF EB72                    jmp 00403B23
.
.
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403AAF(U), :00403AE9(U), :00403B1A(U)
|
:00403B23 83C414                  add esp, 00000014
:00403B26 5F                      pop edi
:00403B27 5E                      pop esi
:00403B28 C3                      ret
回去了,回到呼叫子程式的地方.
:00404370 E8DBF6FFFF              call 00403A50 (剛才就是從這個CALL裡出來的.)
:00404375 833DC8EC410000          cmp dword ptr [0041ECC8], 00000000
現在我們再來注意這上面的一行,剛才在子程式裡,經過運算比較後,得到了一個[0041ECC8],現在又來比較這個[0041ECC8],剛才這個地址裡是00000001,現在要拿00000000來和它比,然後下面一行說得很清楚,如果等於就跳走,走到哪兒呢?走到004043CE.
:0040437C 7450                    je 004043CE
這個004043CE是個什麼東西呢?經過反彙編我們會看到,那是一個ERROR,緊接著就是那個出錯對話方塊裡的話
"Not valid Code or E-mail." 如下所示:

:004043CE 6A30                    push 00000030

* Possible StringData Ref from Data Obj ->"Error"
                                 |
:004043D0 6890F84100              push 0041F890

* Possible StringData Ref from Data Obj ->"Not valid Code or E-mail."
肯定是不能讓他跳過來的啦!這裡不跳就說明成功了,下面的程式碼一行行走向了" - Registered".
                                 

:004043D5 6876F84100              push 0041F876
:004043DA 53                      push ebx
:0040437E 33C0                    xor eax, eax
:00404380 83C9FF                  or ecx, FFFFFFFF
:00404383 BF81E14100              mov edi, 0041E181
:00404388 8DB5F0FEFFFF            lea esi, dword ptr [ebp+FFFFFEF0]
:0040438E F2                      repnz
:0040438F AE                      scasb
:00404390 F7D1                    not ecx
:00404392 2BF9                    sub edi, ecx
:00404394 8BD1                    mov edx, ecx
:00404396 87F7                    xchg edi, esi
:00404398 C1E902                  shr ecx, 02
:0040439B 8BC7                    mov eax, edi
:0040439D F3                      repz
:0040439E A5                      movsd
:0040439F 8BCA                    mov ecx, edx
:004043A1 8D85F0FEFFFF            lea eax, dword ptr [ebp+FFFFFEF0]
:004043A7 83E103                  and ecx, 00000003
:004043AA F3                      repz
:004043AB A4                      movsb

* Possible StringData Ref from Data Obj ->" - Registered"
下略.

也不知道你看懂了沒有,反正我的思路比較業餘一些,只是從那個出錯的對話方塊,找到了那幾個跳轉,現在要改的是子程式裡面的那個JNE,就是:00403A7B 7428 jne 00403AA5,因為改了它,判斷密碼正確與否的子程式就不起作用了,而是直接把這個版本認為是經過註冊的正式版.好了,現在動手:
用HIEW把COMPOSER開啟,F4切換,F5輸入它的偏移地址0000307B,F3修改,把74改為75,F9存檔.退出,好了現在再啟動COMPOSER,直接就是"Registered"了.把你的MID載入,可以任意修改各種音色,成為自己的MID,存檔.真爽!


                           

相關文章