轉貼:破解時間限制的老文章(一) (2千字)

看雪資料發表於2000-10-23

注:SetTimer( )、KillTimer( )、WM_TIMER的破解 (

X-Win32是個Win95下的X-server程式.
在http://www.starnet.com或tucows的mirror站點可以找到它.

其4.0.1版的演示版只允許你每次執行兩個小時,之後必須重新執行它.
這個軟體在安裝時要輸入註冊碼,不過這時候不一定要你輸入正確的註冊碼.

我的破解方法如下:

1.用SoftIce載入其主程式XWin32.exe
2.用bpx messageboxa設定斷點,按F5執行.
3.過一會就會啟用SoftIce,按一下F11返回撥用MessageBoxA的地方,可以看到:
  00421A18:    CALL  [USER32!SetTimer]
                MOV    EAX,[004938FC]
                TEST  EAX,EAX
  00421A25:    JNZ    00421A63
                MOV    EDX,[0049BB20]
                LEA    ECX,[ESP+00]
                PUSH  00000100
                PUSH  ECX
                PUSH  09
                PUSH  EDX
  00421A3A:    MOV    DWORD PTR [004938FC],00000078  ;120分鐘,即2小時
                CALL  [USER32!LoadStringA]
                MOV    ECX,[0049BA60]
                PUSH  40
                LEA    EAX,[ESP+04]
                PUSH  004A2D1C
                PUSH  EAX
                PUSH  ECX
                CALL  [USER32!MessageBoxA]        ;顯示"demon version"
  00421A63:    ADD    ESP,00000100                ;亮條停在此行
                RET
4. 稍加分析,就可以知道上面的程式段的作用.程式先把DS:[004938FC]中的值
  取出來,判斷它是否為0,為零則顯示對話方塊,不為零就跳過對話方塊.我們還可以
  看到它在顯示對話方塊之前把DS:[004938FC]賦值為78H,即10進位制的120.如果120
  表示120分鐘的話,那不正好為兩小時嗎 ? 如果確實是在這個地方設定兩小時
  限制的話,那麼程式在以後肯定會來讀寫DS:[004938FC],所以用bpm 004938FC
  設定個新斷點.
5. 按F5繼續執行,過了一會兒又進入了SoftIce !
  這次看仔細了:
  00421A7F:  MOV  EAX,[004938FC]
              DEC  EAX                  ;亮條停在此行
              MOV  [004938FC],EAX
  00421A8A:  JZ    00421AC9            ;剩下0分鐘,中止程式
              CMP  EAX,0F              ;剩下15分鐘嗎 ?
              JNZ  00421AE4            ;不是,繼續執行
              MOV  ECX,[0049BB20]      ;顯示"只剩15分鐘"
              .
              .
  程式顯然是在作遞減工作,把那個計數器減到零的時候,也就是到了兩小時的
  時候,就中止程式.在只剩下15分鐘的時候它會顯示個對話方塊,告訴你"只剩
  15分鐘好用了".
6.  我的破解方法是,把CS:00421A25處的JNZ 00421A63改為JMP 00421A63就行了.
    這樣不僅跳過了對話方塊,而且計數器DS:[004938FC]的初值為0,以後程式對它
    進行減一操作的話,它就會變成-1,即FFFFFFFF分鐘,這可是個天文數字,所以
    你也根本不用擔心程式會中止啦.
    find:        75 3C 8B 15 20
    replace:    EB -- -- -- --
  以上只是一種破解方法而已,也可以把減一指令改為NOP.能找到註冊碼當然最好.

Netguy,1998.9.20

相關文章