人體生物節律查詢7.09的破解。換個角度入手,可能會簡單得多。 (4千字)

看雪資料發表於2000-08-13

一般軟體的註冊方法是在註冊對話方塊中輸入一些資訊後按“註冊”按鈕,然後它會進行驗證,根據對、錯給出相應的提示,或者告訴你需重新啟動然後驗證,但“人體生物節律查詢7.09”卻有些不同,以至有網友費了很大的力氣跟蹤它的註冊過程,但一直沒有發現關鍵點。現破解如下:
    我的機器號為“26402905”,在註冊對話方塊中輸入註冊碼“78787878”,切換到trw2000,用s 0,ffffffff '78787878'找到一個地址xxxxxxxx,然後下bpm xxxxxxxx,回到註冊畫面,按下“OK”,馬上被攔截,再接下來就是艱苦的跟蹤過程,過程比較複雜,似乎在進行一些計算,還沒看到什麼值得懷疑的內容就回到了“人體”,什麼提示都沒有。也不知道是否註冊成功,怎麼辦?再追一次,還是一樣。看一下它的幫助資訊,它提示說沒有註冊就不能列印,試一下,果然一按“列印”,馬上提示“未註冊,不能列印”,既然這樣就有辦法了。下bpx messageboxexa,按“列印”,馬上被攔截,然後慢慢走,看這個訊息框是哪兒呼叫的。走啊走……直到地址47A3BA(如下),一看很值得懷疑,既然懷疑就要驗證,怎麼辦?先bc去掉以前的中斷,再下bp 47a33c,回到“人體”再按“列印”,馬上攔截,然後一步一步走。到47a380,ecx與edi不相同,跳到下面提示未註冊,如讓47a382那個不跳,讓47a3a5那個跳的話,就出現列印對話方塊。看樣子關鍵果然在這,換一個註冊碼"34345656"註冊一下後再試,發現在47a380處的ecx是“0c5d”保持不變,edi在改變,而且,每換一個註冊碼,edi都會改變,是否可以猜想,ecx由機器號決定,edi由註冊碼決定?再看edi是由記憶體中兩個數決定的,那兩個數是“0D6A”和“1618”,換成十進位制不是“3434”和“5656”嗎?有一些眉目了!再看下面47a3a3的比較,其中的edi也是由這兩個數決定的,而且它應與eax相同,仔細看一下,列一個二元一次方程組解出這兩個四位數,如不足四位如xxx則添零變成0xxx,然後連成一個8位數就是註冊碼。如果您對機器碼的計算過程也感興趣的話,也可試一下,只是一些求商、求餘的演算法,很簡單。
0167:0047A33C  PUSH    EBX
0167:0047A33D  PUSH    ESI
0167:0047A33E  PUSH    EDI
0167:0047A33F  PUSH    ECX
0167:0047A340  MOV      [ESP],EDX
0167:0047A343  MOV      EBX,EAX
0167:0047A345  MOV      EAX,[004808AC]
0167:0047A34A  SUB      EAX,BYTE +47
0167:0047A34D  MOV      ECX,EAX
0167:0047A34F  SHL      ECX,02
0167:0047A352  LEA      ECX,[ECX+ECX*2]
0167:0047A355  MOV      EDX,[004808C0]
0167:0047A35B  SUB      EDX,BYTE +2F
0167:0047A35E  MOV      EDI,EDX
0167:0047A360  ADD      EDI,EDI
0167:0047A362  SUB      ECX,EDI
0167:0047A364  MOV      ESI,[004808B8]
0167:0047A36A  SUB      ESI,BYTE +2B
0167:0047A36D  IMUL    EDI,ESI,BYTE +0B
0167:0047A370  ADD      ECX,EDI
0167:0047A372  MOV      EDI,[004808B0]  \
0167:0047A378  ADD      EDI,EDI          <-算edi
0167:0047A37A  SUB      EDI,[004808C4]  /
0167:0047A380  CMP      ECX,EDI
0167:0047A382  JNZ      0047A3A7
0167:0047A384  MOV      ECX,[004808C4]  \
0167:0047A38A  ADD      ECX,ECX          <-算edi
0167:0047A38C  MOV      EDI,[004808B0]  /
0167:0047A392  SUB      EDI,ECX
0167:0047A394  LEA      EAX,[EAX+EAX*2]
0167:0047A397  ADD      EDX,EDX
0167:0047A399  LEA      EDX,[EDX+EDX*4]
0167:0047A39C  SUB      EAX,EDX
0167:0047A39E  LEA      EDX,[ESI+ESI*4]
0167:0047A3A1  SUB      EAX,EDX
0167:0047A3A3  CMP      EDI,EAX
0167:0047A3A5  JZ      0047A3C1
0167:0047A3A7  PUSH    BYTE +10
0167:0047A3A9  MOV      ECX,0047A430
0167:0047A3AE  MOV      EDX,0047A43C
0167:0047A3B3  MOV      EAX,[0047F828]
0167:0047A3B8  MOV      EAX,[EAX]
0167:0047A3BA  CALL    0044CB30        <-執行則提示“未註冊”
0167:0047A3BF  JMP      SHORT 0047A428
0167:0047A3C1  MOV      EAX,[EBX+0318]
0167:0047A3C7  MOV      EDX,[EAX]
0167:0047A3C9  CALL    NEAR [EDX+3C]
0167:0047A3CC  TEST    AL,AL
0167:0047A3CE  JZ      0047A428
0167:0047A3D0  CMP      BYTE [EBX+2763],00
0167:0047A3D7  JZ      0047A3E6
0167:0047A3D9  XOR      EDX,EDX
0167:0047A3DB  MOV      EAX,[EBX+0410]
0167:0047A3E1  CALL    0042E7F0
0167:0047A3E6  MOV      BYTE [EBX+2762],01
0167:0047A3ED  CALL    0041F0DC
0167:0047A3F2  CALL    0041E7AC
0167:0047A3F7  MOV      EDX,[ESP]
0167:0047A3FA  MOV      EAX,EBX
0167:0047A3FC  CALL    00476A20
0167:0047A401  CALL    0041F0DC
0167:0047A406  CALL    0041E834
0167:0047A40B  MOV      BYTE [EBX+2762],00
0167:0047A412  CMP      BYTE [EBX+2763],00
0167:0047A419  JZ      0047A428
0167:0047A41B  MOV      DL,01
0167:0047A41D  MOV      EAX,[EBX+0410]
0167:0047A423  CALL    0042E7F0
0167:0047A428  POP      EDX
0167:0047A429  POP      EDI
0167:0047A42A  POP      ESI
0167:0047A42B  POP      EBX
0167:0047A42C  RET

破後感:對於這個軟體,如果一味跟蹤註冊碼輸入過程的話,可能永遠找不到關鍵所在,因為沒有明顯的對、錯標誌,或許根本不在那兒判斷,但是隻要找到一個標誌,如我用的列印,從這個標誌入手破解可能會變得很簡單。還有就是破解一個軟體時,如果費了很多精力仍然破不了,那可以想一想,是否可以換個角度、換個地方入手,找個最薄弱的環節,繞過它的馬其諾防線,可能就會有“山重水複疑無路,柳暗花明又一村”的感覺。

相關文章