作者UNARYvvv (有趣生活)
看板C_and_CPP
標題Re: [問題] 關於hook特定api的問題
時間Thu Jun 11 17:47:31 2009
※ 引述《stellvia7 (stellvia)》之銘言:
: 請問假若我要Hook某一特定的API, 是先創建DLL檔,再用createRemoteThread將自己的DLL
: 藉由 LoadLibraryA()load到target的memory space.
: 而我們的DLL中的function會查出我們要Hook api的address, 再將此address做backup,在
: jump到我們DLL中的其他function?
從敘述來看這 DLL 是自己建立的,所以..
: 假若是這樣那請問. 我們怎麼知道我們要hook那特定api的function name?
"function name"?
要 hook 哪個 API 也是自己決定的不是嗎
比如你想 hook 開檔的動作
可能就會去攔 kernel32.dll 的 CreateFileW 這個 API
那要取得 CreateFileW API 的實際位址可以用
GetProcAddress(GetModuleHandle("kernel32"),"CreateFileW")
所以原本你對想 hook 的相關 API(s) 就要熟悉了
不然也不知道該 hook 哪個 API、或者是有所遺漏
: 再來要jump到我們要replace 的function 的address該怎麼查詢?(ps.replace functino 已經load到taget的
: memory space 中了).
假設你已經注入自己的 DLL 到 target process 了
那 replace function 也在自己 DLL 內吧,所以位址自己也知道呀
不知道這邊說的查詢是由哪一方進行查詢?
: 感恩 假若第一段有錯 請指正
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.53.23
※ 編輯: UNARYvvv 來自: 140.115.53.23 (06/11 17:48)
推 stellvia7:我的意思是說假若我要hook的taget中的function 是那一 06/11 23:18
→ stellvia7:target自己定義的 而不是 06/11 23:19
→ stellvia7:類似像kernel.dll裡面的function 06/11 23:20
→ UNARYvvv:如果是對沒有導出的函式, 那編譯完統統編在一團了, 06/12 00:48
→ UNARYvvv:拿 IDA Pro 去開開看吧...orz 06/12 00:48
→ UNARYvvv:另外對這樣的狀況也沒有所謂的 function name 06/12 00:51
→ UNARYvvv:不過如果那個程式是 Debug 版或許有包含一些 symbol 資訊 06/12 00:52