15,471
社区成员
发帖
与我相关
我的任务
分享
DWORD dwID;
LPVOID pFunc = LoadLibraryA;
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
WaitForSingleObject( hThread, INFINITE );
//do
DWORD hDll;
lpAdd AddFunc;
GetExitCodeThread( hThread,&hDll );
HMODULE hmdll=(HMODULE)hDll;
if(hDll!=NULL)
{
AddFunc=GetProcAddress(hmdll,"Add");
DWORD aa= GetLastError();//这每次都是126(找不到模块)
if(AddFunc!=NULL)
{
AddFunc(2,3);
AfxMessageBox("遠程執行成功");
}
}
typedef int (*lpAdd)(int a,int b);
extern "C" __declspec(dllexport) int __stdcall Add(int a,int b)
{
return theApp.Add(a,b);
}
DWORD dwID;
LPVOID pFunc = LoadLibraryA;
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
WaitForSingleObject( hThread, INFINITE );
//do
DWORD hDll;
lpAdd AddFunc;
GetExitCodeThread( hThread,&hDll );
HMODULE hmdll=(HMODULE)hDll; //hDll是目标进程的Your.dll的HMODULE,在这里可并不存在
if(hDll!=NULL)
{
AddFunc=GetProcAddress(hmdll,"Add"); //这样是错误的,应该让GetProcAddress和上面的LoadLibraryA一样在目标进程里执行(它有两个参数,所以不好直接用CreateRemoteThread,再议)
DWORD aa= GetLastError();//这每次都是126(找不到模块)
if(AddFunc!=NULL)
{
AddFunc(2,3); //假设上面的GetProcAddress已解决,这样也是错误的,依然需要在目标进程调用,道理和上面一样
AfxMessageBox("遠程執行成功");
}
}
DWORD dwID;
LPVOID pFunc = LoadLibraryA;
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
WaitForSingleObject( hThread, INFINITE );
//do
DWORD hDll;
lpAdd AddFunc;
GetExitCodeThread( hThread,&hDll );
HMODULE hmdll=(HMODULE)hDll;
if(hDll!=NULL)
{
AddFunc=GetProcAddress(hmdll,"Add");
DWORD aa= GetLastError();//这每次都是126(找不到模块)
if(AddFunc!=NULL)
{
AddFunc(2,3);
AfxMessageBox("遠程執行成功");
}
}