2013-11-25 64 views
2

可以說有一個簡單的c#應用程序正在運行,它以1的形式返回1 + 1的值,並且我有它的源代碼,但爲了好奇,我想改變它的內容不需要在運行時修改dll。是否有可能注入一個DLL的C#代碼並重寫返回值?

是否可以使用自己的.dll注入正在運行的應用程序,並將其在同一類&方法中返回的答案更改爲除2之外的某個值?

我已經知道我可以在程序運行時進入內存,理論上將「2」的答案更改爲其他內容,我很好奇如果我可以改變程序邏輯。

我也已經知道可以通過注入另一個.dll和嚮應用程序「添加」附加功能來「擴展」正在運行的應用程序,我對改變已經運行在原始代碼中的理論可能性感興趣.dll文件。

+0

只是爲了澄清,你想做'你的應用程序---->外部DLL函數調用 - >外部DLL函數調用結果 - (修改結果值在這裏) - >你的應用程序' –

+0

也看對我來說是廣泛的...是的,可以改變現在正在運行的任何代碼(除了已經在CPU管道中的微小部分)。要獲得實際的答案(即黑客工具之外的東西) - 請解釋你的真正目標是什麼。 –

+0

我想改變原來的dll的返回值,而不需要重新編譯,或者反彙編/修改/重組等。基本上,通過用新代碼注入外部DLL來改變應用程序的源代碼。我只是想知道在這一點上是否可能,我對如何不感興趣。 說明:通過在運行時更改源代碼,我不希望它在關閉應用程序時保持原樣。只是一次性更改(除非每次都注入)。 – Gallaxhar

回答

5

「改變」外部DLL中的代碼並不容易,但是如果你想修改一個參數或返回的結果並不難。攔截調用以修改輸入或輸出的過程稱爲「Hooking」。

在C#中有一個易於使用的庫,可以完成大部分工作,稱爲EasyHook,這將允許您攔截調用並用您自己的結果替換返回值。

static IntPtr CreateFile_Hooked(
    String InFileName, 
    UInt32 InDesiredAccess, 
    UInt32 InShareMode, 
    IntPtr InSecurityAttributes, 
    UInt32 InCreationDisposition, 
    UInt32 InFlagsAndAttributes, 
    IntPtr InTemplateFile) 
{ 
    try 
    { 
     Main This = (Main)HookRuntimeInfo.Callback; 

     lock (This.Queue) 
     { 
     if (This.Queue.Count < 1000) 
       This.Queue.Push(InFileName); 
     } 
    } 
    catch 
    { 
    } 

    // call original API... 
    return CreateFile(
     InFileName, 
     InDesiredAccess, 
     InShareMode, 
     InSecurityAttributes, 
     InCreationDisposition, 
     InFlagsAndAttributes, 
     InTemplateFile); 
} 

在上面的代碼需要傳遞的參數InFileName並記錄您的外部mointoring程序中以後使用。你可以很容易地捕獲從CreateFile(或你調用的任何真正的dll函數)返回的結果,將其修改爲任何你想要的,然後返回修改後的值。

對於原始函數的調用者,他們不知道他們從DLL調用中獲得的值在他們收到之前已被修改。

+0

謝謝,這解釋了很多,我會盡快選擇這個答案(4分鐘倒計時),如果你還在身邊,我現在很好奇爲什麼不能調整方法/類像返回結果? – Gallaxhar

+0

你可以修改一個類的代碼,但就像我說的那樣不容易。你需要[發出IL代碼](http://www.drdobbs。com/generate-code-at-run-time-with-reflect/184416570)來替換之前在程序集中的代碼(一個更加高級的話題,除了事實以外我什麼都不知道)它存在) –

+0

Scott Chamberlain我一直在看這個,我很好奇爲什麼你必須在「UInt32」部分寫一個「U」。你是否因爲理論上的64位程序而使用IntPtr? 因此,「CreateFile_hooked」類中的「CreateFile」是您正在連接的源.dll或程序中的類? 「UInt32 IsDesiredAccess」和其他類似於源代碼中的返回值參數名稱? – Gallaxhar

相關問題