輕鬆提取資源1.45破解心得 (7千字)

看雪資料發表於2015-11-15

輕鬆提取資源1.45破解教程
Cracked by simonyan

這個軟體有幾個陷阱, 其實演算法都是一致, 但在跟的時候, 可能會誤入陷阱, 花費多一點時間.
在下寫得不對之處, 歡迎大家指正.

一: 首先開啟軟體, 先填入註冊碼 (19191919), 註冊名(simonyan). 點選OK後, 會出現要求重啟動軟體.
    在這裡你也可以跟一下, 看他怎樣處理的註冊碼, 註冊名.
    我跟蹤了以後, 發現他運算出四個值, 分別為REGCODE, (=假碼每位加2). SEARCHID1(=假碼每位加1再反轉)
SEARCHID2=(假碼每位加3再反轉) , SEARCHID3=(假碼每位加5再反轉)
  再將註冊名, 及以上值存入登錄檔.

二: 關閉軟體後, 載入SOFTICE, 下斷點bpx regqueryvalueexa do “d *(esp+8)”
  因我們已知道註冊碼存入登錄檔, 就先用登錄檔斷點吧!!
  啟動程式後, 斷下, 按F12到45B019停. 這時顯示的值並不是與我們要的值有關, 繼續按F5, 這時在資料視窗出現
regusername字樣, 再按F12到程式領空.
    這時停在40b03c, 按F10走到40b045時, D ECX可看見註冊名 “simonyan”, ECX的值為11c7ac8.
  這時我們可下斷點bpm 11c7ac8.

三: 這時按F5走, 可看見SEARCHID1, 再按F5兩次可看見下面一段演算法. 再將算出的值, 與SEARCHID1比較.
相等則將一個全域性變數給值1.
    如一直按F5則可看現SEARCHID2, SEARCHID3, REGCODE與演算法結果比較。但最後又將全域性變數值改為0
  表明這些都是陷阱。

四: 我們可一直跟到出現程式選單後, 到以下位置:
  出現最後一次比較:
* Possible StringData Ref from Data Obj ->"EZ Extract Resource 1.45"
                                  |
:0040CD9E 68C4FC4700              push 0047FCC4
:0040CDA3 E860680300              call 00443608
:0040CDA8 51                      push ecx
:0040CDA9 8D542418                lea edx, dword ptr [esp+18]
:0040CDAD 8BCC                    mov ecx, esp
:0040CDAF 8964242C                mov dword ptr [esp+2C], esp
:0040CDB3 52                      push edx
:0040CDB4 E8D66A0300              call 0044388F
:0040CDB9 51                      push ecx
:0040CDBA C68424CC01000010        mov byte ptr [esp+000001CC], 10
:0040CDC2 8BCC                    mov ecx, esp
:0040CDC4 89642418                mov dword ptr [esp+18], esp
:0040CDC8 57                      push edi
:0040CDC9 E8C16A0300              call 0044388F
:0040CDCE 8BCE                    mov ecx, esi
:0040CDD0 C68424CC0100000F        mov byte ptr [esp+000001CC], 0F
:0040CDD8 E893070000              call 0040D570      (關鍵CALL)

* Possible StringData Ref from Data Obj ->"help.chm"
                                  |
:0040CDDD 68B8FC4700              push 0047FCB8
:0040CDE2 8986D0000000            mov dword ptr [esi+000000D0], eax  (賦全域性變數值)
:0040CDE8 E82C080200              call 0042D619
:0040CDED 83C404                  add esp, 00000004
:0040CDF0 8BCE                    mov ecx, esi
:0040CDF2 89868C000000            mov dword ptr [esi+0000008C], eax
:0040CDF8 E863030000              call 0040D160
:0040CDFD 8BB654020000            mov esi, dword ptr [esi+00000254]


  五: 現在我們可以跟入CALL中分析演算法: (如下)
演算法部分:

* Referenced by a CALL at Addresses:
|:0040CAF7  , :0040CB6E  , :0040CBE5  , :0040CC63  , :0040CDD8 
|
:0040D570 6AFF                    push FFFFFFFF
:0040D572 6840394600              push 00463940
:0040D577 64A100000000            mov eax, dword ptr fs:[00000000]
:0040D57D 50                      push eax
:0040D57E 64892500000000          mov dword ptr fs:[00000000], esp
:0040D585 81ECD0000000            sub esp, 000000D0
:0040D58B C78424D800000000000000  mov dword ptr [esp+000000D8], 00000000
:0040D596 8B8424E0000000          mov eax, dword ptr [esp+000000E0]
:0040D59D 68D4404800              push 004840D4
:0040D5A2 50                      push eax
:0040D5A3 C781C400000001000000    mov dword ptr [ebx+000000C4], 00000001
:0040D5AD E8A7FC0100              call 0042D259
:0040D5B2 83C408                  add esp, 00000008
:0040D5B5 85C0                    test eax, eax
:0040D5B7 0F8432010000            je 0040D6EF
:0040D5BD 8B8C24E4000000          mov ecx, dword ptr [esp+000000E4]
:0040D5C4 68D4404800              push 004840D4        (此處用 D ECX可看見實際輸入的假碼19191919)
:0040D5C9 51                      push ecx
:0040D5CA E88AFC0100              call 0042D259
:0040D5CF 83C408                  add esp, 00000008
:0040D5D2 85C0                    test eax, eax
:0040D5D4 0F8415010000            je 0040D6EF
:0040D5DA 8B9424E0000000          mov edx, dword ptr [esp+000000E0]
:0040D5E1 53                      push ebx
:0040D5E2 56                      push esi
:0040D5E3 33C9                    xor ecx, ecx
:0040D5E5 8B72F8                  mov esi, dword ptr [edx-08]
:0040D5E8 C644240868              mov [esp+08], 68
:0040D5ED 85F6                    test esi, esi
:0040D5EF C644240975              mov [esp+09], 75
:0040D5F4 C644240A79              mov [esp+0A], 79
:0040D5F9 C644240B64              mov [esp+0B], 64
:0040D5FE C644240C6F              mov [esp+0C], 6F
:0040D603 C644240D6E              mov [esp+0D], 6E
:0040D608 C644240E67              mov [esp+0E], 67
:0040D60D C644240F00              mov [esp+0F], 00
:0040D612 7E3F                    jle 0040D653
:0040D614 55                      push ebp
:0040D615 57                      push edi
:0040D616 8D7C3417                lea edi, dword ptr [esp+esi+17]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D64F(C)
|
:0040D61A 8B8424F0000000          mov eax, dword ptr [esp+000000F0]      (EAX 中的值為註冊名)
:0040D621 BD07000000              mov ebp, 00000007        (這幾句作用是註冊名超過7位後,又得第一個開始)
:0040D626 8A1C01                  mov bl, byte ptr [ecx+eax]
:0040D629 8BC1                    mov eax, ecx
:0040D62B 99                      cdq
:0040D62C F7FD                    idiv ebp
:0040D62E 0FBEC3                  movsx eax, bl              (EAX值為註冊名第N個字元值)=a
:0040D631 8BD9                    mov ebx, ecx
:0040D633 0FBE541410              movsx edx, byte ptr [esp+edx+10]        (ESP+10)的值為字元 “huydong”
:0040D638 03DA                    add ebx, edx                (取第N個固定字元值1)=b
:0040D63A 03C3                    add eax, ebx                (a+b)=c
:0040D63C BB09000000              mov ebx, 00000009
:0040D641 03C6                    add eax, esi                (esi為註冊名長度)+c=d
:0040D643 99                      cdq
:0040D644 F7FB                    idiv ebx                   
:0040D646 80C230                  add dl, 30
:0040D649 41                      inc ecx                      (ECX+1)
:0040D64A 8817                    mov byte ptr [edi], dl          (除9餘數+30)=(註冊名長度-N+1)位註冊碼
:0040D64C 4F                      dec edi
:0040D64D 3BCE                    cmp ecx, esi             
:0040D64F 7CC9                    jl 0040D61A                (小於註冊名長度跳回運算)
:0040D651 5F                      pop edi
:0040D652 5D                      pop ebp

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D612(C)
|
:0040D653 8D464D                  lea eax, dword ptr [esi+4D]      (註冊名長度+4D)
:0040D656 B909000000              mov ecx, 00000009
:0040D65B 99                      cdq
:0040D65C F7F9                    idiv ecx
:0040D65E 8B8424EC000000          mov eax, dword ptr [esp+000000EC]
:0040D665 80C230                  add dl, 30              (最後一位註冊碼)
:0040D668 88543410                mov byte ptr [esp+esi+10], dl


後面有一個與假碼比對過程, 就不寫了.

六: 整理演算法如下: 
演算法分析如下:
J=len(註冊名)
I<=J
S(I)=註冊名第I位字元
D(I)=”huydong”第I位字元, 如註冊名大於7, 則又從第一位開始
經過J次迴圈
則SN(J-I+1)= CHR(((S(I)+D(I)+J1) MOD 9)+30h)
最後一位註冊碼為 SN(J+1)=ASC(((J+4Dh) mod 9)+30h)

可能很凌亂, 請大家諒解!!!!

相關文章