工具 :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
還是那句老話, 覺得此軟體好就去註冊, 不好用就殺掉吧
才能有更好的軟體, 只有註冊 ,才能有更好的軟體,