一般軟體的註冊方法是在註冊對話方塊中輸入一些資訊後按“註冊”按鈕,然後它會進行驗證,根據對、錯給出相應的提示,或者告訴你需重新啟動然後驗證,但“人體生物節律查詢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
破後感:對於這個軟體,如果一味跟蹤註冊碼輸入過程的話,可能永遠找不到關鍵所在,因為沒有明顯的對、錯標誌,或許根本不在那兒判斷,但是隻要找到一個標誌,如我用的列印,從這個標誌入手破解可能會變得很簡單。還有就是破解一個軟體時,如果費了很多精力仍然破不了,那可以想一想,是否可以換個角度、換個地方入手,找個最薄弱的環節,繞過它的馬其諾防線,可能就會有“山重水複疑無路,柳暗花明又一村”的感覺。