C# inline-hook / api-hook

我查閱了一下相關C#方面的資料,卻沒有發現有提供過關於api-hook方面的資web

料包括應用庫由此本人編寫一套inline-hook的庫用於支持x6四、x86上的基於在c#

clr的公共語言,如: c#、c+/clr、vb.net 所有均可以使用該類庫改變底層api執api

行結果,如咱們須要製做抓包工具,或者攔截某個ActiveX對象內部調用的函數 app

用處普遍 有些人在製做「截包」工具時是經過使用SPI,但也能夠經過本技術實現函數

調用MessageBox.Show("Hello world", "Advapi32")時會跳轉到CB_MessageBox函數工具

MessageBox.Show()這個方法在下層中會調用MessageBoxW函數,不信咱們能夠試oop

 

[csharp]  view plaincopy
  1. [DllImport("user32", EntryPoint = "MessageBoxW", CharSet = CharSet.Unicode)]  
  2. public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);  
  3.   
  4. [STAThread]  
  5. static void Main(string[] args)  
  6. {  
  7.     InlineHook ich = new InlineHook();  
  8.     ich.Install(ich.GetProcAddress("user32", "MessageBoxW"), ich.GetProcAddress(new MessageBoxW(CB_MessageBox)));  
  9.     // MessageBox.Show("Hello world", "Advapi32");  
  10.     MessageBox(IntPtr.Zero, "Hello world", "Advapi32", 0);  
  11.     Console.ReadKey(false);  
  12. }  

試,上面的代碼執行後結果與最上面的相同。本類庫提供分別需求.net 2 / 4的兩種學習

 

不一樣的類庫,基本知足開發的須要 不過這一塊一直是C++方面的哦不過我相信之後ui

會是C#作這一塊,不過與其等到到時候再提供類庫 不如早些提供類庫,你們不須要this

去研究我類庫中怎麼去實現的,雖然類庫我稍微混淆了一下 不過大家要去學習也不

是很困難,不過我是懶得去討論在下層怎麼實現的 DLL是沒有打入版權的信息,很

簡單你在屬性中看不到任何信息,除了一個內部名稱以外沒有任何信息,因此你不

必擔憂 下面是解釋InlineHook中導出的函數接口及釋義。

 

InlineHook.GetProcAddress(string strLibraryName,  string strMethodName) // 取函數地址(庫文件, 函數名)

InlineHook.GetProcAddress(System.Delegate d) // 取函數地址(有效委託)

InlineHook.Install(System.IntPtr oldMethodAddress,  System.IntPtr newMethodAddress) // 安裝鉤子(源函數地址, 新函數地址)

 

InlineHook.Resume() // 恢復鉤子

InlineHook.Suspend() // 掛起鉤子

InlineHook.Uninstall() // 卸載鉤子

Sample: 

    CAT(inline-hook) http://pan.baidu.com/s/1kTKjFPt // 示例地址含類庫

每一個版本文件夾中都包含x86 / x64兩份不一樣的類庫,若是使用本類庫有疑惑的地方能夠在本人下方留言。

 

相關文章
相關標籤/搜索