VB怎么监视某一个API函数是否被调用?

goodname008 2003-07-15 05:59:05
VB怎么监视某一个API函数是否被调用?

就是说我的程序启动后,就开始监视某一个特定的API函数是否被别的程序调用?
如果别的程序调用了该函数,我想获得那个程序调用该函数所使用的参数!

能做到吗?
...全文
84 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodname008 2003-07-22
  • 打赏
  • 举报
回复
自己顶一下吧! :(
goodname008 2003-07-20
  • 打赏
  • 举报
回复
有办法的说说啊,这个问题困扰我很久了!
goodname008 2003-07-19
  • 打赏
  • 举报
回复
‘windows95系统程序设计大奥秘’这本书我也下载了.pdf,这部分我也看了看,但可能由于缺乏相关的知识,看得一知半解,但大致原理还差不多能理解。
书中所介绍的办法好像是已知我要拦载的程序,然后有针对地对该程序调用的API进行拦载。
而我要做的是监视某一个API,但并不知道什么程序将调用它,不论什么程序调用该函数我都想获得程序调用该API函数的参数。

有什么办法吗?
xinxinyu2000 2003-07-19
  • 打赏
  • 举报
回复
摘自‘windows95系统程序设计大奥秘’。
xinxinyu2000 2003-07-19
  • 打赏
  • 举报
回复
Spy 軟體只需要在
可執行檔的imports section ㆗找到import address table,改寫其內容,使其中的DWORD
改指向spy 程式碼即可,根本不必做什麼縫縫補補的工作。也不需要在原來的碼和被spy
軟體修改過的碼之間不斷㆞切來切去。可執行檔最終是直接呼叫spy 碼,所以唯一會加
重系統負荷的就是spy 軟體的運轉記錄碼(一 個函式)本身。記錄完畢之後,spy 軟體
就跳到原目標(利用JMP DWORD PTR [XXXXXXXX])。很簡單,不是嗎?
甚至即使「刺探」不是你的目的,你也可以利用這樣的計謀選擇性的攔截APIs。舉個例
子,你可能想要以你自己的碼取代DLL 中的一個函式。你很容易根據上述觀念做出一
個函式,兩個參數分別是被攔截的DLL 名稱和函式名稱。回返值則為一個指標,指
向.idata 中那個內含函式位址的DWORD。你的程式然後應該改寫這個DWORD,把準
備接手的那個函式的位址填進去。如果你要串連原呼叫函式,記得在改寫DWORD 之前
先儲存其內容(代表原函式位址)。
xinxinyu2000 2003-07-19
  • 打赏
  • 举报
回复
攔截API 的另一個方法是修改呼叫對象。只要改變被呼叫函式的最初一部份碼,spy 軟
體就可以讓自己在該函式執行之前先獲得控制權。兩種方法可以改變程式的前置碼
(prologue code),用以轉換控制權。第一同時也是最明顯的作法就是在第一個位元組㆖
放一個中斷點(breakpoint)指令,opcode 為0xCC。當此函式被呼叫,spy 軟體所安裝
的一個中斷服務常式就會獲得執行權並記錄它所要的資訊。然後spy 軟體再經由trap
flag single-step 機制,在CPU 真正執行㆒個指令之前,把原來的內容寫回第一個位元組
中。而在那個single-step 異常處理常式中,API spy 軟體重新插入一斷點的opcode,使
後續對此函式的呼叫能夠再被捕捉。
James0001 2003-07-19
  • 打赏
  • 举报
回复
居说可以做一个DLL,里面的函数名与要监视的API函数名相同?
* 不用
dll文件升级了呢?
* 没关系,只要那个函数还在就没问题。

(怎么有点像 FAQ 啊?)
ll_pp 2003-07-18
  • 打赏
  • 举报
回复
hook api
pandengzhe 2003-07-18
  • 打赏
  • 举报
回复
gz!
goodname008 2003-07-18
  • 打赏
  • 举报
回复
boywang(大力水手) 说的有道理。
不过有什么好的办法能解决吗?
boywang 2003-07-18
  • 打赏
  • 举报
回复
楼主你的方法不是很可靠哦。
如果dll文件升级了呢?相应的dll也要升级,维护起来真是噩梦!
James0001 2003-07-18
  • 打赏
  • 举报
回复
反正需要 DLL

问问 Bill Gates 吧,他用 BASIC 的时候,我们还不知道在哪儿呢。
说回来他不是 BASIC 起家的嘛,一定有什么鲜为人知的办法…… :P
goodname008 2003-07-18
  • 打赏
  • 举报
回复
是说只能用C做一个标准的DLL吗?
居说可以做一个DLL,里面的函数名与要监视的API函数名相同?

是这样吗?我对C不太熟,大家帮帮忙!!! :)
Shikari 2003-07-17
  • 打赏
  • 举报
回复
是的,我刚才说的是引入表方式,还有陷阱方式呢:)
要说的太多,还有工作要做,大家继续吧:)
boywang 2003-07-17
  • 打赏
  • 举报
回复
楼上的,如果程序调用loadlibrary来运行messagebox函数你说的就不行了。
Shikari 2003-07-17
  • 打赏
  • 举报
回复
我倒是能做,不过做起来特别麻烦,而且调试起来也麻烦,总容易死机。
你说你想拦截所有API,我个人认为很难,因为你要把所有API都列举在你的程序中。
这样,我给你一个思路,当某个程序运行时,我们假设他会调用MESSAGEBOX,那么在他的IMPORT TABLE中就会有该函数,当PE装载器将该文件装载时,会将MESSAGEBOX的函数地址写到该程序中,同时,我们在自己程序中能知道MESSAGEBOX的函数地址,然后枚举被HOOK的程序,当发现该程序中IMPORT TABLE中有指针指向MESSAGEBOX地址时,我们将该指针内容替换成我们的函数抵制,从而实现了拦截!
bbe 2003-07-17
  • 打赏
  • 举报
回复
http://tzsvc.xiloo.com/doc/files/knowapihook.htm
boywang 2003-07-17
  • 打赏
  • 举报
回复
继续顶!!!!!
goodname008 2003-07-17
  • 打赏
  • 举报
回复
HOOK我倒是略知一二,不过PE文件结构不太了解。
各位谁有现成的DLL,能给我一个吗,谢了!!

心里很难受:碰到了一个VB天生的缺陷。 :~(
Shikari 2003-07-17
  • 打赏
  • 举报
回复
不一定就要汇编吧?不过单独用VB,的确是做不到的,我以前就是用VB,不过,你可以这样,用C或者DELPHI编译一个DLL,然后用VB调用倒是可以的,不过虽然说的简单,但是做起来很难,相信楼上的几位也不一定能作到,你要懂HOOK,PE文件结构等知识:)
加载更多回复(22)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧