Access Animation破解的簡要分析
軟體大小:
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
相關文章
- 簡單演算法---A Speeder
V2.5破解的簡要分析!2015-11-15演算法
- 解除安裝精靈V3.2破解的簡要分析!2015-11-15
- 夢想圖片螢幕保護V2.6破解簡要分析2015-11-15
- 磁碟原理簡要分析2022-06-15
- Flutter Animation(1)動畫的簡單使用2019-01-21Flutter動畫
- Android Hal層簡要分析2014-09-21Android
- Multidex(分包)實現簡要分析2018-04-27IDE
- spycop5.5簡要註冊分析2015-11-15
- 夢想CMS(lmxcms)1.4 簡要分析2024-10-15
- PE-explorer 1.4 的簡要破解過程(1千字)2001-08-08
- 要點提煉|開發藝術之Animation2017-12-21
- 圖靈4本新書版式的簡要分析2013-12-03圖靈新書
- ORACLE關於執行計劃的簡要分析2014-11-27Oracle
- 影像處理軟體XFader的簡要分析2015-11-15
- iOS Core Animation 簡明系列教程2016-05-11iOS
- 測試1:Access Point(Wifi)的密碼暴力破解2017-07-04WiFi密碼
- AsyncTask與Thread+Handler簡要分析2021-09-09thread
- EARLY ACCESS遊戲一般要幾年?2020-12-10遊戲
- css3 動畫(三)animation 簡介2018-07-22CSSS3動畫
- hashCode()方法原始碼執行簡要分析2020-10-03原始碼
- linux程式管理子系統簡要分析2016-05-05Linux
- 簡要分析Hacking Team 遠端控制系統2020-08-19
- Zero Access惡意軟體分析2020-08-19
- powerarchiver 8.00.58 之不完全破解+簡單演算法分析2015-11-15Hive演算法
- 簡要分析ZooKeeper基本原理及安裝部署2019-05-27
- 簡要分析Android手機為啥不好用?2014-11-15Android
- Animation元件的使用2020-09-23元件
- 用VB+MySQL比用PHP+Access還要愚蠢2008-01-03MySqlPHP
- AWStats分析nginx日誌(access.log)2015-02-04Nginx
- Delphi常見的執行期Access Violation錯誤分析2016-10-11
- 雲伺服器與傳統伺服器的區別簡要分析2020-10-30伺服器
- DigiCert證書屬於什麼級別 簡要分析2022-07-19
- 物件導向程式設計 約瑟夫問題簡要分析2017-12-21物件程式設計
- ASP.NET 2.0執行原理及其過程簡要分析2009-04-02ASP.NET
- 兩種Oracle應用程式開發介面之簡要分析2007-06-05Oracle
- 軟體測評中心簡要分析:為什麼要進行軟體效能測試?2022-05-11
- JRebel 破解最簡單的使用2021-09-30
- Hash破解神器:Hashcat的簡單使用2017-01-11