能力值:
( LV7,RANK:140 )
|
-
-
2 楼
你这问题有点多。。 1.你函数调用的afxmessagebox,在目标进程未必存在,不要调用可能不存在的函数; 2.即使目标进程存在afxmessagebox,你本地的导入表和远程进程的导入表未必相同,需要根据目标导入表修复你的函数调用; 3.弹出信息的内容文本只存在你本地,目标进程是没有的,需要在远程进程空间写入内容; 4.即使写入了内容,函数调用的时候传递的文本指针也要根据你写入的内容进行修复。 DLL没有以上问题,上面提到的都在dll里
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
楼上正解
最后于 2018-3-22 14:13
被AperOdry编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
其实我想写一个远程代码注入,找了一些源码包括在本站里找的源码,注入目标进程就崩溃,我是wind7-32系统,不知道问题出在哪里了
BOOL EnableDebugPrivilege()//获得进程权限
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return(FALSE);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
return TRUE;
}
DWORD WINAPI lpDllName(LPVOID lParam)
{
__asm{
push eax
push edx
mov eax, 0x00FE60A4
mov edx, 0x00E717F2
push 0
push 0
push eax
call edx
pop edx
pop eax
}
return 0;
}
void InjectToolclass::injectionProcess(DWORD *dwPId)
{
if (!EnableDebugPrivilege())//获得权限
{
MessageBox(NULL, L"获得权限失败", L"", MB_OK);
}
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,*dwPId);
if (hProcess == NULL)
{
MessageBox(NULL, TEXT("打开指定进程失败"), NULL, MB_OK);
return;
}
//进程分配内存
LPVOID lpDllNameAddr = VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT,PAGE_READWRITE);
if (lpDllNameAddr == NULL)
{
MessageBox(NULL, TEXT("指定进程中内存申请失败"), NULL, MB_OK);
return;
}
BOOL bRet = WriteProcessMemory(hProcess,lpDllNameAddr,lpDllName,4096,NULL);
if (!bRet)
{
MessageBox(NULL, TEXT("写入进程失败"), NULL, MB_OK);
VirtualFreeEx(hProcess, lpDllNameAddr,4096,MEM_DECOMMIT);
CloseHandle(hProcess);
return;
}
HANDLE hRemote = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpDllNameAddr, NULL, 0, NULL);
CloseHandle(hProcess);
return;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢 问题解决了
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
1楼正解
|