放上Ken的一篇smc教程!也可以參考看雪放過Heibow的一篇破aspack2000的文章! (4千字)

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

工具 :softice,offset converter,ultraedit ,procdump,
      offset converter 的 URL:
        http://kontum.vietmedia.com/protools/files/utilities/oc.zip

程式 : movie play 2.51
    http://www.titanic.cc/movplay/moveplay.htm

前言:

看了那篇用 self modifying code 的技巧
我又試了一下其他的軟體,以前拿不掉的 nag screen
現在可以掉了,真是太棒了.
再講一下什麼是 self modifying code,
就是找一段原來的程式,所沒有用到的程式碼,
加入你自己的 code, 而且還能修改他的 code
我想也可以用這個來設變數吧,
當我學到了這個技巧,我只能說,
傑克, 這真是太神奇了

但是這個程式呢? 我只是拿掉他的 nag screen 而已
其他的限制呢 ? 我想對大家來說也不是問題吧,所以
我就不寫了.

ok, go!!

1:程式一執行就出現一個 nag screen, 叫你趕快去註冊
  的確討厭,而今天所說的就是要拿掉他.
  如何拿掉呢 ?
  先離開 movie play, 按 ctrl-d 進入 softice,
  下 bpx createdialogindirectparama , 這是在攔截 dialogbox的
  當然不只這個  API 啦,不過 movie play 是用這個
  按  F5,回到 windows, 執行 movie play, 立刻被攔住,
  按一下 F12, 就回到 movie play  的領空了.
  在這邊
  CS:00420C33    CALL 00420897
  CS:00420C38    CMP  EAX,EDI  <--- 出來光棒停在這邊
  CS:00420C3A    JZ  420C8E   
 
  此時 eax =1, edi=0,下意識的下 r eax 0
  將 eax 改成 0, 按 F5,竟然 nag screen 不見了
  那我想大家一定想說 那還不簡單, 把 jz 改成 jmp 就好了啊
  可惜事情沒有這麼簡單, 因為 下 bpx 00420c38 ,
  會發現 cs:00420c38 會走兩次, 第一次,若 eax = 0,
  則 nag 會不見,第二次,若 eaq=0 ,則主視窗也離開了
  所以啦 , 不能這樣改,
  不過 cs:00420c33 好像是關鍵喔, 在一次執行 movie play
  被  softice 攔住,按一下 F12,
  就先下 bd* , 在下  bpx 00420c33 , 按 F5 ,回到 windows,結束
  movie play

2:執行 movie play , 被  softice 攔住, 停在 cs:00420c33
  按 F8 進去 trace, 開始按數下 F10,
  到了 CS:00420AA5  SETNZ AL
      CS:00420AA8  MOV ECX,[EBP-C]
      CS:00420AAB  POP EDI
      CS:00420AAC  POP ESI

當然, 在 CS:00420AA5 這一行, 若令 AL =1, nag screen 就會出來
若令 al =0 , nag 就不會出來了 , 可是也不能直接修改, 因為這邊會走兩次
若改這邊, 主程式也出不來了.

3:那應該如何是好呢 ? 就用 self modifying code 的技巧, 加入自己的 code
  既然要加入自己的 code, 首先就要找一段原來程式沒有用到的程式碼
  而且又要足夠空間可容納我們所要加進去的程式碼...那應該找哪裡呢 ?
  都好, 只要不妨礙原來程式運作就行了 .

4:用 symbol loader 載入 movie play
  一開始在進去都是一些 invalid , 按一下 F8
  在這邊
  CS:0041392E    MOV EBP,ESP
  CS:00413930    PUSH FF
  CS:00413932    PUSH 00431A60
  看一下上面的 CODE
  好像一些上面的 code 沒走到
  如 CS:00413900    MOV EDI,[EBP+14]
    CS:00413903    TEST EDI,EDI
  下 bpx 413900 , 執行一下,試一下里面所有的功能,撥放一下
  真的沒走到這邊耶, 那就準備改這邊的值了,離開 movie play

5:執行 movie play,
  到了 CS:00420AA5  SETNZ AL
      CS:00420AA8  MOV ECX,[EBP-C]
      CS:00420AAB  POP EDI
  光棒停在 cs:00420aa5 時, 此時 AL=0, 但是隻要一走完
  cs:00420aa5, AL=1 了, 我們希望第一次走到這邊 AL=0,
  第二次走到這邊 AL=1 , 這是我們希望的, 因為這樣
  nag screen 就會不見了 .
  先把附近的機械碼抄起來, 是 0f95c08b4df45f5e
  現在想把 setnz al 改成 jmp 413900
  所以下  a, 就是組譯了, 在下 jmp 413900,
  按兩次 enter, ok,改好了,抄一下機械碼,是E9562EFFFF
  現在按一下 F10,
  就跳到 CS:413900 了

6:到了這邊 CS:413900 當然也要改啊,
  要改成什麼呢 ?
  首先要把 CS:00420AA5  恢復成 SETNZ AL
  不然會有麻煩, 但是要如何恢復呢 ?

  下  a, 在下 mov dword ptr [420aa5],8b0c950f  ,按一下 enter
              mov byte ptr [420aa9],4d        ,按一下 enter
              jmp 00420aa8                    ,按兩下 enter
  這就是我們所加入的碼了, 現在來分析一下,
  為什麼要下 8b0c950f 呢? 仔細看一下原本剛剛抄下的機械碼
  CS:00420AA5  SETNZ AL 的機械碼是 0f95c08b
  現在要恢復, 當然是讓他復原了, 不過這個順序要反過來
  所以變成了  8b0c950f ,
  但是剛剛在 CS:00420AA5 把他改成 jmp 413900
  是 5 byte , 而mov dword ptr [420aa5],8b0c950f 只是 4 byte 而已
  所以還要再下一行 mov byte ptr [420aa9],4d
  這樣就恢復了,
  再來就跳回去原來的地方,繼續執行了
  而我改的這幾行,的機械碼也抄起來吧
  滿長的喔,
  c705a50a
  42000f95
  c08bc605
  a90a4200
  4de992d1
  0000
  ,按一下 F5, 就沒問題了...已經去掉 nag screen 了

7: 所以了,先關掉 movie play, 拿起 ultra edit 去改了
  找  0f95c08b4df45f5e
  改  E9562EFFFF------ 
  再來呢 ?  我好像是忽略了什麼了, 糟了,我忘記抄下
  cs:413900 附近的機械碼了 , 當然可以再執行一次,再去抄下來
  不過這邊我介紹另一個 tool, offset converter
  執行他, 去開啟 movie play, 輸入 413900,
  他就跑出來一個值了 是13900 , 當然是 16 進位值
  所以用 ultra edit 去找到這個值,
  拉著卷軸, 拉到了 13900 , 就可以開始改了
  改成
  c705a50a
  42000f95
  c08bc605
  a90a4200
  4de992d1
  0000
  這樣就可以了

8: 不過這個軟體有使用期限, 這樣做只是去掉 nag screen 而已
  沒有去掉其他限制, 不過這也不是問題, 這個就請大家自行去試了
  因為此篇只要講的是 self modifying code
  還是那句老話, 覺得此軟體好就去註冊, 不好用就殺掉吧
  才能有更好的軟體, 只有註冊 ,才能有更好的軟體,

相關文章