Example #1
0
TargetInfo::TargetInfo(pid_t pid, const char *executable)
{
    // Process
    m_pid = pid;
    m_executable = executable;
    // Configuration
    m_threaded_rts = IsThreadedRTS(executable);
    m_profiling_rts = IsProfilingRTS(executable);
    m_is_64_bit = IsProcess64Bit(pid);
    // Extract name of the executable module
    const char *module_name = &executable[std::strlen(executable) - 1];
    while (module_name != executable)
    {
        if (* module_name == '/')
        {
            module_name++;
            break;
        }
        module_name--;
    }
    m_module = module_name;
    // We need a port for the task to be debugged
    if (task_for_pid(mach_task_self(), pid, &m_task_port) != KERN_SUCCESS)
        assert(!"Can't get port for task");
}
Example #2
0
VOID ListProcesses(VOID)
{
	DWORD cbNeeded, cProcesses;
	unsigned int i;
	HANDLE hProcess;
	HMODULE hMod;
	char szProcessName[MAX_PATH];
	char b[MAX_PATH];


	EnumProcesses(ProcessIDs, MAX_PROCESS * sizeof(DWORD), &cbNeeded);
	cProcesses = cbNeeded / sizeof(DWORD);
    for (i = 0; i < cProcesses; i++)
    {
		hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessIDs[i]);
		if (hProcess != NULL)
		{
			if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
			{
				if (IsProcess64Bit(hProcess, hMod) == TRUE)
				{
					GetModuleBaseNameA(hProcess, hMod, szProcessName, MAX_PATH);
					sprintf_s(b, MAX_PATH - 1, "%.08X - %s", ProcessIDs[i], szProcessName);
				}
				else
					goto next;
			}
			else
			{
				sprintf_s(b, MAX_PATH - 1, "%.08X - <unknown>", ProcessIDs[i]);
			}
			ComboxAdd(b);
			next:
				CloseHandle(hProcess);
		}
	}
}
Example #3
0
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_CREATE:
		//appendText(txtbox, TEXT("test\r\n"));
		break;
	case WM_COPYDATA:
		return (OnCopyData((COPYDATASTRUCT *) lParam));
		break;
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case ID_FILE_STARTHOOK:
			StartMessageHook();
			break;
		case ID_FILE_STOPHOOK:
			StopMessageHook();
			break;
		case ID_TESTMSGS_WM:
			SendWmSettext();
			break;
		case ID_TESTMSGS_WMCOM:
			SendWmCommand();
			break;
		case ID_PROC64TEST:
			if (_tcscmp(targetProcessId, _T("")) != 0) //if target pid was used
			{
				TCHAR tmp[500];
				TCHAR *stopStr;
				targetPid = (DWORD)_tcstol(targetProcessId, &stopStr, 10);
				BOOL current64bit = IsCurrentProcess64Bit();
				if (IsProcess64Bit(targetPid) && current64bit)
					_stprintf_s(tmp, _T("Target pid (%ld) is a matching 64 bit process\r\n"), targetPid);
				else if(!IsProcess64Bit(targetPid) && !current64bit)
					_stprintf_s(tmp, _T("Target pid (%ld) is a matching 32 bit process\r\n"), targetPid);
				else if (IsProcess64Bit(targetPid))
					_stprintf_s(tmp, _T("Target pid (%ld) is 64 bit process\r\n"), targetPid);
				else
					_stprintf_s(tmp, _T("Target pid (%ld) is 32 bit process\r\n"), targetPid);
				AppendText(txtbox, tmp);
				//ExtractResource(IDR_SETMH32, _T("SetMsgHook32.exe"));
				//_stprintf_s(tmp, _T(" %s %ld %d"), dll32bitName, (long)mainHwnd, targetPid);
				//RunResource(IDR_SETMH32, tmp);

				//MessageBox(0, , _T("64 bit Test"), 0);
			}
			break;
		case ID_FILE_SETTINGS:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProc);
			break;
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, DlgProc);
			break;
		case ID_FILE_CLEAR:
			SetWindowText(txtbox, _T(""));
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_HOTKEY:
		HotKeyPressed(wParam);
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_SIZE:
		{ //resize the txtbox when the parent window size changes
			int nWidth = LOWORD(lParam);
			int nHeight = HIWORD(lParam);
			SetWindowPos(txtbox, HWND_NOTOPMOST, txtboxSpacing, txtboxSpacing, nWidth-(txtboxSpacing*2), nHeight-(txtboxSpacing*2), SWP_NOZORDER|SWP_NOMOVE);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Example #4
0
void StartMessageHook()
{
	AppendText(txtbox, _T("Starting Message Hook\r\n"));
	//targetHwnd = FindWindow(targetClassname, NULL);
	
	TCHAR tmp[500];
	
	DWORD tid = 0;
	if (_tcscmp(targetHwndStr, _T("")) != 0) //if target HWND was used
	{
		TCHAR *stopStr;
		targetHwnd = (HWND)_tcstol(targetHwndStr, &stopStr, 10);
		tid = GetWindowThreadProcessId(targetHwnd, NULL);
		_stprintf_s(tmp, _T("Target Handle: %ld, and Thread Id: %ld\r\n"), targetHwnd, tid);
	}

	targetPid = 0;
	if (_tcscmp(targetProcessId, _T("")) != 0) //if target pid was used
	{
		TCHAR *stopStr;
		targetPid = (DWORD)_tcstol(targetProcessId, &stopStr, 10);
		tid = GetProcessMainThreadId(targetPid);
		_stprintf_s(tmp, _T("Target PId: %ld, and Thread Id: %ld\r\n"), targetPid, tid);		
	}
	
	InitMsgFiltersAndLookup();
	//InitializeMsgLookup();

	AppendText(txtbox, tmp);
	
	//block self/global msg hook
	if (tid == 0) {
		AppendText(txtbox, _T("Target thread not found\r\n"));
		return;
	}
	
	if (targetPid != 0) // handle various types of bit matching
	{
		BOOL current64bit = IsCurrentProcess64Bit();
		if (IsProcess64Bit(targetPid) && current64bit)
		{
			_stprintf_s(tmp, _T("Target PId (%ld) is a matching 64 bit process\r\n"), targetPid);
			SetCustomMsgHookDll(dll64bitName, dllProcName);
		}
		else if(!IsProcess64Bit(targetPid) && !current64bit)
		{
			_stprintf_s(tmp, _T("Target PId (%ld) is a matching 32 bit process\r\n"), targetPid);
			SetCustomMsgHookDll(dll32bitName, dllProcName);
		}
		else
		{
			if (current64bit)
				_stprintf_s(tmp, _T("Target PId (%ld) is a not matching 64 bit process.\r\n"), targetPid);
			else
				_stprintf_s(tmp, _T("Target PId (%ld) is a not matching 32 bit process.\r\n"), targetPid);
			AppendText(txtbox, tmp);
			TCHAR *dllname = dll32bitName;
			TCHAR *exename = _T("SetMsgHook32.exe");
			int setMsgHookRes = IDR_SETMH32;
			if (IsProcess64Bit(targetPid))
			{
				dllname = dll64bitName;
				exename = _T("SetMsgHook64.exe");
				setMsgHookRes = IDR_SETMH64;
			}
			_tcscat_s(tmp, 500, _T("Do you wish to open a new matching Message Hook Window?"));
			int mbResult = MessageBox(mainHwnd, tmp, _T("Message Hook"), MB_ICONQUESTION | MB_YESNO);
			if (mbResult == IDNO)
				return ;
			_stprintf_s(tmp, _T("%s %s 0 %d"), exename, dllname, targetPid);
			RunResource(setMsgHookRes, tmp);
			//EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_ENABLED);
			//EnableMenuItem(mainMenu, ID_FILE_STARTHOOK, MF_DISABLED | MF_GRAYED);
			_tcscat_s(tmp, 500, _T("\r\n"));
			AppendText(txtbox, tmp);
			PostQuitMessage(2);
			return;
		}
		AppendText(txtbox, tmp);
	}
	if (SetMsgHook(mainHwnd, tid))
	{
		EnableMenuItem(mainMenu, ID_FILE_STOPHOOK, MF_ENABLED);
		EnableMenuItem(mainMenu, ID_FILE_STARTHOOK, MF_DISABLED | MF_GRAYED);
		AppendText(txtbox, _T("Hook successfully initialized\r\n"));
	}
	else
		AppendText(txtbox, _T("Hook failed to initialize\r\n"));
}
Example #5
0
extern "C" __declspec(dllexport) BOOL IsCurrentProcess64Bit()
{
    return IsProcess64Bit(_getpid());
}