史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式 & 網頁設計技術文件 (http://forum.slime.com.tw/f138.html)
-   -   pediy之畫貓篇 (http://forum.slime.com.tw/thread179863.html)

psac 2006-07-11 07:59 PM

pediy之畫貓篇
 
pediy是高深的東東,要進化成pll621老大類的"超級達人",沒幾年的努力+天賦是不行地,8過似我等超級菜鳥,玩玩幾個api為軟件"加點料"還是可以地,這不,偶對著教程(虎),欺負了一下radasm(畫成了貓:),所以就叫"畫貓"篇了^_^.這篇文章沒啥新意,希望對還沒有入門的菜鳥們一點幫助吧.
大家知道radasm在9x下不能輸入俺們的方塊字(會死得很慘),我又沒能力修正其編輯器(看雪上的修正版雖然能輸入但不能編輯),所以偶就想給他增加個功能.呼叫外部編輯器打開它編輯了.偶用到的東東有trw2000,ollydbg,lordpe,exescope,hedit(任意編輯器),我還用到了w32dasm,8過不用也可以.
初探:研究可行性,在radasm的工程視窗有個右鍵表菜單,最適合加上打開的功能了(8錯8錯,用exescope加上個"用其他編輯器打開"呵呵,但現在他啥也幹不了,別急,我們還沒加功能呢),用trw載如radasm,下中斷點bpx createfilea(這個api用於打開文件,文件操作少不了他)先bd*然後g,就出來了主界面,打開一個工程,用ctrl+m調出主界面,be*,然後雙擊一個文件,不出所料,中斷了下來我發現壓入的地址是:440F3E,D 440F3E,果然出來了文件地址,然後G,又打開個別的文件,發現壓入的還是440F3E(興奮呀,這個太簡單了,文件名地址是不變的)加上我們的代碼,呼叫外部編輯器打開就可以了,有三個函數供我們使用:WINEXEC,ShellExecute,CreateProcess,最後一個參數太多,偶頭疼,第一個簡單,不過太呆板,我就選擇了第二個,其參數如下

HINSTANCE ShellExecute(

HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);

所以我們可以改成

PUSH 5 // SW_SHOW
PUSH 0
PUSH 0
PUSH 440F3E //文件地址
PUSH XXXXXX //"OPEN" 的地址
PUSH O
CALL ShellExecuteA
就可以了.
代碼放到哪兒呢?,這麼短的代碼放在文件頭0X300處就8錯了.先別急著寫,我們先找表菜單呼叫的地方:
:bpx sendmessage(注意不是sendmessagea我就在這兒栽了個跟頭)
:BD*
:G
出來了主界面,打開一個工程CTRL+M調出TRW,
:BE*
:G
點擊一個表菜單(HELP:)項斷了下來,
:PMODLE
幫助交談視窗出來了,點擊確定,回到了TRW我看了看沒有CMP,JNZ等語句,按F12->F8
回到了上一個呼叫處,呵呵,終於找到地方了:
:0042EF62 55 push ebp
:0042EF63 8BEC mov ebp, esp
:0042EF65 81C400FFFFFF add esp, FFFFFF00

* Possible Ref to Menu: MenuID_03E6, Item: "苞?(N) Alt+Ctrl+N"
|
:0042EF6B 3D419C0000 cmp eax, 00009C41 //是否是40001*****改成CALL 400300
:0042EF70 750D jne 0042EF7F //不是就轉到下邊一段
:0042EF72 FF7508 push [ebp+08]
:0042EF75 E88FAAFFFF call 00429A09
:0042EF7A E932040000 jmp 0042F3B1 //轉到返回

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042EF70(C)
|

* Possible Ref to Menu: MenuID_03E6, Item: "S"
|
:0042EF7F 3D429C0000 cmp eax, 00009C42 //從上邊一段跳過來的
:0042EF84 750C jne 0042EF92
:0042EF86 6A00 push 00000000
:0042EF88 E838ECFEFF call 0041DBC5
:0042EF8D E91F040000 jmp 0042F3B1

所以我們在400300處應該寫上

:CMP EAX,9C77 //我定義的表菜單ID是40055,16進制就是9C77
:JNE 0040032A //
;PUSH 5 //SW_SHOW
;PUSH 0
;PUSH 0
;PUSH 440F3E //文件地址
;PUSH 400390 //"OPEN" 的地址
;PUSH O
;CALL ShellExecuteA
:JMP 0042F3B1
0040032A:CMP EAX,9C41
:RET

把上邊的那句3D419C0000 cmp eax, 00009C41
改成:CALL 00400300
然後吧400390改成"OPEN"
一切OK,
打開RADASM然後打開一工程(事先把ASM與INC文件的預定打開方式為EDITPLUS)
先雙擊一個文件(只有雙擊後地址才會出現),然後右鍵"用外部編輯器打開"
果然呼叫EDITPLUS打開了


所有時間均為台北時間。現在的時間是 04:30 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1