批量更名專家V1.5 Build 1111

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

演算法分析――批量更名專家V1.5 Build 1111

下載地址:  http://www.skycn.com/soft/7412.html
軟體大小:  888 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 免費版 / 檔案更名
應用平臺:  Win9x/NT/2000/XP
加入時間:  2002-11-11 14:32:01
下載次數:  12853
推薦等級:  ***
開 發 商:  http://zigsoft.yeah.net


【軟體簡介】: 批量更名專家是一款優秀的批量檔案改名工具,更名速度極快。簡明的資源管理器介面,上手極為方便。提供批量修改檔案屬性和日期,修改副檔名,修改大小寫,可以插入,刪除,替換,獨特的序數改名功能,直接編輯檔名,根據MP3檔案的Id3資訊改名等。
 
【軟體限制】:30天試用。

【作者宣告】:初學Crack,只是感興趣,沒有其它目的。失誤之處敬請各大俠賜教!

【破解工具】:TRW2000娃娃修改版、FI2.5、AspackDie、RegMon、W32Dasm8.93黃金版

―――――――――――――――――――――――――――――
【過    程】:

呵呵,這個軟體簡單,很多朋友都已經解過了。在 天空 溜達,看見它的個頭不大,索性DOWN下來練練手。

找註冊碼挺簡單,但是要細細的分析演算法可就需要耐心與毅力了。
唉,菜鳥分析演算法真難呀!演算法雖簡單卻轉來繞去,讓我頭大。

填入試煉資訊。
                               
使用者名稱:flysky12(不能少於8位)
試煉碼:13572468

―――――――――――――――――――――――――――――
軟體需要重啟驗證註冊碼,因此軟體肯定把註冊碼儲存在登錄檔或其它檔案中。用RegMon監測,在登錄檔中發現了它留下的“尾巴”。

呵呵,發現了"RWCode"的鍵名,老方法,在反彙編程式碼裡搜尋RWCode,簡簡單單我們就找到了核心:4B8E92。於是,首先在TRW裡下BPX 4B8E92,然後重新載入程式。F5,程式被攔下!

―――――――――――――――――――――――――――――
1、使用者名稱不能少於8位


:004B979C E81FA8F4FF              call 00403FC0
:004B97A1 83F808                  cmp eax, 00000008
                                 ====>比較使用者名稱是否少於8位?

:004B97A4 7D1D                    jge 004B97C3
                                 ====>少於8位則不跳則OVER!
:004B97A6 6A00                    push 00000000

* Possible StringData Ref from Code Obj ->"警告框"
                                 |
:004B97A8 B930994B00              mov ecx, 004B9930

* Possible StringData Ref from Code Obj ->"使用者名稱太短或者註冊號不對!"
                                 |
:004B97AD BA38994B00              mov edx, 004B9938


―――――――――――――――――――――――――――――
2、開始追蹤!

* Possible StringData Ref from Code Obj ->"RWCode"
                                 ====>註冊資訊存放位置!                                  
:004B8E92 BA28904B00              mov edx, 004B9028
                                 ====>我們攔在這兒!

F10走,多加註意!經過一個RET,很快的我們就來到了核心!

…… ……
:004B8EF0 8D55F0                  lea edx, dword ptr [ebp-10]
:004B8EF3 8B45FC                  mov eax, dword ptr [ebp-04]
                                 ====>D EAX=我們輸入的試煉資訊
:004B8EF6 E845FDFFFF              call 004B8C40
                                 ====>演算法CALL!F8進入!

:004B8EFB 8B45F0                  mov eax, dword ptr [ebp-10]
:004B8EFE 8B55F8                  mov edx, dword ptr [ebp-08]
:004B8F01 E8CAB1F4FF              call 004040D0
                                 ====>比較CALL!F8進入!

:004B8F06 0F85AB000000            jne 004B8FB7
                                 ====>跳則OVER!
:004B8F0C B201                    mov dl, 01

:004B8FA7 8B45F4                  mov eax, dword ptr [ebp-0C]

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004B8EE0(C), :004B8EEA(C), :004B8F06(C)
|
:004B8FB7 33C0                    xor eax, eax

―――――――――――――――――――――――――――――
3、F8進入演算法CALL:004B8EF6  call 004B8C40
注:下面的“1、2、3……”是指迴圈的次序,最好自己跟蹤一下,很容易暈頭的。呵呵,讓我難受。關鍵結果下面我都標上 ******** 的記號!


* Referenced by a CALL at Address:
|:004B8EF6  
|
:004B8C40 55                      push ebp
:004B8C41 8BEC                    mov ebp, esp
:004B8C43 B904000000              mov ecx, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8C4D(C)
|
:004B8C48 6A00                    push 00000000
:004B8C4A 6A00                    push 00000000
:004B8C4C 49                      dec ecx
:004B8C4D 75F9                    jne 004B8C48
:004B8C4F 51                      push ecx
:004B8C50 53                      push ebx
:004B8C51 56                      push esi
:004B8C52 57                      push edi
:004B8C53 8955F8                  mov dword ptr [ebp-08], edx
:004B8C56 8945FC                  mov dword ptr [ebp-04], eax
:004B8C59 8B45FC                  mov eax, dword ptr [ebp-04]
                                 ====>使用者名稱入EAX
:004B8C5C E813B5F4FF              call 00404174
:004B8C61 33C0                    xor eax, eax
:004B8C63 55                      push ebp
:004B8C64 68DC8D4B00              push 004B8DDC
:004B8C69 64FF30                  push dword ptr fs:[eax]
:004B8C6C 648920                  mov dword ptr fs:[eax], esp
:004B8C6F B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"|"A"
                                 |
:004B8C71 A1F8034100              mov eax, dword ptr [004103F8]
:004B8C76 E849A3F4FF              call 00402FC4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8C02(C)
|
:004B8C7B 8945EC                  mov dword ptr [ebp-14], eax
:004B8C7E 33C0                    xor eax, eax
:004B8C80 55                      push ebp
:004B8C81 689A8D4B00              push 004B8D9A
:004B8C86 64FF30                  push dword ptr fs:[eax]
:004B8C89 648920                  mov dword ptr fs:[eax], esp
:004B8C8C 8D45F4                  lea eax, dword ptr [ebp-0C]
:004B8C8F 8B55FC                  mov edx, dword ptr [ebp-04]
:004B8C92 E841B1F4FF              call 00403DD8
:004B8C97 8B45F4                  mov eax, dword ptr [ebp-0C]
:004B8C9A E821B3F4FF              call 00403FC0
                                 ====>取使用者名稱位數。
:004B8C9F 8BF0                    mov esi, eax
                                 ====>?EAX=8,入ESI

:004B8CA1 8B45F4                  mov eax, dword ptr [ebp-0C]
:004B8CA4 E817B3F4FF              call 00403FC0
:004B8CA9 8BD8                    mov ebx, eax
:004B8CAB 85DB                    test ebx, ebx
                                 ====>?EBX=8,使用者名稱位數
:004B8CAD 0F8EA0000000            jle 004B8D53

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8D4D(C)
註冊碼演算法的迴圈開始了!要細心看了!作者真不怕麻煩,我都快追暈了。^-^

:004B8CB3 8BC3                    mov eax, ebx
                                 ====>EAX是迴圈的次數,依次遞減。
:004B8CB5 2501000080              and eax, 80000001
                                 ====>保留eax的最後一位,如果eax是奇數那他的最後一位就是1那麼在下面
:004B8CBA 7905                    jns 004B8CC1
:004B8CBC 48                      dec eax
:004B8CBD 83C8FE                  or eax, FFFFFFFE
:004B8CC0 40                      inc eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8CBA(C)
|
:004B8CC1 85C0                    test eax, eax
:004B8CC3 752E                    jne 004B8CF3
                                 ====>是否是判斷奇、偶數的?分別跳轉?
:004B8CC5 8B45F4                  mov eax, dword ptr [ebp-0C]
                                 ====>D EAX=flysky12
:004B8CC8 0FB64418FF              movzx eax, byte ptr [eax+ebx-01]
         
              EBX=8   取第8位    ====>1、?EAX=32 即2的HEX值  
              EBX=6   取第6位    ====>3、?EAX=79 即y的HEX值
              EBX=4   取第4位    ====>5、?EAX=73 即s的HEX值
              EBX=2   取第2位    ====>7、?EAX=6C 即l的HEX值
                                 

:004B8CCD 8BD6                    mov edx, esi
                                 ====>8入EDX
:004B8CCF 2BD3                    sub edx, ebx
                                 ====>1、EDX=8-8=0
                                 ====>3、EDX=8-6=2
                                 ====>5、EDX=8-4=4
                                 ====>7、EDX=8-2=6

:004B8CD1 8B4DF4                  mov ecx, dword ptr [ebp-0C]
                                 ====>D ECX=flysky12
:004B8CD4 0FB65411FF              movzx edx, byte ptr [ecx+edx-01]
                從第0位取字元    ====>1、EDX=0, 即從第0位取字元
                從第2位取字元    ====>3、EDX=6C,即l的HEX值  
                從第4位取字元    ====>5、EDX=73,即s的HEX值
                從第6位取字元    ====>7、EAX=79,即y的HEX值
                                 

:004B8CD9 F7EA                    imul edx
                                 ====>1、EAX=32*0=0
                                 ====>3、EAX=79*6C=330C
                                 ====>5、EAX=73*73=33A9
                                 ====>7、EAX=6C*79=330C
                               

:004B8CDB 83E003                  and eax, 00000003
                                 ====>1、EAX=0&3=0(分別進行“與”運算)
                                 ====>3、EAX=330C&3=0
                                 ====>5、EAX=33A9&3=1
                                 ====>7、EAX=330C&3=0

:004B8CDE 8D55E8                  lea edx, dword ptr [ebp-18]
:004B8CE1 E87E04F5FF              call 00409164
                                 ====>此CALL把以上所得值轉化為十進位制值
:004B8CE6 8B55E8                  mov edx, dword ptr [ebp-18]
                                 ====>結果入EDX
                                 ====>1、EDX=0
                                      ********
                                 ====>3、EDX=0
                                      ********
                                 ====>5、EDX=1
                                      ********
                                 ====>7、EDX=0
                                      ********

:004B8CE9 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8CEC 8B08                    mov ecx, dword ptr [eax]
:004B8CEE FF5134                  call [ecx+34]

:004B8CF1 EB57                    jmp 004B8D4A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8CC3(C)
|
:004B8CF3 8BC3                    mov eax, ebx
                                 ====>2、7入EAX
                                 ====>4、5入EAX
                                 ====>6、3入EAX
                                 ====>8、1入EAX

:004B8CF5 B903000000              mov ecx, 00000003
                                 ====>3入ECX
:004B8CFA 99                      cdq
:004B8CFB F7F9                    idiv ecx
                                 ====>2、EAX=7/3=2餘1
                                 ====>4、EAX=5/3=1餘2
                                 ====>6、EAX=3/3=1餘0
                                 ====>8、EAX=1/3

:004B8CFD 85D2                    test edx, edx
:004B8CFF 752B                    jne 004B8D2C
                                 ====>EDX=0則不跳!即不可整除就跳!
:004B8D01 8B45F4                  mov eax, dword ptr [ebp-0C]
                                 ====>EAX=flysky12
:004B8D04 0FB64418FF              movzx eax, byte ptr [eax+ebx-01]
              EBX=3   取第3位    ====>6、EAX=79,即y的HEX值

:004B8D09 8BD6                    mov edx, esi
:004B8D0B 2BD3                    sub edx, ebx
                                 ====>6、EDX=8-3=5
:004B8D0D 8B4DF4                  mov ecx, dword ptr [ebp-0C]
                                 ====>D ECX=flysky12
:004B8D10 0FB65411FF              movzx edx, byte ptr [ecx+edx-01]
              EDX=5   取第5位    ====>6、D EDX=6B,即k的HEX值
:004B8D15 03C2                    add eax, edx
                                 ====>6、EAX=79+6B=E4

:004B8D17 8D55E4                  lea edx, dword ptr [ebp-1C]
:004B8D1A E84504F5FF              call 00409164
                                 ====>此CALL把以上所得值轉化為十進位制值
:004B8D1F 8B55E4                  mov edx, dword ptr [ebp-1C]
                                 ====>6、EDX=228,即E4的Decimal值
                                      ********

:004B8D22 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8D25 8B08                    mov ecx, dword ptr [eax]
:004B8D27 FF5134                  call [ecx+34]
:004B8D2A EB1E                    jmp 004B8D4A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8CFF(C)
|
:004B8D2C 8B45F4                  mov eax, dword ptr [ebp-0C]
                                 ====>EAX=flysky12
:004B8D2F 0FB64418FF              movzx eax, byte ptr [eax+ebx-01]
                        EBX=7    ====>2、EAX=31,即第7位的字元
                        EBX=5    ====>4、EAX=6B,即第5位的字元
                        EBX=1    ====>8、EAX=66,即第1位的字元

:004B8D34 83C005                  add eax, 00000005
                                 ====>2、EAX=31+5=36
                                 ====>4、EAX=6B+5=70
                                 ====>8、EAX=66+5=6B

:004B8D37 8D55E0                  lea edx, dword ptr [ebp-20]
:004B8D3A E82504F5FF              call 00409164
                                 ====>此CALL把以上所得值轉化為十進位制值
:004B8D3F 8B55E0                  mov edx, dword ptr [ebp-20]
                                 ====>2、EDX= 54,即36的Decimal值
                                      ********
                                 ====>4、EDX=112,即70的Decimal值
                                      ********
                                 ====>8、EDX=107,即6B的Decimal值
                                      ********

:004B8D42 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8D45 8B08                    mov ecx, dword ptr [eax]
:004B8D47 FF5134                  call [ecx+34]

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004B8CF1(U), :004B8D2A(U)
|
:004B8D4A 4B                      dec ebx
                                 ====>EBX依次減一
                                 ====>1、EBX=7
                                 ====>2、EBX=6
                                 ……  ……

:004B8D4B 85DB                    test ebx, ebx
:004B8D4D 0F8F60FFFFFF            jg 004B8CB3
                                 ====>沒取完?繼續迴圈!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8CAD(C)
|
:004B8D53 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8D56 8B10                    mov edx, dword ptr [eax]
:004B8D58 FF5214                  call [edx+14]
:004B8D5B 8BF0                    mov esi, eax
:004B8D5D 4E                      dec esi
:004B8D5E 85F6                    test esi, esi
:004B8D60 7C22                    jl 004B8D84
:004B8D62 46                      inc esi
:004B8D63 33DB                    xor ebx, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8D82(C)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面迴圈程式碼的作用是把上面8次迴圈所得的結果,按照8、7、6、5、4、3、2、1的倒序方式連線起來,所得到的最後結果存入[EBP-10]處!這就是我們們“千辛萬苦”追蹤的真碼!


:004B8D65 8D4DDC                  lea ecx, dword ptr [ebp-24]
:004B8D68 8BD3                    mov edx, ebx
:004B8D6A 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8D6D 8B38                    mov edi, dword ptr [eax]
:004B8D6F FF570C                  call [edi+0C]
:004B8D72 8B55DC                  mov edx, dword ptr [ebp-24]
:004B8D75 8D45F0                  lea eax, dword ptr [ebp-10]
:004B8D78 8B4DF0                  mov ecx, dword ptr [ebp-10]
:004B8D7B E88CB2F4FF              call 0040400C
:004B8D80 43                      inc ebx
:004B8D81 4E                      dec esi
:004B8D82 75E1                    jne 004B8D65
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8D60(C)
|
:004B8D84 33C0                    xor eax, eax
:004B8D86 5A                      pop edx
:004B8D87 59                      pop ecx
:004B8D88 59                      pop ecx
:004B8D89 648910                  mov dword ptr fs:[eax], edx
:004B8D8C 68A18D4B00              push 004B8DA1

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B8D9F(U)
|
:004B8D91 8B45EC                  mov eax, dword ptr [ebp-14]
:004B8D94 E85BA2F4FF              call 00402FF4
:004B8D99 C3                      ret
―――――――――――――――――――――――――――――

4、F8進入比較CALL:004B8F01   call 004040D0


:004040D0 53                      push ebx
:004040D1 56                      push esi
:004040D2 57                      push edi
:004040D3 89C6                    mov esi, eax
:004040D5 89D7                    mov edi, edx
:004040D7 39D0                    cmp eax, edx
                                 ====>D EAX=真碼!!
                                 ====>D EDX=試煉碼

:004040D9 0F848F000000            je 0040416E

―――――――――――――――――――――――――――――
【KeyMake之記憶體序號產生器】:

中斷地址:4B8F01
中斷次數:1
第一位元組:E8
指令長度:5

中斷地址:4040D7
中斷次數:1
第一位元組:39
指令長度:2

記憶體方式:EAX              

―――――――――――――――――――――――――――――
【註冊資訊儲存】:
HKEY_LOCAL_MACHINE\Software\zigsoft\rw1.5\setup]

"RWUser"="flysky12"
"RWCode"="107022811120540"
―――――――――――――――――――――――――――――
【整       理】:

使用者名稱:flysky12
註冊碼:107022811120540
―――――――――――――――――――――――――――――

   
                   Cracked By 巢水工作坊――fly【OCN】

                          2003-2-7   23:00

相關文章