這是一套各種單位換算的軟體...

我對此套軟體是沒啥興趣啦...:P

不過有人需要此軟體來吃飯...

所以...就幫他破破看...

以下稱此軟體為MC...呵呵...別亂想喔...


1.註冊碼: 1234567890123 (此處先亂填...但必須填滿13個字...
          為啥我知道13個字...因為我有先填過87654321八個字
          去trace...結果程式會先看看註冊碼是否為13個字...
          是的話才會去比較)


2.Ctrl-D 切入S-ICE...


3.下bpx hmemcpy指令...


4.按F5切回MC...然後按下OK鍵...


5.S-ICE攔下後...BD * 把攔中斷的功能關掉

  按幾次F12...跳回MC領空...


6.然後一直按F10....直到下面:

  XXX:00444CBB MOV EAX,[004509C4]
  XXX:00444CC0 CALL 004414FC
               ^^^^^^^^^^^^^
算註冊碼及比對核心的CALL...

  XXX:00444CC5 MOV [004509C0],AL
  XXX:00444CCA CMP BYTE PTR [004509C0],00

由AL當旗標值...來決定註冊成功與否...

  XXX:00444CD1 JZ 00444CF1
               ^^^^^^^^^^^
  XXX:00444CD3 PUSH 40

跳到00444CF1就GAME OVER啦...

追到XXX:00444CD1時...

若將IP值改成00444CD3...即讓JZ 00444CF1失效...

會出現註冊成功的訊息...

所以推斷要害必在XXX:00444CC0那鍋CALL...

所以在那行設斷...重新註冊一次...並追進去...


7.追入後...一直按F10...直到如下:

  XXX:00403423 MOV EBX,EAX

  XXX:00403425 MOV ESI,EDX
               ^^^^^^^^^^^
  XXX:00403427 MOV EDI,ECX
               ^^^^^^^^^^^
追到上面那兩行先停一下...

看看ESI和EDI各指向哪些資料...

下d esi指令
  d edi指令

嘿嘿...真幸運...

可看到ESI指向1234567890123...剛剛輸入的註冊碼...

嘿嘿...爽...事情成功了一半...

接著下bpm XXXX:YYYYYYYY (那鍋ESI指向的位址)...

  XXX:00403429 MOV EAX,EDI
  XXX:0040342B CALL 004033FC


8.接著就看神對我們有沒有關愛的眼神啦...

  呵呵...果然神愛世人...:P

  一直下 G 指令(不要按太快)...直到下面:

  XXX:004035ED MOV ECX,[ESI];將真正的註冊碼由ESI指向處放到ECX
  XXX:004035EF MOV EBX,[EDI];將輸入的註冊碼由ESI指向處放到EBX
  XXX:004035F1 CMP ECX,EBX  ;比對核心...哈哈哈...Bingo !!!
  XXX:004035F3 JNZ 0040364D ;不相同則跳躍到0040364D
  XXX:004035F5 DEC EDX

執行到XXX:004035F1那行時...

下d esi指令...可看到真正的註冊碼...123740*707773

下d edi指令...可看到輸入的註冊碼...1234567890123

當然也可將XXX:004035F3 JNZ 0040364D 這鍋指令改成NOP...

不過註冊碼已找出...就不用費事啦...


9.再次整理一遍:

  Master Converter v1.73
  
  http://www.owt.com/users/rsavard/software.html
  mc32.exe

  註冊碼: 123740*707773


^___^