非明碼軟體的入門教學--現給演算法的入門者(高手末入) (6千字)

看雪資料發表於2002-07-24

非明碼軟體的入門教學
破解軟體:CalcVoice計算器
破解人:PowerBoy

下載地址:電力系統網,“軟體下載樂園”
軟體介紹:該軟體是一個語音計算器,可以進行二進位制、十進位制、八進位制、十六進位制的轉換和三角函式的
計算,註冊保護為軟體自生成一個序列號,然後根據序列號算出註冊碼。(每臺機器序列號都不相同)
並且有30次限制所以有2種選擇:一種是暴力破解,另外一種是分析出演算法寫成序號產生器。
*************************************************************************************************************************
1.爆破
首先用language偵測發現是用aspack加的殼。選擇用CASPR脫殼(效果好)。
執行軟體彈出要求註冊的對話方塊隨便輸入註冊碼彈出:

"對不起!您的註冊碼不正確,請與作者聯絡! "

接下來用w32dsam反彙編查詢“串式參考”
發現此句,用左鍵雙擊來到程式中。
向上查詢發現是由00476AE0(C)跳轉來得(用右鍵雙擊)
檢視程式發現如果00476AE0不跳轉就可以來到:

"恭喜您,註冊成功!謝謝您支援本軟體,請儲存好序列?

因此將3BC2757OB201改為
      ××7470××  je
      ××9090××  nop  成功!!!!!!!!!!!!!!!
*************************************************************************************************************************
2.演算法分析
因為該軟體是非明碼比較,這就要求破解者要有一定的演算法破解基礎了。廢話不說了開始!

下斷點:BPX HMEMCPY 按F12共N次來到下面...........
這時就要用F10了,並且要求要成用D和?命令檢視個暫存器的數值,(要有寧可錯殺一千不放過一個的態度才行啊!)

:00476AA3 55                      push ebp
:00476AA4 687D6B4700              push 00476B7D
:00476AA9 64FF30                  push dword ptr fs:[eax]
:00476AAC 648920                  mov dword ptr fs:[eax], esp
:00476AAF 8D55FC                  lea edx, dword ptr [ebp-04]
:00476AB2 8B8634040000            mov eax, dword ptr [esi+00000434]
:00476AB8 E87FFFFBFF              call 00436A3C
:00476ABD 8B45FC                  mov eax, dword ptr [ebp-04]
:00476AC0 83CAFF                  or edx, FFFFFFFF
:00476AC3 E8C41CF9FF              call 0040878C-------------------->經過此CALL後,我們輸入的SN變成十六進位制,並儲存倒EAX中;
:00476AC8 35630AB302              xor eax, 02B30A63---------------->EAX=EAX XOR 0x2B30A63
:00476ACD 35C5AC3703              xor eax, 0337ACC5---------------->EAX=EAX XOR 0x337ACC5
:00476AD2 8B15489D4700            mov edx, dword ptr [00479D48]---->EDX=0x13215B=1253723
:00476AD8 81F2630AB302            xor edx, 02B30A63---------------->EDX=EDX XOR 0x2B30A63//這時EDX的值就是機器碼MN;
:00476ADE 3BC2                    cmp eax, edx--------------------->比較EAX和EDX
:00476AE0 7570                    jne 00476B52*********************關鍵跳轉,不相等則跳,跳則死
:00476AE2 B201                    mov dl, 01
:00476AE4 A174CC4600              mov eax, dword ptr [0046CC74]
:00476AE9 E88662FFFF              call 0046CD74
:00476AEE 8BD8                    mov ebx, eax
:00476AF0 BA02000080              mov edx, 80000002
:00476AF5 8BC3                    mov eax, ebx
:00476AF7 E81863FFFF              call 0046CE14
:00476AFC 33C9                    xor ecx, ecx

* Possible StringData Ref from Code Obj ->"\Software\Microsoft\Active Setup\Installed "
                                        ->"Components"
                                  |
:00476AFE BA946B4700              mov edx, 00476B94
:00476B03 8BC3                    mov eax, ebx
:00476B05 E86E63FFFF              call 0046CE78

* Possible StringData Ref from Code Obj ->"1.0"
                                  |
:00476B0A B9D46B4700              mov ecx, 00476BD4

* Possible StringData Ref from Code Obj ->"Version"
                                  |
:00476B0F BAE06B4700              mov edx, 00476BE0
:00476B14 8BC3                    mov eax, ebx
:00476B16 E8F964FFFF              call 0046D014
:00476B1B 8BC3                    mov eax, ebx
:00476B1D E836CAF8FF              call 00403558
:00476B22 6A00                    push 00000000
:00476B24 668B0DE86B4700          mov cx, word ptr [00476BE8]
:00476B2B B202                    mov dl, 02

* Possible StringData Ref from Code Obj ->"恭喜您,註冊成功!謝謝您支援本軟體,請儲存好序列?
                                        ->"龐胱⒉崧?便於作者為您提供服務! "
                                        ->"  聯絡郵箱:JRYCL@163.COM"
                                  |
:00476B2D B8F46B4700              mov eax, 00476BF4
:00476B32 E85999FBFF              call 00430490
:00476B37 33D2                    xor edx, edx
:00476B39 8B8618040000            mov eax, dword ptr [esi+00000418]
:00476B3F E818FEFBFF              call 0043695C
:00476B44 A18C9C4700              mov eax, dword ptr [00479C8C]
:00476B49 C6802D02000001          mov byte ptr [eax+0000022D], 01
:00476B50 EB15                    jmp 00476B67

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00476AE0(C)
|
:00476B52 6A00                    push 00000000
:00476B54 668B0DE86B4700          mov cx, word ptr [00476BE8]
:00476B5B B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"對不起!您的註冊碼不正確,請與作者聯絡! "
                                        ->"聯絡郵箱:JRYCL@163.COM"
                                  |
:00476B5D B8646C4700              mov eax, 00476C64
:00476B62 E82999FBFF              call 00430490

*******************************************************************************************************************
演算法整理:
這是典型的非明碼比較的註冊碼形式;
1.:00476ADE處比較EAX和EDX.如果相等就註冊成功,不相等則註冊失敗;
  我們來看:EAX中儲存著我們輸入的假SN變成十六進位制形式在經過與常數XOR計算所得的數值,而EDX中儲存著MN的十六進位制形式;
  如果想註冊成功就要使EAX等於EDX;

2.好既然這樣我們就令:EAX=EDX;然後,逆推;
(這裡我們要知道一些必要的知識即:A XOR B = C 等價於 A XOR C = B 或 B XOR C = A);
如果知道這些就簡單了啊!
用MN先與常數0x2B30A63異或,在與常數0x337ACC5異或;
最後,將所得的數變成十進位制就是正確的註冊碼了啊!
例如:
MN=44051256
44051256=0x2A02B38
0x2A02B38 XOR 0x2B30A63 = 0x13215B
0x13215B XOR 0x337ACC5 = 0x3248D9E
0x3248D9E=52727198
SN=52727198
輸入52727198顯示成功!!!!!!!!
*********************************************************************************************************************
另外這個軟體有個缺陷
如果在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components]
建立主鍵"Version"="1.0"
那麼就不用註冊就可以成功了啊!
*********************************************************************************************************************

相關文章