書香門第 V1.23 Build 1638

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

書香門第 V1.23 Build 1638

軟體大小:  665 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 電子閱讀
應用平臺:  Win9x/NT/2000/XP
介面預覽:  
加入時間:  2003-03-13 08:28:43
下載次數:  7419
推薦等級:  

聯 系 人:  gentlebreeze@vip.163.com  
開 發 商:  http://www.gentle-breeze.com

軟體介紹:
   《書香門第》是一款適合於真正讀書迷的電子小說、文字閱讀軟體,它外表並不花哨,但對於長時間、大量閱讀的讀書迷,
卻最舒適、體貼、細緻,因為它具有十二個鮮明特點:1. 多達27種各種質感的視窗背景、頁面背景可供選擇,總共超過700種
背景組合,為讀書迷提供最高舒適度和最大程度的視力保護。2. 強大、智慧化的自動排版功能,並可以隨意設定字型大小、顏
色、行距、標題行。3. 極其高速的排版速度:目前主流機器上排版速度超過一萬頁/秒,所以通常你根本無法感覺到排版過程。
4. 高速的DirectDraw圖形引擎,翻頁尋跡流暢自如。5.附帶的html轉換、合成工具能夠迅速依次將一批html檔案轉換且合併
為一個大的文字檔案,方便閱讀。6.寬廣的平臺適用性:從486/win95到最新P4/XP都能從容應對。7.體貼的左手鍵操作,使你
從此擺脫長期右手操作滑鼠、鍵盤帶來的疲勞。8.與頁面字數成正比的自動翻頁間隔,自然優於呆板的固定翻頁間隔。9.可以
選擇使用視窗模式(尋跡方便)或全螢幕模式(閱讀效果更好)。10.全書遍歷/測試功能,保護你的計算機,節約能源。
11.搜尋功能方便讀者在書中查詢。12. 具有強於word和IE的漢字亂碼糾錯功能。

【作者宣告】:本人是個初學者,只是感興趣,沒有其它目的。失誤之處敬請諸位大俠賜教!
            本人感謝軟體作者,請見諒了.
【破解工具】:0llydbg v1.09cn  W32Dasm8.93黃金版

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


W32Dasm8.93黃金版反彙編,查詢關鍵提示。

0040373C E81A6C0100              call 0041A35B
:00403741 83F818                  cmp eax, 00000018
                                 ====>註冊碼是否24位

:00403744 0F85C0000000            jne 0040380A
                               
:0040374A A1280E4500              mov eax, dword ptr [00450E28]
:0040374F 83F804                  cmp eax, 00000004
                                ====>E-mail不能少於4位

:00403752 0F8CB2000000            jl 0040380A
                               

:00403758 8364241000              and dword ptr [esp+10], 00000000
:0040375D EB05                    jmp 00403764

* Reference To: USER32.SendMessageA, Ord:0214h
                                 |
:004037B0 FF15F4444200            Call dword ptr [004244F4]
:004037B6 80BEC000000000          cmp byte ptr [esi+000000C0], 00
:004037BD 742F                    je 004037EE
                               


* Possible StringData Ref from Data Obj ->"  祝賀你       <=== 關鍵詞,在上面中斷
                                       ->" 你已經成為了《書香門第》註冊使用者!"
                                 
:004037BF 6898C64200              push 0042C698


以下是用0llydbg v1.09cn跟蹤的:
填e_mail : fxyang@163.com
 試驗碼 : 789456123012345678901234

00403712  PUSH    EDI
00403713  MOV     EDI, zbook.00452268          ;  ASCII "fxyang@163.com"
00403718  LEA     EBP, DWORD PTR DS:[ESI+13C]
0040371E  PUSH    20
00403720  PUSH    EDI                          ;  EDI=00452268 ,ASCII "fxyang@163.com"
00403721  MOV     ECX, EBP
00403723  CALL    zbook.0041A35B
00403728  LEA     EBX, DWORD PTR DS:[ESI+100]
0040372E  PUSH    20
00403730  PUSH    zbook.00451A48               ;  ASCII "789456123012345678901234"
00403735  MOV     ECX, EBX
00403737  MOV     DWORD PTR DS:[450E28], EAX
0040373C  CALL    zbook.0041A35B
00403741  CMP     EAX, 18
00403744  JNZ     zbook.0040380A
0040374A  MOV     EAX, DWORD PTR DS:[450E28]
0040374F  CMP     EAX, 4
00403752  JL      zbook.0040380A
00403758  AND     DWORD PTR SS:[ESP+10], 0
0040375D  JMP     SHORT zbook.00403764
0040375F  MOV     EAX, DWORD PTR DS:[450E28]
00403764  PUSH    EAX                          ;  EAX=E
00403765  IMUL    EAX, DWORD PTR SS:[ESP+14]   ;  EAX=EAX*SS:[12F454]=E*0=0||EAX*SS:[12F454]=E*01=E
0040376A  ADD     EAX, zbook.00451A68          ;  ASCII "fxyang@163.comfxyang@163.com.......
0040376F  PUSH    EDI                          ;  EDI=00452268 ,ASCII "fxyang@163.com"
00403770  PUSH    EAX                          ;  EAX=00451A76
00403771  CALL    zbook.004083E0               ;  把e_mail傳送到451A68開始的地址中一共40h組
00403776  ESP, 0C
00403779  INC     DWORD PTR SS:[ESP+10]        ;  SS:[12F454]=0 ++
0040377D  CMP     DWORD PTR SS:[ESP+10], 40    ;  SS:[12F454]=1 ++
00403782  JL      SHORT zbook.0040375F         ;  把e_mail傳送到451A68開始的地址中一共40h組連線起來
00403784  MOV     EDI, zbook.00451248          ;  ASCII "789456123012345678901234"
00403789  PUSH    20
0040378B  PUSH    zbook.00451A48               ;  ASCII "789456123012345678901234"
00403790  PUSH    EDI
00403791  CALL    zbook.004083E0
00403796  ADD     EDI, 20
00403799  ADD     ESP, 0C
0040379C  CMP     EDI, zbook.00451A48          ;  ASCII "789456123012345678901234"
004037A2  JL      SHORT zbook.00403789         ;  把試驗碼傳送到451248-451A48開始的記憶體中
004037A4  XOR     EDI, EDI
004037A6  PUSH    EDI                                   ; /lParam => 0
004037A7  PUSH    EDI                                   ; |wParam => 0
004037A8  PUSH    1501                                  ; |Message = MSG(1501)
004037AD  PUSH    DWORD PTR DS:[ESI+1C]                 ; ||hWnd = B025C  
004037B0  CALL    DWORD PTR DS:[<&USER32.SendMessageA>] ; \這個api是轉移到計算註冊碼地址的call
004037B6  CMP     BYTE PTR DS:[ESI+C0], 0               ;  DS:[ESI+C0]=DS:[12FAF4]註冊標記
004037BD  JE      SHORT zbook.004037EE                  ;  這裡跳到錯誤的提示框
004037BF  PUSH    zbook.0042C698                        ;  到這裡就成功
004037C4  MOV     DWORD PTR DS:[452A68], EDI
004037CA  CALL    zbook.00405666  

//因為上面的跳轉是透過API的方式,所以太難找到核心

=============================================================================

CALL    DWORD PTR DS:[<&USER32.SendMessageA>] ; \這個api是轉移到計算註冊碼地址的call
|
|
77DF1D07  CALL DWORD PTR SS:[EBP+8]
|
CALL DWORD PTR SS:[EBP+8]
|

00403860  MOV     EBP, ESP
00403862  SUB     ESP, 100
00403868  PUSH    ESI
00403869  PUSH    20
0040386B  CALL    zbook.004088FB
00403870  PUSH    40
00403872  MOV     ESI, zbook.00451148
00403877  CDQ
00403878  POP     ECX                  ;  ECX=40
00403879  IDIV    ECX                  ;  EAX=13CA  IDIV ECX=40  ==>EAX=4F   EDX=A
0040387B  SHL     EDX, 5               ;  EDX=A SHL 5=140
0040387E  ADD     EDX, zbook.00451248  ;  EDX=EDX+451248( ASCII "789456123012345678901234")=
00403884  PUSH    EDX                  ;  EDX=zbook.00451388,ASCII "789456123012345678901234")
00403885  PUSH    ESI                  ;  //經過上面的漫長的轉折終於來到試驗碼的地址
00403886  CALL    zbook.004083E0       ;  00451148 <==ASCII "789456123012345678901234")
0040388B  PUSH    0FF
00403890  LEA     EAX, [LOCAL.64]
00403896  PUSH    0
00403898  PUSH    EAX
00403899  CALL    zbook.004087A0
0040389E  ADD     ESP, 18
004038A1  PUSH    DWORD PTR DS:[450E28] ;  DS:[450E28]=0E (e_mail的長度)
004038A7  CALL    zbook.004088FB        ;  這個CALL是取EAX=69F9 (常數)
004038AC  PUSH    40
004038AE  CDQ
004038AF  POP     ECX
004038B0  IDIV    ECX                   ;  EAX=69F9  IDIV ECX=40  ==>EAX=1A7   EDX=39
004038B2  LEA     EAX, [LOCAL.64]
004038B8  IMUL    EDX, DWORD PTR DS:[450E28] ;  EDX=EDX*DS:[450E28]=39*0E=31E
004038BF  ADD     EDX, zbook.00451A68       ;  ASCII "fxyang@163.comfxyang@163.com
004038C5  PUSH    EDX                       ;  zbook.00451D86
004038C6  PUSH    EAX                       ;  //用上面的方法取計算的引數從451D86處做基數
004038C7  CALL    zbook.004083E0
004038CC  PUSH    0C
004038CE  PUSH    ESI                       ;  ESI=00451148 ,ASCII "789456123012345678901234")
004038CF  PUSH    zbook.004510C8            ;  ASCII "驤溻潷憮纊祧"
004038D4  CALL    zbook.004083E0            ;  取試驗碼的前12位==>004510C8
004038D9  PUSH    0C
004038DB  PUSH    zbook.00451154
004038E0  PUSH    zbook.00451048
004038E5  CALL    zbook.004083E0            ;  取試驗碼的後12位==>00451048
004038EA  MOV     EAX, DWORD PTR DS:[450E28];  EAX=E
004038EF  AND     BYTE PTR DS:[451054], 0
004038F6  AND     BYTE PTR DS:[4510D4], 0
004038FD  ADD     ESP, 24
00403900  XOR     EDX, EDX
00403902  TEST    EAX, EAX
00403904  JLE     SHORT zbook.00403934
00403906  PUSH    EBX
00403907  PUSH    EDI
00403908  LEA     EBX, DWORD PTR DS:[EAX-1]       ;  EBX=E-1=D
0040390B /LEA     EDI, DWORD PTR SS:[EBP+EDX-100] ;  EDI<==0012F21C,(ASCII "fxyang@163.com")
00403912 |MOV     CL, BYTE PTR DS:[EDI]           ;  CL=DS:[12F21C]=66 ('f')
00403914 |CMP     CL, 40
00403917 |JE      SHORT zbook.0040391E
00403919 |CMP     CL, 2E
0040391C |JNZ     SHORT zbook.0040392D
0040391E |CMP     EDX, EBX
00403920 |JGE     SHORT zbook.0040392B
00403922 |MOV     ECX, EBX
00403924 |LEA     ESI, DWORD PTR DS:[EDI+1]
00403927 |SUB     ECX, EDX
00403929 |REP     MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
0040392B |DEC     EAX
0040392C |DEC     EBX
0040392D |INC     EDX
0040392E |CMP     EDX, EAX
00403930 \JL      SHORT zbook.0040390B          ;  這一段迴圈把e_mail中的@和.取出
00403932  POP     EDI                            //只取e_mail的前12位
00403933  POP     EBX
00403934  CMP     EAX, 0C
00403937  POP     ESI
00403938  JGE     SHORT zbook.00403952
0040393A  PUSH    0C
0040393C  POP     ECX
0040393D  SUB     ECX, EAX
0040393F  LEA     EAX, DWORD PTR SS:[EBP+EAX-100]
00403946  PUSH    ECX
00403947  PUSH    30
00403949  PUSH    EAX
0040394A  CALL    zbook.004087A0
0040394F  ADD     ESP, 0C
00403952  AND     BYTE PTR SS:[EBP-F4], 0
00403959  CALL    zbook.004039A5             ;  關鍵的計算部分
0040395E  PUSH    0C
00403960  LEA     EAX, [LOCAL.64]            ;  EAX<==0012F21C,(ASCII "fxyang163com")
00403966  PUSH    zbook.004511C8             ;  004511C8<== E6 E4 E4 E2 E6 EC F7 F5 F1 FD F5 FF
0040396B  PUSH    EAX                        ;  EAX<==0012F21C,(ASCII "fxyang163com")
0040396C  CALL    zbook.00408E10             ;  應該是比較部分
00403971  ADD     ESP, 0C
00403974  TEST    EAX, EAX                   ;  關鍵的比較
00403976  JNZ     SHORT zbook.00403993       ;  關鍵的跳轉
00403978  AND     BYTE PTR DS:[450C23], AL                  
0040397E  AND     BYTE PTR DS:[450C22], AL
00403984  AND     BYTE PTR DS:[450C21], AL
0040398A  AND     BYTE PTR DS:[450C20], AL
00403990  INC     EAX
00403991  LEAVE
00403992  RETN
00403993  MOV     BYTE PTR DS:[450C22], 78                   ;  標記
0040399A >MOV     BYTE PTR DS:[450C23], 79
004039A1  XOR     EAX, EAX
004039A3  LEAVE

---------------------------------------------------------------

CALL    zbook.004039A5     ;  關鍵的計算部分
|
004039A5   PUSH    0C
004039A7   CALL    zbook.004039AE
004039AC   POP     ECX
004039AD   RETN

---------------------------------------------------------------
CALL    zbook.004039AE   終於來到計算的地方,頭髮炸了
|
|

004039AE  PUSH    ESI
004039AF  MOV     ESI, DWORD PTR SS:[ESP+8]    ;  ESI=0C (e_mail去掉@和.後的長度)
004039B3  XOR     ECX, ECX
004039B5  PUSH    EDI
004039B6  TEST    ESI, ESI
004039B8  JLE     SHORT zbook.004039DA         //第一次的關鍵計算
004039BA  /LEA     EAX, DWORD PTR DS:[ECX+ESI] ;  EAX=ECX+ESI=0 ++ C=C++
004039BD  |PUSH    9
004039BF  |CDQ
004039C0  |POP     EDI                          ;  EDI=9
004039C1  |IDIV    EDI                          ;  EAX=C IDIV EDI=9 ==>EAX=1  EDX=3
004039C3  |MOV     AL, 8
004039C5  |SUB     AL, DL                       ;  AL=8-3=5
004039C7  |MOV     BYTE PTR DS:[ECX*2+451148], DL  ;  00451148=03
004039CE  |MOV     BYTE PTR DS:[ECX*2+451149], AL  ;  AL=05
004039D5  |INC     ECX                                      
004039D6  |CMP     ECX, ESI                       ; 計算的次數=12
004039D8  \JL      SHORT zbook.004039BA
004039DA  AND     BYTE PTR DS:[ESI*2+451148], 0
004039E2  PUSH    EBX
004039E3  PUSH    EBP
004039E4  LEA     EDI, DWORD PTR DS:[ESI+451148]
004039EA  PUSH    ESI                                        ;  ESI=0C
004039EB  MOV     EBP, zbook.00450F48
004039F0  PUSH    EDI                                        ;   zbook.00451154
004039F1  PUSH    EBP
004039F2  CALL    zbook.004083E0                            

;  把後12位==>00450F48 (00 08 01 07 02 06 03 05 04 04 05 03)

004039F7  MOV     EBX, zbook.00451148
004039FC  PUSH    ESI
004039FD  PUSH    EBX
004039FE  PUSH    EDI
004039FF  CALL    zbook.004083E0                            

;  把前12位==>00451145 (03 05 04 04 05 03 06 02 07 01 08 00)

00403A04  PUSH    ESI
00403A05  PUSH    EBP
00403A06  PUSH    EBX
00403A07  CALL    zbook.004083E0                            

;  把前12位倒置後==>00451148 (00 08 01 07 02 06 03 05 04 04 05 03)

00403A0C  ADD     ESP, 24
00403A0F  XOR     EBX, EBX
00403A11  TEST    ESI, ESI

****************************************************************
第一次計算的總結:                      
1.計算的引數是一個固定值C
2.這段計算是C MOD 9 的值設M 然後用8-M得到值設N,再把C++繼續
3.取得到的陣列的後12位與前12位值倒置後的陣列連線成24位的陣列
4.得到一組值==>00451148,
 N=00 08 01 07 02 06 03 05 04 04 05 03 03 05 04 04 05 03 06 02 07 01 08 00
5.就是說上面的陣列是固定的.

004039DA  AND     BYTE PTR DS:[ESI*2+451148], 0
004039E2  PUSH    EBX
004039E3  PUSH    EBP
004039E4  LEA     EDI, DWORD PTR DS:[ESI+451148]
004039EA  PUSH    ESI                            ;  ESI=0C
004039EB  MOV     EBP, zbook.00450F48
004039F0  PUSH    EDI                            ;   zbook.00451154
004039F1  PUSH    EBP
004039F2  CALL    zbook.004083E0               ;  把後12位==>00450F48 (00 08 01 07 02 06 03 05 04 04 05 03)
004039F7  MOV     EBX, zbook.00451148
004039FC  PUSH    ESI
004039FD  PUSH    EBX
004039FE  PUSH    EDI
004039FF  CALL    zbook.004083E0               ;  把前12位==>00451145 (03 05 04 04 05 03 06 02 07 01 08 00)
00403A04  PUSH    ESI
00403A05  PUSH    EBP
00403A06  PUSH    EBX
00403A07  CALL    zbook.004083E0               ;  把前12位倒置後==>00451148 (00 08 01 07 02 06 03 05 04 04 05 03)
00403A0C  ADD     ESP, 24
00403A0F  XOR     EBX, EBX
00403A11  TEST    ESI, ESI
00403A13  JLE     SHORT zbook.00403A66     //第二次的關鍵計算:
00403A15  /MOV     AL, BL
00403A17 |MOV     CL, BYTE PTR DS:[EBX+4510C8] ;  CL <==DS:[EBX+4510C8]=37 ('7') 試驗碼的前12位"789456123012"
00403A1D |INC     AL
00403A1F |MOV     DL, BYTE PTR DS:[EBX+451048] ;  DL <==DS:[EBX+451048]=33 ('3') 試驗碼的後12位"345678901234"
00403A25 |IMUL    BL                           ;  BL=0
00403A27 |LEA     EDI, DWORD PTR DS:[EBX+EBX]
00403A2A |INC     AL
00403A2C |AND     AL, 0F
00403A2E |SUB     CL, BYTE PTR DS:[EDI+451148] ;  CL=CL-DS:[451148]=37-00=37||=38-01(第一次計算的第三位)=37
00403A34 |SUB     DL, BYTE PTR DS:[EDI+451149] ;  DL=DL-DS:[451149]=33-08=2B
00403A3A |MOV     BYTE PTR DS:[450F40], AL
00403A3F |SUB     CL, 41                       ;  CL=CL-41=37-41=F6
00403A42 |SUB     DL, 41                       ;  DL=DL-41=2B-41=EA
00403A45 |XOR     CL, AL                       ;  CL=CL XOR AL=F6 XOR 01=F7
00403A47 |XOR     DL, AL                       ;  DL=DL XOR AL=EA XOR 01=EB
00403A49 |MOV     BYTE PTR DS:[EBX+4510C8], CL ;  //得到新值DS:[4510C8]<==( F7 F5 F1 FD F5 FF E6 E4 E4 E2 E6 EC )
00403A4F |MOV     BYTE PTR DS:[EBX+451048], DL ;  //得到新值DS:[451048]<==( EB EF E9 FD F7 FB F8 E2 E4 E4 FE F6 )
00403A55 |INC     EBX                          ;  EBX++
00403A56 |MOV     BYTE PTR DS:[EDI+450F48], CL ;  CL =F7
00403A5C |CMP     EBX, ESI                     ;  計算的次數=C (12D)
00403A5E |MOV     BYTE PTR DS:[EDI+450F49], DL ;  //把試驗碼的前12位
00403A64 \JL      SHORT zbook.00403A15  
00403A66  PUSH    ESI                          ;  ESI=C
00403A67  PUSH    EBP                          ;  上面的新值地址
00403A68  PUSH    zbook.00451048               ;  上面的新值的第二部分地址
00403A6D  CALL    zbook.004083E0               ;  第一部分的值==>00451048
00403A72  LEA     EDI, DWORD PTR DS:[ESI+450F48];  EDI=00450F54,後12位地址
00403A78  PUSH    ESI
00403A79  MOV     EBX, zbook.004510C8           ;  ASCII "驤溻潷憮纊祧"
00403A7E  PUSH    EDI
00403A7F  PUSH    EBX                           ;  第一部分的值==>004510C8
00403A80  CALL    zbook.004083E0                ;  後12組==>004510C8
00403A85  PUSH    ESI
00403A86  PUSH    EBX
00403A87  PUSH    EBP
00403A88  CALL    zbook.004083E0                 ;  連線後的後12位==>00450F48
00403A8D  PUSH    ESI
00403A8E  PUSH    zbook.00451048                 ;  連線後的後12位==>00450F48
00403A93  PUSH    EDI
00403A94  CALL    zbook.004083E0                  ;  連線後的前12位==>00450F54
00403A99  ADD     ESP, 30
00403A9C  XOR     EAX, EAX
00403A9E  TEST    ESI, ESI
00403AA0  POP     EBP
00403AA1  POP     EBX
00403AA2  JLE     SHORT zbook.00403AC0
00403AA4 /MOV     CL, BYTE PTR DS:[EAX*2+450F49] ;  CL<==DS:[450F49]=F8
00403AAB |SHL     CL, 4                          ;  CL=CL SHL 4=F8 SHL 4 =80
00403AAE |OR      CL, BYTE PTR DS:[EAX*2+450F48] ;  CL= CL OR DS:[450F48]=80 OR E6=E6
00403AB5 |INC     EAX                          ;  EAX++
00403AB6 |CMP     EAX, ESI                     ;  ESI=C
00403AB8 |MOV     BYTE PTR DS:[EAX+4511C7], CL ;  CL==>DS:[4511C8]=E6
00403ABE \JL      SHORT zbook.00403AA4        //迴圈取值
00403AC0  AND     BYTE PTR DS:[ESI+4511C8], 0  

;  004511C8<== E6 E4 E4 E2 E6 EC F7 F5 F1 FD F5 FF

00403AC7  POP     EDI
00403AC8  POP     ESI
00403AC9  RETN


---------------------------------------------

CALL    zbook.00408E10             ;  應該是比較部分


00408E10  MOV     EAX, DWORD PTR SS:[ESP+C]
00408E14  TEST    EAX, EAX                    ;  EAX=C
00408E16  JE      SHORT zbook.00408E5C
00408E18  MOV     EDX, DWORD PTR SS:[ESP+4]  

;  EDX<==0012F21C,(ASCII "fxyang163com")

00408E1C  PUSH    ESI
00408E1D  PUSH    EDI
00408E1E  MOV     ESI, EDX                    

;  ESI<==0012F21C,(ASCII "fxyang163com")

00408E20  MOV     EDI, DWORD PTR SS:[ESP+10]  

;  EDI<==004511C8== E6 E4 E4 E2 E6 EC F7 F5 F1 FD F5 FF

00408E24  OR      EDX, EDI
00408E26  AND     EDX, 3
00408E29  JE      SHORT zbook.00408E5D
00408E2B  TEST    EAX, 1
00408E30  JE      SHORT zbook.00408E3D    
00408E32  MOV     CL, BYTE PTR DS:[ESI]
00408E34  CMP     CL, BYTE PTR DS:[EDI]
00408E36  JNZ     SHORT zbook.00408E8A
00408E38  INC     ESI
00408E39  INC     EDI
00408E3A  DEC     EAX
00408E3B  JE      SHORT zbook.00408E5A
00408E3D  /MOV     CL, BYTE PTR DS:[ESI]       ; 逐位比較,相同就成功(可能嗎?)  
00408E3F |MOV     DL, BYTE PTR DS:[EDI]
00408E41 |CMP     CL, DL
00408E43 |JNZ     SHORT zbook.00408E8A
00408E45 |MOV     CL, BYTE PTR DS:[ESI+1]
00408E48 |MOV     DL, BYTE PTR DS:[EDI+1]
00408E4B |CMP     CL, DL
00408E4D |JNZ     SHORT zbook.00408E8A
00408E4F |ADD     EDI, 2
00408E52 |ADD     ESI, 2
00408E55 |SUB     EAX, 2
00408E58 \JNZ     SHORT zbook.00408E3D
00408E5A  POP     EDI
00408E5B  POP     ESI
00408E5C  RETN
00408E5D  MOV     ECX, EAX                  ;EAX=C
00408E5F  AND     EAX, 3
00408E62  SHR     ECX, 2
00408E65  JE      SHORT zbook.00408E92      ;  上面不成立就到這裡
00408E67  REPE    CMPS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI>

;  比較fxya和"E6E4E4E2"-前四位相同

00408E69  JE      SHORT zbook.00408E92                      

;  關鍵的跳轉,相同就註冊成功.完美暴破點

00408E6B  MOV     ECX, DWORD PTR DS:[ESI-4]   ;  ECX<==DS:[12F21C]=61797866
00408E6E  MOV     EDX, DWORD PTR DS:[EDI-4]   ;  EDX<==DS:[4511C8]=E2E4E4E6
00408E71  CMP     CL, DL
00408E73  JNZ     SHORT zbook.00408E85
00408E75  CMP     CH, DH
00408E77  JNZ     SHORT zbook.00408E85
00408E79  SHR     ECX, 10
00408E7C  SHR     EDX, 10
00408E7F  CMP     CL, DL
00408E81  JNZ     SHORT zbook.00408E85
00408E83  CMP     CH, DH
00408E85  MOV     EAX, 0
00408E8A  SBB     EAX, EAX
00408E8C  POP     EDI
00408E8D  SBB     EAX, -1
00408E90  POP     ESI
00408E91  RETN


================================================================================

第二次的關鍵計算的總結:
 1.先把試驗碼--789456123012345678901234 分成二組每組12位
  1>.第一組: 前12位--789456123012  設為M0
  2>.第二組: 後12位--345678901234  設為N0
 2.第一組的hex值-第一次計算值的奇數位的值設為K0 ;第二組的hex值-第一次計算值的偶數位的值設為L0
 3.把(K0-41)XOR{次數*(次數-1)+1}的個位設為P  
   ;(L0-41)XOR{次數*(次數-1)+1}的個位設為Q 然後把這個值按P Q P1 Q1 ..P12 Q12 放在以00450F48開始的地址中
   ;{次數*(次數-1)+1}的個位這個值是一組固定值設位H:1 3 7 D 5 F B 9 9 B F 5 D 7 1
 //得到新值DS:[450F48]<==( F7 EB F5 EF F1 E9 FD FD F5 F7 FF FB E6 F8 E4 E2 E4 E4 E2 E4 E6 FE EC F6 )
 4.把後12位與前12位對換==>E6 F8 E4 E2 E4 E4 E2 E4 E6 FE EC F6 F7 EB F5 EF F1 E9 FD FD F5 F7 FF FB
 5.然後取奇數位得到一個12位的新陣列==>E6 E4 E4 E2 E6 EC F7 F5 F1 FD F5 FF
  實際上就是把P組的前六位與後六位對換就是需要的陣列
 6.取得到的陣列的後12位與輸入e_mail的前12位比較,相同就註冊成功.
 7.如果不成功,就取陣列的前四位和e_mail 的前四位比較,相同就註冊成功

特別說明:上面的註冊嗎我沒有辦法可逆,可能我很菜.請大俠們幫忙了.


                                                       fxyang
     
                                                     2003.3.15

相關文章