Издевательство над окнами nezumi Спецвыпуск: Хакер, номер #058, стр. 058-024-4 return -1; } // получаем хэндлы интересующих нас дочерних окон EnumChildWindows(me_hwnd, &EnumChildWindowsProc, 0); // получаем имя пользователя и, если оно недостаточно длинное, // вводим имя хакера по умолчанию ;) while(1) { // получит введенное имя SendMessage(username, WM_GETTEXT, MAX_STR, (int) username_buf); if (strlen(username_buf)>=0xA) break; else { SendMessage(username, WM_SETFOCUS, 1, 0); SendMessage(username, WM_SETTEXT, 0, (int) &MY_NAME); SendMessage(username, WM_KILLFOCUS, 1, 0); } } // вводим сгенерированный номер в окно ломаемого приложения SendMessage(regnum, WM_SETTEXT, 0, (int) regnum_buf); // указываем, что этот номер - поддельный SendMessage(hackreg, WM_SETTEXT, 0, (int) HACKREG); // нажимаем на кнопку "Ввод" SendMessage(input_but, WM_SETFOCUS, 1, 0); SendMessage(input_but, BM_SETSTATE, 1, 0); PostMessage(input_but, WM_KILLFOCUS, 0, 0); // сваливаем отсюда return 0; } Дефейсим калькулятор и другие программы #define s "Hello, World!" #define _EVENT_ 10 #define _PER_ 10 #define _N_ 5 HWND h=0; main(int argc, char **argv) { int a; HDC dc; RECT rect, fill_rect; HBRUSH br; HFONT font; char buf[100]; h=FindWindow(0, "Калькулятор"); //h=FindWindow(0, "Обработчик команд Windows NT"); //h=FindWindow(0, "Командная строка"); if (argc > 1) h=FindWindow(0, argv[1]); if (h==0) return -1; dc = GetDC(h); if (dc) { br=CreateSolidBrush(RGB(69,0,0)); rect.left=1; rect.right=1000; rect.top=1; rect.bottom=1000; GetClientRect(h, &rect); font=CreateFont(rect.bottom/2,rect.right/strlen(s),0,0,100,0,0,0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,FF_MODERN, "Comic Sans MS"); fill_rect.top=3*rect.bottom/4; fill_rect.bottom=rect.bottom-10; fill_rect.left=10; fill_rect.right=10; ReleaseDC(h, dc); for (a=0; a < 255; a++) { printf("\r%03d",100*a/255); if (dc = GetDC(h)) { SelectObject(dc, font);SetBkMode(dc, TRANSPARENT); SetTextColor(dc, rand()); //RGB(255-a,0,0)); TextOut(dc, 0, rect.bottom/8, s ,strlen(s) ); ReleaseDC(h, dc); } SetWindowText(h, ltoa(100*a/255,buf,10)); Sleep(69); } SendMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0); Sleep(69); SendMessage(h, WM_SYSCOMMAND, SC_RESTORE, 0); SetWindowText(h, "Hello, Sailor!"); for (a=0; a < 10; a++) {ShowWindow(h, a & 1); Sleep(69);} }else printf("-ERR\n"); } При пересылке сообщения от одного приложения другому механизмы аутентификации не задействуются! Получить дескриптор интересующего тебя приложения - самое простое, геморрой начинается с дочерними окнами и их элементами управления. Для эмуляции ввода сначала нужно установить фокус (WM_SETFOCUS), а потом убить этот фокус (WM_KILLFOCUS), так как кнопка срабатывает в момент отпускания. |