好的,我會盡量讓它快速。我正試圖學習如何在另一個進程中注入DLL。目前,我只是在打開計算器時試圖檢測何時輸出消息。我心中已經寫了下面的DLL:DLL注入| GetProcAddress返回NULL
#include <windows.h>
#include <iostream>
using namespace std;
extern "C"{
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
cout << "I'M NOT WORKING " << endl;
// Bunch of code...
return CallNextHookEx(0, nCode, wParam, lParam);
}
void ASimpleFunc(){
cout << "DLL WORKING" << endl;
}
}
這裏是我的注射器(嗯......它只是試圖加載此刻的DLL)。
#include <windows.h>
#include <iostream>
using namespace std;
typedef LRESULT (*CBTProc)(int,WPARAM,LPARAM);
typedef void (*ASimpleFunc)();
int main()
{
// My two functions...
LRESULT _CBTProc;
ASimpleFunc _ASimpleFunc;
HMODULE hDll = LoadLibrary("myDLL.dll");
if(!hDll){
cout << "DLL FAILED TO LOAD" << endl;
}else{
cout << "DLL LOAD SUCCESS" << endl;
// This one is working
_ASimpleFunc = (ASimpleFunc)GetProcAddress(hDll, "ASimpleFunc");
// This one is not working
_CBTProc = (CBTProc)GetProcAddress(hDll, "CBTProc");
if(!_ASimpleFunc || !_CBTProc){
cout << "UNABLE TO CALL HOOK" << endl;
}else{
// other code...
}
}
return 1;
}
任何想法?
編輯:這不是100%的代碼。我拿出了一些顯而易見的東西,比如DLLMain以及一些不直接與我的問題交互的東西。
好吧,我沒有把DLLMain,因爲它似乎很明顯,它在那裏。然而,你的意思是我應該只使用GetProcAddress作爲DLLMain,而DLLMain應該是調用CPTProc的那個。 這是正確的嗎? –
是的,你在'DLLMain'中執行遠程進程中的鉤子。通過使用LoadLibraryA調用另一個進程的CreateRemoteThread並將DLL傳遞給該函數,可以讓遠程進程調用DLLMain。 – sean