一個典型的時間限制軟體的破解 (4千字)

看雪資料發表於2001-01-29

明天就開學了,開學後就會忙得要命,再也沒有時間來學習破解技術了。
所以這可能是我近期最後一篇文章了。


軟體名:Minicom 3.6

軟體簡介:對於家裡有兩臺電腦的朋友來說,這是個挺有用的軟體。
它可以用來控制網路上另一臺電腦的一切活動。包括執行軟體,更
改系統配置,關機,等等。由於它有實時螢幕抓圖的功能,所以一
切操作都象在自己這臺電腦上進行一樣。


下載地址:
http://dccnet.tucows.com/files2/mc30day.exe

所用的工具:
            1.softICE 4.05.可在下列網址download
http://mud.sz.jsinfo.net/per/aaron/files/debuggers/win/si405w9x.zip

            2.HIEW 6.01
下載地址: http://go2.163.com/%7Etoye/tools/hiew640reg.zip

破解思路:

          本軟體的破解思路和步驟完全來自看雪教材。如果你對這類軟體
的破解原理還不瞭解,請看完這篇文章再看下去。
http://www.kanxue.com/lesson1404.htm


費話少說,讓我們開始吧!


I. 找出對比關鍵。


1. 用 SoftICE 的 Symbol Loader 載入 mincom.exe

2. 被攔下來後,下 bpx getlocaltime

3. 按 F5, 然後,就會被 SoftICE 再次攔下來。

4. 下 wc 取消顯示指令欄。

5.  然後就是狂按 F10 啦。一直到跳出SoftICE為止。

6.  回到 SoftICE 的 Symbol Loader ,選 File---> Save SoftICE History As...
    吧剛才我們所看到的東西都儲存為log1.txt。

7.  把系統時間調後三個月。

8. 再用 SoftICE 的 Symbol Loader 載入 mincom.exe.

9. 用前面相同的步驟取得另外一個檔案,取名為 log2.txt.

10. 用寫字板開啟這兩個檔案。看從那裡開始,這兩個檔案開始不同。

  我把這兩個檔案的相同部分帖在下面了。

Break due to BPX KERNEL32!GetLocalTime  (ET=98.36 milliseconds)
KERNEL32!GetLocalTime
0177:BFF77256  PUSH      BFFA2168
0177:BFF7725B  PUSH      DWORD PTR FS:[EDX]
0177:BFF7725E  MOV      FS:[EDX],ESP
0177:BFF77261  MOV      ECX,[ESP+0C]
0177:BFF77265  ADD      BYTE PTR [ECX],00
0177:BFF77268  ADD      BYTE PTR [ECX+0F],00
0177:BFF7726C  POP      DWORD PTR FS:[EDX]
0177:BFF7726F  ADD      ESP,04
0177:BFF77272  JMP      BFF76A58                                    (JUMP )
0177:BFF76A58  PUSH      EBP
0177:BFF76A59  MOV      EBP,ESP
0177:BFF76A5B  PUSH      EDI
0177:BFF76A5C  PUSH      EBX
0177:BFF76A5D  PUSH      DWORD PTR [BFFCAE10]
0177:BFF76A63  CALL      KERNEL32!ORD_0061
0177:BFF76A68  MOV      EDI,[EBP+08]
0177:BFF76A6B  MOV      ECX,00000004
0177:BFF76A70  SUB      EAX,EAX
0177:BFF76A72  REPZ STOSD
0177:BFF76A74  MOV      EDI,[EBP+08]
0177:BFF76A77  MOV      AH,2A
0177:BFF76A79  CALL      BFF712B9
0177:BFF76A7E  MOV      [EDI+02],DH
0177:BFF76A81  MOV      [EDI+06],DL
0177:BFF76A84  MOV      [EDI],CX
0177:BFF76A87  SUB      AH,AH
0177:BFF76A89  MOV      [EDI+04],AX
0177:BFF76A8D  MOV      AH,2C
0177:BFF76A8F  CALL      BFF712B9
0177:BFF76A94  MOV      [EDI+08],CH
0177:BFF76A97  MOV      [EDI+0A],CL
0177:BFF76A9A  MOV      [EDI+0C],DH
0177:BFF76A9D  SUB      DH,DH
0177:BFF76A9F  IMUL      DX,DX,0A
0177:BFF76AA3  MOV      [EDI+0E],DX
0177:BFF76AA7  PUSH      DWORD PTR [BFFCAE10]
0177:BFF76AAD  CALL      KERNEL32!ORD_0062
0177:BFF76AB2  POP      EBX
0177:BFF76AB3  POP      EDI
0177:BFF76AB4  LEAVE
0177:BFF76AB5  RET      0004
0177:00401FF1  MOV      ECX,[EBP+08]
0177:00401FF4  MOV      DL,[EBP-0A]
0177:00401FF7  MOV      [ECX],DL
0177:00401FF9  MOV      EAX,[EBP+08]
0177:00401FFC  MOV      CL,[EBP-0E]
0177:00401FFF  MOV      [EAX+01],CL
0177:00402002  MOV      EDX,[EBP+08]
0177:00402005  MOV      DWORD PTR [EDX+04],00000000
0177:0040200C  MOV      EAX,[EBP-10]
0177:0040200F  AND      EAX,0000FFFF
0177:00402014  MOV      ECX,[EBP+08]
0177:00402017  MOV      [ECX+04],EAX
0177:0040201A  MOV      ESP,EBP
0177:0040201C  POP      EBP
0177:0040201D  RET      0004
0177:00402B31  MOV      ECX,[EBP-04]
0177:00402B34  PUSH      ECX
0177:00402B35  MOV      EDX,[EBP-08]
0177:00402B38  PUSH      EDX
0177:00402B39  MOV      ECX,[EBP-0C]
0177:00402B3C  CALL      00402A66
0177:00402B41  MOV      ESP,EBP
0177:00402B43  POP      EBP
0177:00402B44  RET
0177:004322B1  MOV      [EBP-18],EAX  ---> 提取今天日期
0177:004322B4  MOV      EAX,[EBP-0128] ---> 提取安裝日期
0177:004322BA  ADD      EAX,1E        ---> 安裝日期加30 
0177:004322BD  CMP      [EBP-18],EAX  ---> 比較,看過期沒有。
0177:004322C0  JA        004322D1      ---> 大於則跳。跳則過期。

從這兩個檔案我們可以發現從
0177:004322C0  JA        004322D1
處,兩個檔案的流程開始不同。所以,這個jump 就是對比的關鍵。


II. 修改檔案。

11. 用 Hiew 載入 minicom.exe

12. 按 F4 選擇 Decode

13. 按 F5  , 輸入偏址: 000322C0 然後回車。

14. 按 F3, 將 77 改為 74.

15. 修改好後,F9存檔(按回車後到下一行,再按ESC讓對話方塊消失,然後按F9)。


  感謝看雪大哥給我的提示,使我的 bpx getsystemtime 能攔截。:)

相關文章