首先,我不想注入一個dll。我想使用WriteProcessMemory()注入代碼(如果這甚至可能)。我已經使用ReadProcessMemory(),所以我認爲寫作不是什麼大不了的事。
好吧,讓我們說有在TargetProgram.exe + D78C612
的功能,讓我們說,它可以被稱爲是這樣的:C++:代碼注入調用函數
push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
我究竟將如何做到這一點用WriteProcessMemory的()?
我的意思是我在哪裏可以找到一段可以注入我的代碼而不會覆蓋重要內容的部分。最重要的是,我將如何調用這個函數?
只需在活動例程中跳轉到我的代碼,之後跳回並刪除它?但是,我如何找到這個例程呢?
這麼多問題,我不知道如何開始......我希望你能幫助我。 :)
如果你有時間,我真的很想看到一個函數調用注入的示例代碼。
我有一個類似的問題作爲OP,但我沒有得到你的第一WriteProcessMemory調用。作爲local_address,我可以傳遞函數的地址,但我無法在下一個參數中傳遞它的長度。只是因爲我不知道它有多大(因爲編譯器還沒有編譯它)。那麼WriteProcessMemory是否適合從我的過程寫入另一個函數/代碼?編輯:或者是彙編程序中唯一的關鍵寫入函數(我可以計算它)而不是C++? – Kra
@Kra在大多數情況下,您不能將C函數複製到另一個進程,因爲跳轉地址將被破壞。您必須修復relocs或編寫可重定位的代碼。在這兩種情況下,你都必須使用匯編語言。爲了回答你關於函數代碼長度的問題,我認爲你可以嘗試禁用優化並寫兩個函數f1()和f2(),其中f2代碼中的f1。然後你可以從f2的地址中減去f1的地址,[希望]得到f1的長度。但函數大小是你問題最少的地方。 – Max
明白了。謝謝。 – Kra