2013-07-22 65 views
0

我不知道這是可能的,出於安全原因,但它可能是。附加到另一個進程中的模塊並調用公共方法?

我在我們的一個應用程序中發現了一個問題,修復它的一個方法是在進程內模塊上調用公共方法。

因此,我的應用程序(我無法修改)是使用名爲'SSOSettingsFileReader.dll'的引用dll,在SSOSettingsFileReader.dll中是一個名爲'ClearCache'的公共方法。我想編寫一個循環遍歷所有進程的控制檯應用程序,在每個名爲SSOSettingsFileReader的進程中搜索模塊並在每個進程上調用「ClearCache」。

這可能嗎?

到目前爲止,我可以得到模塊:

Process[] processes = Process.GetProcesses(); 

foreach (Process p in processes) { 
    if (p.ProcessName == "BTSNTSvc") { 
     ProcessModuleCollection modules = p.Modules; 

     foreach (ProcessModule m in modules) { 
      if (m.ModuleName == "SSOSettingsFileReader.dll") { 
       // What to do here? 
       // SSOSettingsFileReader sso = SomeWayToConvertModule(m)ToSSOSettingsFileReader(); 
       // sso.ClearCache(); 
      } 
     } 
    } 
} 

感謝

附:我正在使用VS2005和.Net2.0,但不僅限於此。

+0

在應用程序中注入某些IL將更容易。 – leppie

回答

0

將代碼注入進程並不完全是修復錯誤的最可靠方法。如果你確定沒有其他選擇,那麼這是可能的。

CreateRemoteThread是你需要的核心,這就是你如何在遠程過程中執行代碼。該函數需要一個線程入口點,因此您可能需要編譯一個包裝函數,並將其添加到目標進程中。 MSDN文檔涵蓋了安全性要求。一般來說,用戶將這個調用注入到他們擁有的進程中應該沒有問題。

相關問題