|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-07-11, 07:59 PM | #1 (permalink) |
榮譽會員
|
軟體 - 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打開了 |
__________________ |
|
送花文章: 3,
|