身份證資訊查詢與校驗(IdCard) v1.01

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

身份證資訊查詢與校驗(IdCard) v1.01
軟體名稱: 身份證資訊查詢與校驗(IdCard) v1.01
軟體語言: 簡體中文
軟體型別: 共享軟體 / 實用工具 / 其他工具
執行環境: WinXP, Win2000, NT, WinME, Win9X
授權方式: 共享軟體
軟體大小: 747 KB
軟體等級:  
整理時間: 2003-4-22 22:33:00
開 發 商:  
下載地址: http://ttdown.com/SoftView_12998.htm
軟體簡介
該軟體主要應用於對身份證號碼資訊的查詢與校驗,並且具備升級15位舊身份證為18位新身份證號碼格式的能力。尤其適用於對不明身份證號碼持有人的資訊查詢與校驗。功能:1.查詢身份證號碼持有人的 住址,生日,性別等資訊。2.校驗身份證號碼,檢查身份證號碼的真實性。3.將15位的舊身份證號碼升級為18位的新身份證號碼。使用方法:輸入待查詢的身份證號碼,即可得到這個號碼持有人的住址,生日,性別等資訊。並能檢驗該號碼的真實性。

【作者宣告】:本人只是對Crack感興趣,沒有其它目的。
【破解工具】:Ollydbg1.09 中文版  TRW2000 V1.23

―――――――――――――――――――――――――――――
【過    程】:
  這個軟體防Ollydbg並且加了殼,我沒有脫成功,所以就用TRW2000的萬能斷點找註冊碼計算的入口然後用Ollydbg的附加功能跟蹤程式,填註冊資訊,使用者名稱:fxyang  試驗碼:7894561230123456  跟蹤來到這裡:

004A120C  PUSH    EBP
004A120D  PUSH    4A128A
004A1212  PUSH    DWORD PTR FS:[EAX]
004A1215  MOV     DWORD PTR FS:[EAX], ESP
004A1218  LEA     EDX, DWORD PTR SS:[EBP-1C]
004A121B  MOV     EAX, DWORD PTR DS:[EBX+2F8]
004A1221  CALL    004388D8                         ; IDCard.004388D8
004A1226  MOV     EAX, DWORD PTR SS:[EBP-1C]       ; EAX<--00E5A784,(ASCII"7894561230123456")
004A1229  LEA     EDX, DWORD PTR SS:[EBP-18]
004A122C  CALL    0049BBAC                         ; <--檢查註冊碼前部分的正確性
====>F8
--------檢查註冊碼前部分的正確性---------
|
0049BBBB  PUSH    ECX
0049BBBC  PUSH    EBX
0049BBBD  PUSH    ESI
0049BBBE  PUSH    EDI
0049BBBF  MOV     DWORD PTR SS:[EBP-8], E>
0049BBC2  MOV     DWORD PTR SS:[EBP-4], E>; EAX<--00E5A784,(ASCII"7894561230123456")
0049BBC5  MOV     EAX, DWORD PTR SS:[EBP->; EAX<--00E5A784,(ASCII"7894561230123456")
0049BBC8  CALL    00404950                ; IDCard.00404950
0049BBCD  XOR     EAX, EAX
0049BBCF  PUSH    EBP
0049BBD0  PUSH    49BD33
0049BBD5  PUSH    DWORD PTR FS:[EAX]
0049BBD8  MOV     DWORD PTR FS:[EAX], ESP
0049BBDB  XOR     EAX, EAX
0049BBDD  PUSH    EBP
0049BBDE  PUSH    49BD06
0049BBE3  PUSH    DWORD PTR FS:[EAX]
0049BBE6  MOV     DWORD PTR FS:[EAX], ESP
0049BBE9  PUSH    6FB2
0049BBEE  LEA     EAX, DWORD PTR SS:[EBP->
0049BBF1  PUSH    EAX
0049BBF2  LEA     EAX, DWORD PTR SS:[EBP->
0049BBF5  PUSH    EAX
0049BBF6  MOV     ECX, 9                  <---取位的長度(9)
0049BBFB  MOV     EDX, 1
0049BC00  MOV     EAX, DWORD PTR SS:[EBP->; EAX<--00E5A784,(ASCII"7894561230123456")
0049BC03  CALL    004049C0                ; <--取試驗碼的前9位
0049BC08  MOV     EAX, DWORD PTR SS:[EBP->; EAX=00D955C4,(ASCII "789456123")
0049BC0B  LEA     EDX, DWORD PTR SS:[EBP->
0049BC0E  CALL    0049BAF4               ; <--把上面的串每3個一組變換成16進位制
====>F8
--------把上面的串每3個一組變換成16進位制---------
|
0049BAF4   PUSH    EBP
0049BAF5   MOV     EBP, ESP
0049BAF7   PUSH    0
0049BAF9   PUSH    0
0049BAFB   PUSH    0
0049BAFD   PUSH    EBX
0049BAFE   PUSH    ESI
0049BAFF   MOV     ESI, EDX
0049BB01   MOV     DWORD PTR SS:[EBP-4], EAX        ; EAX=00D955C4,(ASCII "789456123")
0049BB04   MOV     EAX, DWORD PTR SS:[EBP-4]        ; EAX=00D955C4,(ASCII "789456123")
0049BB07   CALL    00404950                         ; IDCard.00404950
0049BB0C   XOR     EAX, EAX
0049BB0E   PUSH    EBP
0049BB0F   PUSH    49BB9C
0049BB14   PUSH    DWORD PTR FS:[EAX]
0049BB17   MOV     DWORD PTR FS:[EAX], ESP
0049BB1A   MOV     EBX, 1
0049BB1F   MOV     EAX, ESI
0049BB21   CALL    004044B0                         ; IDCard.004044B0
0049BB26   MOV     EAX, DWORD PTR SS:[EBP-4]        ; EAX=00D955C4,(ASCII "789456123")
0049BB29   CALL    00404768                         ; IDCard.00404768
0049BB2E   MOV     ECX, 3                           ; ECX=3
0049BB33   CDQ
0049BB34   IDIV    ECX
0049BB36   TEST    EDX, EDX
0049BB38   JNZ     SHORT 0049BB81                   ; IDCard.0049BB81
0049BB3A   JMP     SHORT 0049BB75                   ; IDCard.0049BB75
0049BB3C   LEA     EAX, DWORD PTR SS:[EBP-C]
0049BB3F   PUSH    EAX
0049BB40   MOV     ECX, 3
0049BB45   MOV     EDX, EBX
0049BB47   MOV     EAX, DWORD PTR SS:[EBP-4]        ; EAX=00D955C4,(ASCII "789456123")
0049BB4A   CALL    004049C0                         ; <--取前三位 ("789")
0049BB4F   MOV     EAX, DWORD PTR SS:[EBP-C]        ; EAX<--00E5A730,(ASCII"789")
0049BB52   CALL    00408A84                         ; <--把"789"變成16進位制值"315"
=====>F8
-----把"789"變成16進位制值"315"------
|
004030C2   SUB     BL, 30
004030C5   CMP     BL, 9
004030C8   JA      SHORT 004030EF                   ; IDCard.004030EF
004030CA   CMP     EAX, EDI
004030CC   JA      SHORT 004030EF                   ; IDCard.004030EF
004030CE   LEA     EAX, DWORD PTR DS:[EAX+EAX*4]
004030D1   ADD     EAX, EAX
004030D3   ADD     EAX, EBX
004030D5   MOV     BL, BYTE PTR DS:[ESI]
004030D7   INC     ESI
004030D8   TEST    BL, BL                          
004030DA   JNZ     SHORT 004030C2                            

<--這段迴圈把"789"變成16進位制值"315"
-----------------------------------------
繼續:
|
0049BB57   MOV     EDX, EAX                         ; EDX=EAX=315
0049BB59   LEA     EAX, DWORD PTR SS:[EBP-8]
0049BB5C   CALL    00404690                         ; IDCard.00404690
0049BB61   MOV     EDX, DWORD PTR SS:[EBP-8]
0049BB64   MOV     EAX, ESI
0049BB66   CALL    00404770                         ; IDCard.00404770
0049BB6B   ADD     EBX, 3
0049BB6E   JNO     SHORT 0049BB75                   ; IDCard.0049BB75
0049BB70   CALL    00403684                         ; IDCard.00403684
0049BB75   MOV     EAX, DWORD PTR SS:[EBP-4]        ; EAX=00D955C4,(ASCII "789456123")
0049BB78   CALL    00404768                         ; IDCard.00404768
0049BB7D   CMP     EBX, EAX
0049BB7F   JL      SHORT 0049BB3C                   ; IDCard.0049BB3C
0049BB81   XOR     EAX, EAX
0049BB83   POP     EDX
0049BB84   POP     ECX
0049BB85   POP     ECX
0049BB86   MOV     DWORD PTR FS:[EAX], EDX
0049BB89   PUSH    49BBA3
0049BB8E   LEA     EAX, DWORD PTR SS:[EBP-C]
0049BB91   MOV     EDX, 3
0049BB96   CALL    004044D4                         ; IDCard.004044D4
0049BB9B   RETN

-----------------------------------------
繼續:
|
0049BC13  MOV     EAX, DWORD PTR SS:[EBP->
0049BC16  MOV     ECX, 0C891              ; ECX=0C891
0049BC1B  MOV     EDX, 3D0                ; EDX=3D0
0049BC20  CALL    0049BA54                ; <--用上面的值計算出新值
===>F8
-------用上面的值計算出新值--------
|
0049BA54  PUSH    EBP
0049BA55  MOV     EBP, ESP
0049BA57  ADD     ESP, -0C
0049BA5A  PUSH    EBX
0049BA5B  PUSH    ESI
0049BA5C  PUSH    EDI
0049BA5D  XOR     EBX, EBX
0049BA5F  MOV     DWORD PTR SS:[EBP-C], EBX
0049BA62  MOV     DWORD PTR SS:[EBP-4], ECX
0049BA65  MOV     ESI, EDX                         ; EDX=3D0=ESI
0049BA67  MOV     EDI, EAX
0049BA69  XOR     EAX, EAX
0049BA6B  PUSH    EBP
0049BA6C  PUSH    49BAE2
0049BA71  PUSH    DWORD PTR FS:[EAX]
0049BA74  MOV     DWORD PTR FS:[EAX], ESP
0049BA77  MOV     EAX, DWORD PTR SS:[EBP+8]
0049BA7A  CALL    004044B0                         ; IDCard.004044B0
0049BA7F  MOV     EAX, EDI
0049BA81  CALL    00404768                         ; IDCard.00404768
0049BA86  TEST    AL, AL
0049BA88  JBE     SHORT 0049BACC                   ; IDCard.0049BACC
0049BA8A  MOV     BYTE PTR SS:[EBP-5], AL          ; AL=3
0049BA8D  MOV     BL, 1                            ; BL=1
0049BA8F  LEA     EAX, DWORD PTR SS:[EBP-C]
0049BA92  XOR     EDX, EDX
0049BA94  MOV     DL, BL                           ; DL=BL=1
0049BA96  MOV     DL, BYTE PTR DS:[EDI+EDX-1]      ; DL=DS:[EDI+EDX-1]=15 (315)|=C8 (1C8)|=7B (7B)
0049BA9A  MOV     ECX, ESI                         ; ECX=ESI=3D0|=030D8C67|=50FA1F51
0049BA9C  SHR     ECX, 8                           ; ECX=3|=30D8C=50FA1F
0049BA9F  XOR     DL, CL                           ; DL=15 XOR 03=16|=C8 XOR 8C=44|=7B XOR 1F=64
0049BAA1  CALL    00404690                         ; IDCard.00404690
0049BAA6  MOV     EDX, DWORD PTR SS:[EBP-C]        ; EDX=00D9AFD8<--("16")
0049BAA9  MOV     EAX, DWORD PTR SS:[EBP+8]
0049BAAC  CALL    00404770                         ; IDCard.00404770
0049BAB1  MOV     EAX, DWORD PTR SS:[EBP+8]
0049BAB4  XOR     EAX, EAX
0049BAB6  MOV     AL, BL                           ; BL=1
0049BAB8  MOVZX   EAX, BYTE PTR DS:[EDI+EAX-1]    

; EAX=DS:[EDI+EDX-1]=15 (315)|=C8 (1C8)|=7B (7B)

0049BABD  ADD     ESI, EAX                        

; ESI=3D0+15=3E5|=030D8C67+C8=030D8D2F|=50FA1F51+7B=50FA1FCC

0049BABF  IMUL    ESI, DWORD PTR SS:[EBP-4]        

; ESI=3E5*C891=030D1CB5|=030D8D2F*C891=50F9AF9F|=50FA1FCC*C891=4683628C

0049BAC3  ADD     ESI, DWORD PTR SS:[EBP+C]        

; ESI=030D1CB5+6FB2=030D8C67|=50F9AF9F+6FB2=50FA1F51|=4683628C+6FB2=4683D23E

0049BAC6  INC     EBX                              ; EBX=1++
0049BAC7  DEC     BYTE PTR SS:[EBP-5]              ; SS:[00`12F847]=03--
0049BACA  JNZ     SHORT 0049BA8F                   ; IDCard.0049BA8F
0049BACC  XOR     EAX, EAX
0049BACE  POP     EDX
0049BACF  POP     ECX
0049BAD0  POP     ECX
0049BAD1  MOV     DWORD PTR FS:[EAX], EDX
0049BAD4  PUSH    49BAE9
0049BAD9  LEA     EAX, DWORD PTR SS:[EBP-C]
0049BADC  CALL    004044B0                         ; IDCard.004044B0
0049BAE1  RETN


-----------------------------------------
繼續:
|
0049BC25  MOV     EAX, DWORD PTR SS:[EBP->; EAX=00D9A910,(ASCII "867")
0049BC28  CALL    00408A84                ; <--比較計算值的正確性
====>F8
------比較計算值的正確性--------
|
00403070  PUSH    EBX
00403071  PUSH    ESI
00403072  PUSH    EDI
00403073  MOV     ESI, EAX                         ; EAX<--00E5A730,(ASCII"789")
00403075  PUSH    EAX
00403076  TEST    EAX, EAX
00403078  JE      SHORT 004030E6                   ; IDCard.004030E6
0040307A  XOR     EAX, EAX
0040307C  XOR     EBX, EBX
0040307E  MOV     EDI, 0CCCCCCC
00403083  MOV     BL, BYTE PTR DS:[ESI]            ; BL=DS:[ESI]=37 ||||=16(1)
00403085  INC     ESI
00403086  CMP     BL, 20
00403089  JE      SHORT 00403083                   ; IDCard.00403083
0040308B  MOV     CH, 0
0040308D  CMP     BL, 2D
00403090  JE      SHORT 004030F4                   ; IDCard.004030F4
00403092  CMP     BL, 2B
00403095  JE      SHORT 004030F6                   ; IDCard.004030F6
00403097  CMP     BL, 24
0040309A  JE      SHORT 004030FB                   ; IDCard.004030FB
0040309C  CMP     BL, 78
0040309F  JE      SHORT 004030FB                   ; IDCard.004030FB
004030A1  CMP     BL, 58
004030A4  JE      SHORT 004030FB                   ; IDCard.004030FB
004030A6  CMP     BL, 30
004030A9  JNZ     SHORT 004030BE                   ; IDCard.004030BE
004030AB  MOV     BL, BYTE PTR DS:[ESI]
004030AD  INC     ESI
004030AE  CMP     BL, 78
004030B1  JE      SHORT 004030FB                   ; IDCard.004030FB
004030B3  CMP     BL, 58
004030B6  JE      SHORT 004030FB                   ; IDCard.004030FB
004030B8  TEST    BL, BL
004030BA  JE      SHORT 004030DC                   ; IDCard.004030DC
004030BC  JMP     SHORT 004030C2                   ; IDCard.004030C2
004030BE  TEST    BL, BL
004030C0  JE      SHORT 004030EF                   \
004030C2  SUB     BL, 30                           |
004030C5  CMP     BL, 9                            |<--正確性效驗
004030C8  JA      SHORT 004030EF                   |
004030CA  CMP     EAX, EDI                         |
004030CC  JA      SHORT 004030EF                   /

說明:效驗的方法是比較上面計算的值是不是數字

------------------------------------
|
0049BC2D  MOV     EBX, EAX                ; EBX=EAX=363
0049BC2F  PUSH    6FB2
0049BC34  LEA     EAX, DWORD PTR SS:[EBP->
0049BC37  PUSH    EAX
0049BC38  LEA     EAX, DWORD PTR SS:[EBP->
0049BC3B  PUSH    EAX
0049BC3C  MOV     ECX, 0F                 ; <---取位的長度(15),改試驗碼位30位繼續
0049BC41  MOV     EDX, 0A
0049BC46  MOV     EAX, DWORD PTR SS:[EBP->; EAX<--00E49794,(ASCII"315359390147258")
0049BC49  CALL    004049C0                ; <--取餘下的試驗碼的前15位"315359390315359"
0049BC4E  MOV     EAX, DWORD PTR SS:[EBP->; EAX<--01C19570,(ASCII "315359390315359")
0049BC51  LEA     EDX, DWORD PTR SS:[EBP->
0049BC54  CALL    0049BAF4                <--把上面的串每3個一組變換成16進位制
0049BC59  MOV     EAX, DWORD PTR SS:[EBP->
0049BC5C  MOV     ECX, 0C891
0049BC61  MOV     EDX, 3D0
0049BC66  CALL    0049BA54                ; <--用上面的值計算出新值
0049BC6B  MOV     EAX, DWORD PTR SS:[EBP->; EAX=00D9A910,(ASCII "86725")
0049BC6E  CALL    00408A84                <--比較計算值的正確性

;說明:計算和比較的方法同上

0049BC73  MOV     ESI, EAX
0049BC75  PUSH    6FB2
0049BC7A  LEA     EAX, DWORD PTR SS:[EBP->
0049BC7D  PUSH    EAX
0049BC7E  LEA     EAX, DWORD PTR SS:[EBP->
0049BC81  PUSH    EAX
0049BC82  MOV     ECX, 0F                 ; <---取位的長度(15),改試驗碼位40位繼續
0049BC87  MOV     EDX, 19
0049BC8C  MOV     EAX, DWORD PTR SS:[EBP->
0049BC8F  CALL    004049C0                ; IDCard.004049C0
0049BC94  MOV     EAX, DWORD PTR SS:[EBP->
0049BC97  LEA     EDX, DWORD PTR SS:[EBP->
0049BC9A  CALL    0049BAF4                <--把上面的串每3個一組變換成16進位制
0049BC9F  MOV     EAX, DWORD PTR SS:[EBP->
0049BCA2  MOV     ECX, 0C891
0049BCA7  MOV     EDX, 3D0
0049BCAC  CALL    0049BA54                ; <--用上面的值計算出新值
0049BCB1  MOV     EAX, DWORD PTR SS:[EBP->; EAX=00D9A910,(ASCII "86725")
0049BCB4  CALL    00408A84                <--比較計算值的正確性

;說明:計算和比較的方法同上

0049BCB9  MOV     EDI, EAX                ; EAX=152C5=EDI
0049BCBB  PUSH    EDI
0049BCBC  MOV     EAX, DWORD PTR SS:[EBP->
0049BCBF  PUSH    EAX
0049BCC0  LEA     EAX, DWORD PTR SS:[EBP->
0049BCC3  PUSH    EAX
0049BCC4  MOV     EAX, DWORD PTR SS:[EBP->

; EAX<--01C13B94  ASCII "315359390315359390438360315359390438360123456789"

0049BCC7  CALL    00404768                ; IDCard.00404768
0049BCCC  MOV     ECX, EAX                ; ECX=30
0049BCCE  SUB     ECX, 27
0049BCD1  JNO     SHORT 0049BCD8          ; IDCard.0049BCD8
0049BCD3  CALL    00403684                ; IDCard.00403684
0049BCD8  MOV     EDX, 28
0049BCDD  MOV     EAX, DWORD PTR SS:[EBP->
0049BCE0  CALL    004049C0                

; <--取使用者名稱的效驗位--長度=使用者名稱*3,改試驗碼位57位繼續

0049BCE5  MOV     EAX, DWORD PTR SS:[EBP->

; EAX<--00D955C4,(ASCII "123456789147258369")<--使用者名稱的效驗位

0049BCE8  LEA     EDX, DWORD PTR SS:[EBP->
0049BCEB  CALL    0049BAF4                <--把上面的串每3個一組變換成16進位制
0049BCF0  MOV     EAX, DWORD PTR SS:[EBP->
0049BCF3  MOV     ECX, ESI
0049BCF5  MOV     EDX, EBX
0049BCF7  CALL    0049BA54                ; <--用上面的值計算出新值

說明:計算的方法同上

0049BCFC  XOR     EAX, EAX
0049BCFE  POP     EDX
0049BCFF  POP     ECX
0049BD00  POP     ECX
0049BD01  MOV     DWORD PTR FS:[EAX], EDX
0049BD04  JMP     SHORT 0049BD10          ; IDCard.0049BD10
0049BD06  JMP     00403C24                ; IDCard.00403C24
0049BD0B  CALL    00403F8C                ; IDCard.00403F8C
0049BD10  XOR     EAX, EAX
0049BD12  POP     EDX
0049BD13  POP     ECX
0049BD14  POP     ECX
0049BD15  MOV     DWORD PTR FS:[EAX], EDX
0049BD18  PUSH    49BD3A
0049BD1D  LEA     EAX, DWORD PTR SS:[EBP->
0049BD20  MOV     EDX, 0B
0049BD25  CALL    004044D4                ; IDCard.004044D4
0049BD2A  LEA     EAX, DWORD PTR SS:[EBP->
0049BD2D  CALL    004044B0                ; IDCard.004044B0
0049BD32  RETN


-----------------------------------------
繼續:
|
004A1231  MOV     EAX, DWORD PTR SS:[EBP-18]
004A1234  PUSH    EAX
004A1235  LEA     EDX, DWORD PTR SS:[EBP-20]
004A1238  MOV     EAX, DWORD PTR DS:[EBX+2F4]
004A123E  CALL    004388D8                      
004A1243  MOV     EDX, DWORD PTR SS:[EBP-20]   ; EDX<--01C19570,(ASCII "fxyang")
004A1246  POP     EAX
004A1247  CALL    004048AC                     ; <--關鍵的比較
====>F8
------關鍵的比較-------
|
004048AC  PUSH    EBX
004048AD  PUSH    ESI
004048AE  PUSH    EDI
004048AF  MOV     ESI, EAX

; ESI<--=0034A078 <---使用者名稱效驗位計算的值--引數

004048B1  MOV     EDI, EDX                        

; EDX<--01C19570,(ASCII "fxyang")<--引數--使用者名稱

004048B3  CMP     EAX, EDX
004048B5  JE      0040494A                         ; IDCard.0040494A
004048BB  TEST    ESI, ESI
004048BD  JE      SHORT 00404927                   ; IDCard.00404927
004048BF  TEST    EDI, EDI
004048C1  JE      SHORT 0040492E                   ; IDCard.0040492E
004048C3  MOV     EAX, DWORD PTR DS:[ESI-4]
004048C6  MOV     EDX, DWORD PTR DS:[EDI-4]
004048C9  SUB     EAX, EDX
004048CB  JA      SHORT 004048CF                   ; IDCard.004048CF
004048CD  ADD     EDX, EAX
004048CF  PUSH    EDX
004048D0  SHR     EDX, 2
004048D3  JE      SHORT 004048FB                   ; IDCard.004048FB
004048D5  MOV     ECX, DWORD PTR DS:[ESI]
004048D7  MOV     EBX, DWORD PTR DS:[EDI]
004048D9  CMP     ECX, EBX
004048DB  JNZ     SHORT 00404935                   ; IDCard.00404935
004048DD  DEC     EDX
004048DE  JE      SHORT 004048F5                   ; IDCard.004048F5
004048E0  MOV     ECX, DWORD PTR DS:[ESI+4]
004048E3  MOV     EBX, DWORD PTR DS:[EDI+4]
004048E6  CMP     ECX, EBX
004048E8  JNZ     SHORT 00404935                   ; IDCard.00404935
004048EA  ADD     ESI, 8
004048ED  ADD     EDI, 8
004048F0  DEC     EDX
004048F1  JNZ     SHORT 004048D5                   ; IDCard.004048D5
004048F3  JMP     SHORT 004048FB                   ; IDCard.004048FB
004048F5  ADD     ESI, 4
004048F8  ADD     EDI, 4
004048FB  POP     EDX
004048FC  AND     EDX, 3
004048FF  JE      SHORT 00404923                   ; IDCard.00404923
00404901  MOV     ECX, DWORD PTR DS:[ESI]    

; ECX<--DS:[ESI]=0034A078 <---使用者名稱效驗位計算的值

00404903  MOV     EBX, DWORD PTR DS:[EDI]    

; EBX<--DS:[EDI]=61797866 <---使用者名稱的hex值

00404905  CMP     CL, BL              \
00404907  JNZ     SHORT 0040494A      |                
00404909  DEC     EDX                 |
0040490A  JE      SHORT 00404923      |<--逐位比較                  
0040490C  CMP     CH, BH              |
0040490E  JNZ     SHORT 0040494A      |                  
00404910  DEC     EDX                 |
00404911  JE      SHORT 00404923      /                  
00404913  AND     EBX, 0FF0000
00404919  AND     ECX, 0FF0000
0040491F  CMP     ECX, EBX
00404921  JNZ     SHORT 0040494A                  
00404923  ADD     EAX, EAX
00404925  JMP     SHORT 0040494A                
00404927  MOV     EDX, DWORD PTR DS:[EDI-4]
0040492A  SUB     EAX, EDX
0040492C  JMP     SHORT 0040494A                
0040492E  MOV     EAX, DWORD PTR DS:[ESI-4]
00404931  SUB     EAX, EDX
00404933  JMP     SHORT 0040494A                
00404935  POP     EDX
00404936  CMP     CL, BL
00404938  JNZ     SHORT 0040494A                
0040493A  CMP     CH, BH
0040493C  JNZ     SHORT 0040494A              
0040493E  SHR     ECX, 10
00404941  SHR     EBX, 10
00404944  CMP     CL, BL
00404946  JNZ     SHORT 0040494A        
00404948  CMP     CH, BH
0040494A  POP     EDI
0040494B  POP     ESI
0040494C  POP     EBX
0040494D  RETN

--------------------------
繼續:
|
004A124C  JNZ     SHORT 004A1264                   ; IDCard.004A1264
004A124E  MOV     EAX, 4A1358
004A1253  CALL    00431CFC                         ; IDCard.00431CFC
004A1258  MOV     EAX, DWORD PTR DS:[4AFE14]
004A125D  CALL    00454E44                         ; IDCard.00454E44
004A1262  JMP     SHORT 004A1280                   ; IDCard.004A1280
004A1264  MOV     ECX, 4A1378
004A1269  MOV     EDX, 4A1348                      ; ASCII "regcode"
004A126E  MOV     EAX, DWORD PTR SS:[EBP-4]
004A1271  CALL    004A0A40                         ; IDCard.004A0A40
004A1276  MOV     EAX, 4A1384
004A127B  CALL    00431CFC                         ; IDCard.00431CFC
004A1280  XOR     EAX, EAX
004A1282  POP     EDX
004A1283  POP     ECX
004A1284  POP     ECX
004A1285  MOV     DWORD PTR FS:[EAX], EDX
004A1288  JMP     SHORT 004A12B0                   ; IDCard.004A12B0
004A128A  JMP     00403C24                         ; IDCard.00403C24
004A128F  MOV     ECX, 4A1378
004A1294  MOV     EDX, 4A1348                      ; ASCII "regcode"
004A1299  MOV     EAX, DWORD PTR SS:[EBP-4]
004A129C  CALL    004A0A40                         ; IDCard.004A0A40
004A12A1  MOV     EAX, 4A1384
004A12A6  CALL    00431CFC                         ; IDCard.00431CFC
004A12AB  CALL    00403F8C                         ; IDCard.00403F8C
004A12B0  XOR     EAX, EAX
004A12B2  POP     EDX
004A12B3  POP     ECX
004A12B4  POP     ECX
004A12B5  MOV     DWORD PTR FS:[EAX], EDX
004A12B8  PUSH    4A12D5
004A12BD  MOV     EAX, DWORD PTR SS:[EBP-4]
004A12C0  CALL    004A0734                         ; IDCard.004A0734
004A12C5  MOV     EAX, DWORD PTR SS:[EBP-4]
004A12C8  CALL    00403744                         ; IDCard.00403744
004A12CD  RETN


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

到這裡演算法跟蹤分析已完成,總結一下.

      條件--註冊碼的長度=39位+使用者名稱位數*3
      註冊碼的計算方法:
       1.分三次取試驗碼的前39位(這部分與使用者名稱無關),效驗它的正確性
       即透過計算的值是數字就正確.所以只有跟蹤到一個正確值就能用於
       任何一個使用者名稱.
       2.後面的使用者名稱位數*3位才是註冊碼與使用者名稱的效驗位.下面來說說計算過程
          1.)取試驗碼的效驗位,然後3個一組變換成16進位制值
          2.)取每組16進位制值的低位元組進入下步計算(所以使用者名稱的效驗碼不止一個)
          3.)第一組值 XOR 03 =使用者名稱第一位的hex值
          4.)第一組值+3D0(固定值)的值*C89(固定值),得到一個新值+6FB2(固定值)
          5.)用上面值的第三位元組 XOR 第二組值=使用者名稱的第二位
          6.)用第四步計算的值+第二組的值然後再次進行第四步第五步計算
            直到計算完


                                                             

                                                      by  fxyang[OCN][BCG]


                                                              2003.4.24

相關文章