Access Animation破解的簡要分析

看雪資料發表於2003-05-10

軟體大小:  1289 KB
軟體語言:  英文
軟體類別:  國外軟體 / 共享版 / 動畫製作
應用平臺:  Win9x/NT/2000/XP
介面預覽:  無
加入時間:  2003-05-02 17:23:25
下載次數:  872
破解工具:TRW1.22 PWdasmV10.0  
軟體下載:http://count.skycn.com/softdown.php?id=11878&url=http://on165-http.skycn.net/down/aanim.zip

軟體簡介:Access Animation 是一套專門為了製作 GIF 動畫而產生的軟體,裡面內建了完整的繪圖機能。甚至一般繪圖軟體所擁有的噴槍、繪圖刷等繪圖工具,也一應俱全。在軟體中你可以指定動畫的張數以及動畫之間的延遲時間,以及圖形透明化程度等引數,讓你的動畫 GIF 檔案更能和你的網頁結合。

作者宣告:初學Crack,僅作學習交流,無其它目的。

BC編寫,無殼,下中斷BPX GETDLGITEMTEXTA,點OK鍵,程式被中斷,按F12,再按F10,來到如下程式碼:
0167:00415D2D  PUSH     DWORD 0104                  <---程式中斷於此
0167:00415D32  LEA      ECX,[EBP+FFFFFEE0]
0167:00415D38  PUSH     ECX
0167:00415D39  PUSH     BYTE +64
0167:00415D3B  PUSH     DWORD [EBP+08]
0167:00415D3E  CALL     `USER32!GetDlgItemTextA`    <---取輸入的註冊碼
0167:00415D43  LEA      EAX,[EBP+FFFFFEE0]          <---EAX=輸入的註冊碼
0167:00415D49  PUSH     EAX
0167:00415D4A  CALL     00436F68                    <---取註冊碼的位數
0167:00415D4F  POP      ECX
0167:00415D50  MOV      EDI,EAX
0167:00415D52  CMP      EDI,EBX                     <---判斷有無輸入註冊碼
0167:00415D54  JNG      00415DC2
0167:00415D56  MOV      AL,[EBP+EBX+FFFFFEE0]
0167:00415D5D  CMP      AL,2D                       <---判斷是否為“-”
0167:00415D5F  JZ       00415D68
0167:00415D61  LEA      EDX,[EDI-01]                
0167:00415D64  CMP      EBX,EDX
0167:00415D66  JNZ      00415DAE
0167:00415D68  LEA      ECX,[EDI-01]
0167:00415D6B  CMP      EBX,ECX
0167:00415D6D  JNZ      00415D7D
0167:00415D6F  MOV      AL,[EBP+EBX+FFFFFEE0]
0167:00415D76  MOV      [EBP+ESI+FFFFFDDC],AL      <---將每部分註冊碼移到EBP+ESI+FFFFFDDC的地址中
0167:00415D7D  LEA      EDX,[EBP+FFFFFDDC]
0167:00415D83  PUSH     EDX
0167:00415D84  CALL     0043BD5C                   <---將註冊碼的10進位制換為16進位制值
0167:00415D89  POP      ECX
0167:00415D8A  MOV      ECX,[EBP-04]
0167:00415D8D  MOV      [EBP+ECX*4-10],EAX         <----轉換的值存入[EBP+ECX*4-10]中,後面會用到
0167:00415D91  INC      DWORD [EBP-04]                  即後面的[EBP-10] [EBP-0C] [EBP-08]
0167:00415D94  PUSH     DWORD 0104
0167:00415D99  PUSH     BYTE +00
0167:00415D9B  LEA      EAX,[EBP+FFFFFDDC]
0167:00415DA1  PUSH     EAX
0167:00415DA2  CALL     00436EA0
0167:00415DA7  ADD      ESP,BYTE +0C
0167:00415DAA  XOR      ESI,ESI
0167:00415DAC  JMP      SHORT 00415DBD
0167:00415DAE  MOV      AL,[EBP+EBX+FFFFFEE0]
0167:00415DB5  MOV      [EBP+ESI+FFFFFDDC],AL
0167:00415DBC  INC      ESI
0167:00415DBD  INC      EBX
0167:00415DBE  CMP      EDI,EBX
0167:00415DC0  JG       00415D56
0167:00415DC2  PUSH     DWORD 00475E50      <---475E50為我們輸入的使用者名稱
0167:00415DC7  CALL     00436F68
0167:00415DCC  POP      ECX
0167:00415DCD  MOV      EDI,EAX
0167:00415DCF  TEST     EAX,EAX
0167:00415DD1  JNG      00415DED
0167:00415DD3  XOR      EBX,EBX
0167:00415DD5  PUSH     EBX
0167:00415DD6  PUSH     DWORD 00475E50
0167:00415DDB  CALL     00416034        <---計算註冊碼的關鍵Call,呼叫3次,跟進  
0167:00415DE0  ADD      ESP,BYTE +08
0167:00415DE3  MOV      [EBP+EBX*4-1C],EAX
0167:00415DE7  INC      EBX
0167:00415DE8  CMP      EBX,BYTE +03
0167:00415DEB  JL       00415DD5
0167:00415DED  MOV      EAX,[0046B12C]  <---[0046B12C]為程式執行的次數
0167:00415DF2  CMP      EAX,C8          <---此處為第一個關鍵判斷,判斷是否執行到200次
0167:00415DF7  JNZ      00415E78        <---跳到出錯對話方塊,此處改為兩個nop nop
0167:00415DF9  PUSH     DWORD 00475F54
0167:00415DFE  LEA      EDX,[EBP+FFFFFEE0]
0167:00415E04  PUSH     EDX
0167:00415E05  CALL     `KERNEL32!lstrcmpA`
0167:00415E0A  TEST     EAX,EAX
0167:00415E0C  JZ       00415E2C
0167:00415E0E  MOV      ECX,[EBP-10]  <---取假碼的第1部分
0167:00415E11  MOV      EAX,[EBP-1C]  <---取正確註冊碼的第1部分
0167:00415E14  CMP      ECX,EAX       <---關鍵比較2,比較註冊碼第1部分
0167:00415E16  JNZ      00415E78
0167:00415E18  MOV      EDX,[EBP-0C]  <---取假碼的第若部分
0167:00415E1B  MOV      ECX,[EBP-18]
0167:00415E1E  CMP      EDX,ECX       <---關鍵比較3,比較註冊碼第2部分      
0167:00415E20  JNZ      00415E78
0167:00415E22  MOV      EAX,[EBP-08]  <---取假碼的第3部分
0167:00415E25  MOV      EDX,[EBP-14]
0167:00415E28  CMP      EAX,EDX       <---關鍵比較4,比較註冊碼第3部分
0167:00415E2A  JNZ      00415E78
0167:00415E2C  MOV      DWORD [0043F09C],01
0167:00415E36  PUSH     BYTE +01
0167:00415E38  CALL     004030E3
0167:00415E3D  POP      ECX
0167:00415E3E  PUSH     DWORD 0046B0FE
0167:00415E43  PUSH     DWORD 004405D6
0167:00415E48  PUSH     DWORD 0046A922
0167:00415E4D  CALL     `USER32!wsprintfA`
0167:00415E52  ADD      ESP,BYTE +0C
0167:00415E55  PUSH     BYTE +40
0167:00415E57  PUSH     DWORD 0046B0FE
0167:00415E5C  PUSH     DWORD 0046A922
0167:00415E61  PUSH     DWORD [EBP+08]
0167:00415E64  CALL     `USER32!MessageBoxA`      <---註冊成功!
0167:00415E69  PUSH     BYTE +00
0167:00415E6B  PUSH     DWORD [EBP+08]
0167:00415E6E  CALL     `USER32!EndDialog`
0167:00415E73  JMP      00415F0C
0167:00415E78  PUSH     BYTE +40
0167:00415E7A  PUSH     DWORD 00440619
0167:00415E7F  PUSH     DWORD 004405F3
0167:00415E84  PUSH     DWORD [EBP+08]
0167:00415E87  CALL     `USER32!MessageBoxA`      <---出錯對話方塊!
0167:00415E8C  PUSH     BYTE +64
0167:00415E8E  PUSH     DWORD [EBP+08]
0167:00415E91  CALL     `USER32!GetDlgItem`
0167:00415E96  PUSH     EAX
0167:00415E97  CALL     `USER32!SetFocus`
0167:00415E9C  JMP      SHORT 00415F0C
0167:00415E9E  PUSH     DWORD 0104
0167:00415EA3  PUSH     DWORD 00475E50
0167:00415EA8  PUSH     BYTE +65
0167:00415EAA  PUSH     DWORD [EBP+08]

跟進上面的那個關鍵Call,來到如下程式碼:
0167:00416034  PUSH     EBP
0167:00416035  MOV      EBP,ESP
0167:00416037  PUSH     ECX
0167:00416038  PUSH     EBX
0167:00416039  PUSH     ESI
0167:0041603A  PUSH     EDI
0167:0041603B  MOV      ESI,[EBP+0C]
0167:0041603E  MOV      EDI,[EBP+08]           <---EDI中為使用者名稱
0167:00416041  XOR      EBX,EBX
0167:00416043  PUSH     EDI
0167:00416044  CALL     00436F68               <---取使用者名稱長度,返回值在EAX中
0167:00416049  POP      ECX
0167:0041604A  MOV      [EBP-04],EAX          
0167:0041604D  MOV      EAX,[EBP-04]
0167:00416050  CMP      EAX,FF                 <---比較使用者名稱長度是否大於255,
0167:00416055  JNG      0041605E                   誰會用這麼長的名字?!
0167:00416057  MOV      DWORD [EBP-04],FF
0167:0041605E  XOR      ECX,ECX                <---ECX=0,作用同指標
0167:00416060  MOV      EDX,[EBP-04]
0167:00416063  CMP      ECX,EDX
0167:00416065  JNL      NEAR 00416527
0167:0041606B  MOVSX    EAX,BYTE [EDI+ECX]     <---按位取使用者名稱的每個字元值到EAX中
0167:0041606F  ADD      EAX,BYTE -20           <---EAX=EAX-20,小寫字母轉換成大寫
0167:00416072  CMP      EAX,BYTE +5A           <---比較是否大於‘Z’
0167:00416075  JA       NEAR 004164CF
0167:0041607B  MOV      AL,[EAX+00416088]      <---用[EAX+00416088]的值查表給AL賦值

          自016F:0416088處的表值如下:
          016F:416088:1C 00 00 00 00 00 00 00-00 00 00 00 00 00 1B 00
          016F:416098:00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  
          016F:4160A8:00 1A 19 18 17 16 15 14-13 12 11 10 0F 0E 0D 0C
          016F:4160B8:0B 0A 09 08 07 06 05 04 03 02 01 00 00 00 00 00  
          016F:4160C8:0A 1A 19 18 17 16 15 14-13 12 11 10 0F 0E 0D 0C
          016F:4160D8:0B 0A 09 08 07 06 05 04 03 02 01 CF 04 41 00 09    

0167:00416081  JMP      NEAR [EAX*4+004160E3]  <---根據[EAX*4+004160E3]的值查表決定程式跳轉位置
          自004160E3處的表值如下:
          016F:004160E3:CF 64 41 00 09 64 41 00-44 64 41 00 25 64 41 00
          016F:004160E3:7E 64 41 00 E7 63 41 00-C8 63 41 00 A6 63 41 00
          016F:004160E3:87 63 41 00 65 63 41 00-63 64 41 00 46 63 41 00
          016F:004160E3:27 63 41 00 05 63 41 00-E3 62 41 00 C1 62 41 00
          016F:004160E3:F9 62 41 00 80 62 41 00-5E 62 41 00 3C 62 41 00
          016F:004160E3:1A 62 41 00 F8 61 41 00-D9 61 41 00 BA 61 41 00
          016F:004160E3:98 61 41 00 76 61 41 00-57 61 41 00 99 64 41 00  
0167:00416088  SBB      AL,00
0167:0041608A  ADD      [EAX],AL
0167:0041608C  ADD      [EAX],AL
0167:0041608E  ADD      [EAX],AL
0167:00416090  ADD      [EAX],AL
0167:00416092  ADD      [EAX],AL
0167:00416094  ADD      [EAX],AL
0167:00416096  SBB      EAX,[EAX]
0167:00416098  ADD      [EAX],AL
0167:0041609A  ADD      [EAX],AL
0167:0041609C  ADD      [EAX],AL
0167:0041609E  ADD      [EAX],AL
0167:004160A0  ADD      [EAX],AL
0167:004160A2  ADD      [EAX],AL
0167:004160A4  ADD      [EAX],AL
0167:004160A6  ADD      [EAX],AL
0167:004160A8  ADD      [EDX],BL
0167:004160AA  SBB      [EAX],EBX
0167:004160AC  POP      SS
0167:004160AD  PUSH     SS
0167:004160AE  ADC      EAX,11121314
0167:004160B3  ADC      [EDI],CL
0167:004160B5  PUSH     CS
0167:004160B6  OR       EAX,090A0B0C
0167:004160BB  OR       [EDI],AL
0167:004160BD  PUSH     ES
0167:004160BE  ADD      EAX,01020304
0167:004160C3  ADD      [EAX],AL
0167:004160C5  ADD      [EAX],AL
0167:004160C7  ADD      [EAX],AL
0167:004160C9  SBB      BL,[ECX]
0167:004160CB  SBB      [EDI],DL
0167:004160CD  PUSH     SS
0167:004160CE  ADC      EAX,11121314
0167:004160D3  ADC      [EDI],CL
0167:004160D5  PUSH     CS
0167:004160D6  OR       EAX,090A0B0C
0167:004160DB  OR       [EDI],AL
0167:004160DD  PUSH     ES
0167:004160DE  ADD      EAX,01020304
0167:004160E3  IRET    
0167:004160E4  INC      ECX        
0167:004160E6  ADD      [ECX],CL  
0167:004160E8  INC      ECX
0167:004160EA  ADD      [ESP+41],AL
0167:004160EE  ADD      [7E004164],AH
0167:004160F4  INC      ECX
0167:004160F6  ADD      BH,AH
0167:004160F8  ARPL     [ECX+00],AX
0167:004160FB  ENTER    4163,00
0167:004160FF  CMPSB  
0167:00416100  ARPL     [ECX+00],AX
0167:00416103  XCHG     ESP,[EBX+41]
0167:00416106  ADD      [EBP+63],AH
0167:00416109  INC      ECX
0167:0041610A  ADD      [EBX+64],AH
0167:0041610D  INC      ECX
0167:0041610E  ADD      [ESI+63],AL
0167:00416111  INC      ECX
0167:00416112  ADD      [EDI],AH
0167:00416114  ARPL     [ECX+00],AX
0167:00416117  ADD      EAX,E3004163
0167:0041611C  BOUND    EAX,[ECX+00]
0167:0041611F  SHL      DWORD [EDX+41],00
0167:00416123  LAHF    
0167:00416124  BOUND    EAX,[ECX+00]
0167:00416127  AND      BYTE [EDX+41],00
0167:0041612B  POP      ESI
0167:0041612C  BOUND    EAX,[ECX+00]
0167:0041612F  CMP      AL,62
0167:00416131  INC      ECX
0167:00416132  ADD      [EDX],BL
0167:00416134  BOUND    EAX,[ECX+00]
0167:00416137  CLC    
0167:00416138  POPA    
0167:00416139  INC      ECX
0167:0041613A  ADD      CL,BL
0167:0041613C  POPA    
0167:0041613D  INC      ECX
0167:0041613E  ADD      [EDX+98004161],BH
0167:00416144  POPA    
0167:00416145  INC      ECX
0167:00416146  ADD      [ESI+61],DH
0167:00416149  INC      ECX
0167:0041614A  ADD      [EDI+61],DL
0167:0041614D  INC      ECX
0167:0041614E  ADD      [ECX+B4004164],BL
0167:00416154  INC      ECX
0167:00416156  ADD      [EBX+BE0F7FC3],AL
0167:0041615C  ADC      AL,0F
0167:0041615E  TEST     BYTE [EDX+00444089],08
0167:00416165  JZ       NEAR 004164E0    
0167:0041616B  ADD      EBX,FD
0167:00416171  JMP      004164E0
0167:00416176  ADD      EBX,02D3              <---EBX=EBX+02D3   ------------|
0167:0041617C  MOVSX    EAX,BYTE [EDI+ECX]    <---按位取使用者名稱的每個字元     |
0167:00416180  TEST     BYTE [EAX+00444089],08<---根據[EAX+00444089]的值查表 |
0167:00416187  JZ       NEAR 004164E0             得到相應值與08H進行判斷    |
0167:0041618D  ADD      EBX,86                <---EBX=EBX+86                 |
0167:00416193  JMP      004164E0              <------------------------------|
0167:00416198  ADD      EBX,0929                 <---以下同上,懶得寫了|
0167:0041619E  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004161A2  TEST     BYTE [EDX+00444089],08                         |
0167:004161A9  JZ       NEAR 004164E0                                  |
0167:004161AF  ADD      EBX,01D9                                       |
0167:004161B5  JMP      004164E0                                       |
0167:004161BA  ADD      EBX,030D                                       |
0167:004161C0  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:004161C4  TEST     BYTE [EAX+00444089],08                         |
0167:004161CB  JZ       NEAR 004164E0                                  |
0167:004161D1  ADD      EBX,BYTE +47                                   |
0167:004161D4  JMP      004164E0                                       |
0167:004161D9  ADD      EBX,BYTE +02                                   |
0167:004161DC  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004161E0  TEST     BYTE [EDX+00444089],08                         |
0167:004161E7  JZ       NEAR 004164E0                                  |
0167:004161ED  ADD      EBX,1E61                                       |  
0167:004161F3  JMP      004164E0                                       |
0167:004161F8  ADD      EBX,01C8                                       |
0167:004161FE  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:00416202  TEST     BYTE [EAX+00444089],08                         |
0167:00416209  JZ       NEAR 004164E0                                  |
0167:0041620F  ADD      EBX,022B                                       |
0167:00416215  JMP      004164E0                                       |
0167:0041621A  ADD      EBX,0114                                       |
0167:00416220  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:00416224  TEST     BYTE [EDX+00444089],08                         |
0167:0041622B  JZ       NEAR 004164E0                                  |
0167:00416231  ADD      EBX,0378                                       |
0167:00416237  JMP      004164E0                                       |
0167:0041623C  ADD      EBX,015A                                       |
0167:00416242  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:00416246  TEST     BYTE [EAX+00444089],08                         |
0167:0041624D  JZ       NEAR 004164E0                                  |
0167:00416253  ADD      EBX,0235                                       |
0167:00416259  JMP      004164E0                                       |  
0167:0041625E  ADD      EBX,F6                                         |
0167:00416264  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:00416268  TEST     BYTE [EDX+00444089],08                         |  
0167:0041626F  JZ       NEAR 004164E0                                  |
0167:00416275  ADD      EBX,03F2                                       |
0167:0041627B  JMP      004164E0                                       |
0167:00416280  ADD      EBX,1EB1                                       |
0167:00416286  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:0041628A  TEST     BYTE [EAX+00444089],08                         |
0167:00416291  JZ       NEAR 004164E0                                  |
0167:00416297  ADD      EBX,BYTE +6E                                   |
0167:0041629A  JMP      004164E0                                       |
0167:0041629F  ADD      EBX,0278                                       |
0167:004162A5  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004162A9  TEST     BYTE [EDX+00444089],08                         |  
0167:004162B0  JZ       NEAR 004164E0                                  |
0167:004162B6  ADD      EBX,173A                                       |
0167:004162BC  JMP      004164E0                                       |  
0167:004162C1  ADD      EBX,017F                                       |                
0167:004162C7  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:004162CB  TEST     BYTE [EAX+00444089],08                         |
0167:004162D2  JZ       NEAR 004164E0                                  |
0167:004162D8  ADD      EBX,04FE                                       |
0167:004162DE  JMP      004164E0                                       |
0167:004162E3  ADD      EBX,115D                                       |  
0167:004162E9  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004162ED  TEST     BYTE [EDX+00444089],08                         |
0167:004162F4  JZ       NEAR 004164E0                                  |
0167:004162FA  ADD      EBX,0338                                       |  
0167:00416300  JMP      004164E0                                       |
0167:00416305  ADD      EBX,2382                                       |
0167:0041630B  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:0041630F  TEST     BYTE [EAX+00444089],08                         |
0167:00416316  JZ       NEAR 004164E0                                  |
0167:0041631C  ADD      EBX,0DED                                       |
0167:00416322  JMP      004164E0                                       |  
0167:00416327  ADD      EBX,0315                                       |
0167:0041632D  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:00416331  TEST     BYTE [EDX+00444089],08                         |
0167:00416338  JZ       NEAR 004164E0                                  |
0167:0041633E  ADD      EBX,BYTE +1B                                   |
0167:00416341  JMP      004164E0                                       |                  
0167:00416346  ADD      EBX,BYTE +17                                   |        
0167:00416349  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:0041634D  TEST     BYTE [EAX+00444089],08                         |
0167:00416354  JZ       NEAR 004164E0                                  |
0167:0041635A  ADD      EBX,129C                                       |
0167:00416360  JMP      004164E0                                       |  
0167:00416365  ADD      EBX,04DD                                       |
0167:0041636B  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:0041636F  TEST     BYTE [EDX+00444089],08                         |
0167:00416376  JZ       NEAR 004164E0                                  |
0167:0041637C  ADD      EBX,0137                                       |
0167:00416382  JMP      004164E0                                       |
0167:00416387  ADD      EBX,02D4                                       |  
0167:0041638D  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:00416391  TEST     BYTE [EAX+00444089],08                         |
0167:00416398  JZ       NEAR 004164E0                                  |
0167:0041639E  ADD      EBX,BYTE +04                                   |
0167:004163A1  JMP      004164E0                                       |
0167:004163A6  ADD      EBX,0340                                       |
0167:004163AC  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004163B0  TEST     BYTE [EDX+00444089],08                         |  
0167:004163B7  JZ       NEAR 004164E0                                  |
0167:004163BD  ADD      EBX,06DF                                       |
0167:004163C3  JMP      004164E0                                       |
0167:004163C8  ADD      EBX,BYTE +12                                   |      
0167:004163CB  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:004163CF  TEST     BYTE [EAX+00444089],08                         |
0167:004163D6  JZ       NEAR 004164E0                                  |
0167:004163DC  ADD      EBX,05BE                                       |
0167:004163E2  JMP      004164E0                                       |
0167:004163E7  ADD      EBX,16DA                                       |
0167:004163ED  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004163F1  TEST     BYTE [EDX+00444089],08                         |
0167:004163F8  JZ       NEAR 004164E0                                  |
0167:004163FE  ADD      EBX,01BE                                       |
0167:00416404  JMP      004164E0                                       |
0167:00416409  ADD      EBX,BYTE +22                                   |
0167:0041640C  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:00416410  TEST     BYTE [EAX+00444089],08                         |
0167:00416417  JZ       NEAR 004164E0                                  |
0167:0041641D  ADD      EBX,BYTE +16                                   |
0167:00416420  JMP      004164E0                                       |
0167:00416425  ADD      EBX,BYTE +44                                   |
0167:00416428  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:0041642C  TEST     BYTE [EDX+00444089],08                         |  
0167:00416433  JZ       NEAR 004164E0                                  |
0167:00416439  ADD      EBX,026A                                       |
0167:0041643F  JMP      004164E0                                       |
0167:00416444  ADD      EBX,029A                                       |
0167:0041644A  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:0041644E  TEST     BYTE [EAX+00444089],08                         |
0167:00416455  JZ       NEAR 004164E0                                  |
0167:0041645B  ADD      EBX,3039                                       |    
0167:00416461  JMP      SHORT 004164E0                                 |
0167:00416463  ADD      EBX,0185                                       |
0167:00416469  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:0041646D  TEST     BYTE [EDX+00444089],08                         |
0167:00416474  JZ       004164E0                                       |
0167:00416476  ADD      EBX,1272                                       |
0167:0041647C  JMP      SHORT 004164E0                                 |
0167:0041647E  ADD      EBX,0271                                       |
0167:00416484  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:00416488  TEST     BYTE [EAX+00444089],08                         |
0167:0041648F  JZ       004164E0                                       |
0167:00416491  ADD      EBX,BA                                         |
0167:00416497  JMP      SHORT 004164E0                                 |  
0167:00416499  ADD      EBX,014D                                       |
0167:0041649F  MOVSX    EDX,BYTE [EDI+ECX]                             |
0167:004164A3  TEST     BYTE [EDX+00444089],08                         |
0167:004164AA  JZ       004164E0                                       |
0167:004164AC  ADD      EBX,0285                                       |
0167:004164B2  JMP      SHORT 004164E0                                 |
0167:004164B4  ADD      EBX,2342                                       |
0167:004164BA  MOVSX    EAX,BYTE [EDI+ECX]                             |
0167:004164BE  TEST     BYTE [EAX+00444089],08                         |
0167:004164C5  JZ       004164E0                                       |
0167:004164C7  ADD      EBX,B0                                         |
0167:004164CD  JMP      SHORT 004164E0                                 |
0167:004164CF  INC      EBX                                            |
0167:004164D0  MOVSX    EDX,BYTE [EDI+ECX]                             |  
0167:004164D4  TEST     BYTE [EDX+00444089],08                         |
0167:004164DB  JZ       004164E0                                       |
0167:004164DD  ADD      EBX,BYTE +03             ----------------------|
0167:004164E0  TEST     ESI,ESI                <---判斷計算註冊碼的第幾部分,      
0167:004164E2  JNZ      004164F5                   從而轉向不同的運算,見後
0167:004164E4  MOV      EAX,EBX
0167:004164E6  PUSH     ECX
0167:004164E7  MOV      ECX,03                 <---ECX=3
0167:004164EC  XOR      EDX,EDX
0167:004164EE  DIV      ECX                    <---EAX=EAX/ECX
0167:004164F0  POP      ECX                    <---恢復ECX值
0167:004164F1  ADD      EBX,EAX                <---EBX=EBX+EAX
0167:004164F3  JMP      SHORT 0041651B
0167:004164F5  CMP      ESI,BYTE +01           <---計算註冊碼第2部分會走到這裡|
0167:004164F8  JNZ      00416502                                              |
0167:004164FA  MOV      EAX,EBX                                               |
0167:004164FC  SHR      EAX,1                                                 |
0167:004164FE  ADD      EBX,EAX                                               |
0167:00416500  JMP      SHORT 0041651B         <------------------------------|                          
0167:00416502  CMP      ESI,BYTE +02           <---計算註冊碼第3部分會走到這裡|
0167:00416505  JNZ      0041651B                                              |
0167:00416507  MOVSX    EDX,BYTE [EDI+01]                                     |
0167:0041650B  TEST     BYTE [EDX+00444089],08                                |
0167:00416512  JZ       0041651B                                              |
0167:00416514  MOV      EAX,EBX                                               |
0167:00416516  SHR      EAX,02                                                |
0167:00416519  ADD      EBX,EAX                <------------------------------|        
0167:0041651B  INC      ECX                    <---ECX加1                  
0167:0041651C  MOV      EDX,[EBP-04]
0167:0041651F  CMP      ECX,EDX                <---比較是否取完使用者名稱
0167:00416521  JL       NEAR 0041606B
0167:00416527  MOV      EAX,EBX                <---取運算後的最終值存入EAX中,
0167:00416529  POP      EDI                        即正確註冊碼的16進位制值
0167:0041652A  POP      ESI
0167:0041652B  POP      EBX
0167:0041652C  POP      ECX
0167:0041652D  POP      EBP
0167:0041652E  RET    
唉!寫到這頭都暈了,還是沒能把這個軟體詳細分析出來,正如前面所看到的0167:00415DF2處的判斷是判斷程式執行的次數,很顯然是小於200次,所以在這個地方肯定會跳,也即無法註冊。猜想可能在此之前已進行了註冊驗證,但我功力有限,跟了幾次還是一樣,實在不想跟了,還請高手跟一下看看!不過根據作者的說明好像這是個演示版,因為還有功能限制,我不確定作者是否將這部分功能做在程式中。
程式中運用查表法對使用者名稱進行有關運算後得到註冊碼的值,我實在不知該如何描述,各位自己看看吧!呵呵頭都暈了,如果看不明白是我寫得不好,請見諒!
我把0167:00415DF7處改為兩個nop,然後填入使用者名稱:ShenGe和註冊碼:73348-109543-59405,註冊成功!
嘿嘿!別高興得太早,等到你執行到151次時你就會看到那個討厭的對話方塊出來了,不能執行程式了。前面已經講過,[0046B12C]中存放的為程式執行的次數,下BPM 46B12C,重新執行程式,你會很快發現如下程式碼:
* Possible Reference to Dialog: IDD_MATRIX_EDIT, CONTROL_ID:0096, ""
                                 |
:00401121 3D96000000              cmp eax, 00000096       <---判斷是否執行超過了150次
:00401126 7628                    jbe 00401150            <---改為jmp 00401150
:00401128 8B152CB14600            mov edx, dword ptr [0046B12C]
:0040112E 81FAC8000000            cmp edx, 000000C8       <---判斷是否執行超過了200次
:00401134 731A                    jnb 00401150            <---上面改過了此處就不用改了
:00401136 6A40                    push 00000040
:00401138 68FEB04600              push 0046B0FE

* Possible StringData Ref from Data Obj ->"Thank you for using Access Image "
                                       ->"software.
You were already accessed "
                                       ->"this software more then 150 times.
If "
                                       ->"you want to continue using this "
                                       ->"software you must
buy it for $18 "
                                       ->"US only."
                                 |
:0040113D 68B4F54300              push 0043F5B4
:00401142 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                 |
:00401144 E82BD50300              Call 0043E674
:00401149 33C0                    xor eax, eax
:0040114B E967020000              jmp 004013B7
將上面的:00401126 7628 jbe 00401150改為EB28,再執行一下,OK!又可以用了!但是還有那該死的對話方塊,我實在不想再跟了,各位有興趣的話試試看吧!等等,這不是爆破嗎?前面那麼多豈不是白寫了嗎?到頭來還是爆破,唉,不幹了!睡覺去了!
最後還是爆破了,但還有功能限制,高手不妨試試看!本不想貼出來,但老外的演算法還是比較有意思,各位如果有興趣不妨研究一下。水平太低,失誤之處還請各位老大指點!

----------------------------------------ShenGe---------------------------------- 爆破點:
1.改0167:00401126  JBE 00401150為JMP 00401150
2.改0167:00415DF7  JNZ 00415E78為NOP NOP
3.改0167:00415E16  JNZ 00415E78為JZ 00415E78
4.改0167:00415E20  JNZ 00415E78為JZ 00415E78
5.改0167:00415E2A  JNZ 00415E78為JZ 00415E78

相關文章