15,474
社区成员




//创建远程线程
BOOL CAutoParent::CreateRemoteThreadEx(HANDLE hProcess, LPTHREAD_START_ROUTINE pThreadProc, LPVOID pRemoteBuf)
{
HANDLE hThread = NULL;
FARPROC pFunc = NULL;
hThread = CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL);
if(hThread == NULL)
{
//"MyCreateRemoteThread() : CreateRemoteThread() 调用失败!错误代码: [%d]/n", GetLastError()
return FALSE;
}
ResumeThread(hThread);
}
//DLL注入
BOOL CAutoParent::InjectDll(DWORD dwPID, char *szDllName)
{
//DLL路径字符长度
int nStringLen = strlen(szDllName)+1;
//打开进程
//PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION
HANDLE HandleProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, dwPID);
if(HandleProcess == NULL) return FALSE;
//申请内存
LPVOID pRemoteBuf = VirtualAllocEx(HandleProcess, NULL, nStringLen, MEM_COMMIT, PAGE_READWRITE);
//写入路径
WriteProcessMemory(HandleProcess, pRemoteBuf, szDllName, nStringLen, NULL);
//LoadLibraryA
FARPROC pThreadProc = GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "LoadLibraryA");
debugViewOutput(L"pid:%d ads1:%x ads2:%x len:%d", dwPID, (DWORD)pRemoteBuf, (DWORD)pThreadProc, nStringLen);
//执行注入
BOOL bValue = CreateRemoteThreadEx(HandleProcess, (LPTHREAD_START_ROUTINE)pThreadProc, pRemoteBuf);
debugViewOutput(L"GetLastError :%d", GetLastError());
if(!bValue)
{
///debugViewOutput(L"CreateRemoteThreadEx() 调用失败!错误代码: [%d]", GetLastError());
return FALSE;
}
//VirtualFreeEx(hProcess, pRemoteBuf, 0, MEM_RELEASE); CloseHandle(hProcess);
return TRUE;
}
bool AdjustPrivileges() {
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
else return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
/* Adjust Token Privileges */
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle(hToken);
return true;
}