INT_PTR MainDlg::OnSelectExecutable( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { std::wstring path; if (OpenSaveDialog( L"All (*.*)\0*.*\0Executable image (*.exe)\0*.exe\0", 2, path )) SetActiveProcess( 0, path ); else _procList.reset(); _profileMgr.config().processMode = _newProc.checked() ? NewProcess : ManualLaunch; UpdateInterface( ); return TRUE; }
INT_PTR MainDlg::OnSelChange( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { // Process selection if (LOWORD( wParam ) == IDC_COMBO_PROC) { DWORD pid = (DWORD)_procList.itemData( _procList.selection() ); auto path = _procList.selectedText().substr( 0, _procList.selectedText().find( L'(' ) - 1 ); SetActiveProcess( pid, path ); UpdateInterface(); } return TRUE; }
INT_PTR MainDlg::OnSelChange( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { if (LOWORD( wParam ) == IDC_COMBO_PROC) { HWND hCombo = GetDlgItem( hDlg, LOWORD( wParam ) ); DWORD pid = (DWORD)ComboBox_GetItemData( hCombo, ComboBox_GetCurSel( hCombo ) ); SetActiveProcess( false, nullptr, pid ); } // Update available options else if (LOWORD( wParam ) == IDC_OP_TYPE) { int idx = ComboBox_GetCurSel( GetDlgItem( hDlg, LOWORD( wParam ) ) ); SetMapMode( idx == 0 ? Normal : Manual ); } return (INT_PTR)TRUE; }
INT_PTR MainDlg::OnNewProcess( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { OPENFILENAMEW ofn = { 0 }; wchar_t path[MAX_PATH] = { 0 }; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = NULL; ofn.lpstrFile = path; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = TEXT( "All (*.*)\0*.*\0Executable image (*.exe)\0*.exe\0" ); ofn.nFilterIndex = 2; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST; if (GetOpenFileName( &ofn )) SetActiveProcess( true, ofn.lpstrFile ); return (INT_PTR)TRUE; }
/// <summary> /// Load configuration from file /// </summary> /// <returns>Error code</returns> DWORD MainDlg::LoadConfig( const std::wstring& path /*= L""*/ ) { auto& cfg = _profileMgr.config(); if (_profileMgr.Load( path )) { // Image for (auto& path : cfg.images) LoadImageFile( path ); // Process if (!cfg.procName.empty()) { if (cfg.processMode != Existing) { SetActiveProcess( 0, cfg.procName ); } else { std::vector<DWORD> pidList; blackbone::Process::EnumByName( cfg.procName, pidList ); if (!pidList.empty()) { auto idx = _procList.Add( cfg.procName + L" (" + std::to_wstring( pidList.front() ) + L")", pidList.front() ); _procList.selection( idx ); SetActiveProcess( pidList.front(), cfg.procName ); } } } // Process mode _exProc.checked( false ); _newProc.checked( false ); _autoProc.checked( false ); switch (cfg.processMode) { case Existing: _exProc.checked( true ); break; case NewProcess: _newProc.checked( true ); break; case ManualLaunch: _autoProc.checked( true ); break; } // Fix injection method if (cfg.injectMode >= Kernel_Thread && !blackbone::Driver().loaded()) cfg.injectMode = Normal; // Update profile name if (!_defConfig.empty()) _status.SetText( 0, blackbone::Utils::StripPath( _defConfig ) ); } // Default settings else { _exProc.checked( true ); } UpdateInterface(); return ERROR_SUCCESS; }
INT_PTR MainDlg::OnInit( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { _hMainDlg = hDlg; // Set dialog title SetRandomTitle(); /*#ifdef _M_AMD64 SetWindowText( hDlg, L"Xenos64" ); #endif*/ // Fill inject methods HWND hOpTypeList = GetDlgItem( hDlg, IDC_OP_TYPE ); ComboBox_AddString( hOpTypeList, L"Native inject" ); ComboBox_AddString( hOpTypeList, L"Manual map" ); ComboBox_SetCurSel( hOpTypeList, 0 ); EnableWindow( GetDlgItem( hDlg, IDC_CMDLINE ), FALSE ); EnableWindow( GetDlgItem( hDlg, IDC_WIPE_HDR ), FALSE ); EnableWindow( GetDlgItem( hDlg, IDC_LDR_REF ), FALSE ); EnableWindow( GetDlgItem( hDlg, IDC_MANUAL_IMP ), FALSE ); EnableWindow( GetDlgItem( hDlg, IDC_IGNORE_TLS ), FALSE ); EnableWindow( GetDlgItem( hDlg, IDC_NOEXCEPT), FALSE ); // Set icon HICON hIcon = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( IDI_ICON1 ) ); SendMessage( hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon ); SendMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon ); ConfigMgr::ConfigData cfg; if (_config.Load( cfg )) { // Image if (!cfg.imagePath.empty()) { Edit_SetText( GetDlgItem( hDlg, IDC_IMAGE_PATH ), cfg.imagePath.c_str() ); LoadImageFile( cfg.imagePath.c_str() ); } // Process if (!cfg.procName.empty()) { DWORD pid = 0xFFFFFFFF; if (!cfg.newProcess && !cfg.procName.empty()) { std::vector<DWORD> procList; blackbone::Process::EnumByName( cfg.procName, procList ); pid = !procList.empty() ? procList.front() : 0xFFFFFFFF; } SetActiveProcess( cfg.newProcess, cfg.procName.c_str(), pid ); } if (!cfg.procCmdLine.empty()) SetDlgItemTextW( _hMainDlg, IDC_CMDLINE, cfg.procCmdLine.c_str() ); if (!cfg.initArgs.empty()) SetDlgItemTextW( _hMainDlg, IDC_ARGUMENT, cfg.initArgs.c_str() ); if (!cfg.initRoutine.empty()) SetDlgItemTextW( _hMainDlg, IDC_INIT_EXPORT, cfg.initRoutine.c_str() ); if (cfg.unlink) Button_SetCheck( GetDlgItem( _hMainDlg, IDC_UNLINK ), TRUE ); if (cfg.manualMap) ComboBox_SetCurSel( GetDlgItem( _hMainDlg, IDC_OP_TYPE ), 1 ); SetMapMode( cfg.manualMap ? Manual : Normal ); MmapFlags( cfg.manualMapFlags ); } return (INT_PTR)TRUE; }