Как стать автором
Обновить

Электронный тест, варианты обхода

Обучаясь в институте я, конечно, сдавал множество контрольных, проверочных, курсовых работ, экзаменов и зачётов. Но, одна форма проверки знаний была мной сильно нелюбима – это электронные тесты. Не буду здесь описывать плюсы и минусы этого типа проверки знаний, скажу лишь, что против этой формы я был очень сильно.

Таким образом, в один прекрасный день созрела идея как-то облегчить себе сдачу тестов – взломать, обойти или что-то подобное. В интернете по этому поводу информации не то, чтобы не было, её не было совсем, то есть вообще. Сфера электронных тестов не пользуется популярностью у хакеров и прочих взломщиков.

Сложно сейчас вспомнить каким образом, но в руки ко мне попал файл из программы, достать его можно было лишь зная пароль к тесту. А пароль этот придумывает человек, создававший тесты (читай преподаватель). Это обычный текстовый файл и представляет он из себя экспорт списка всех вопросов и вариантов ответов к ним и выглядит он следующим образом:

Вопрос 1 …
— Ответ 1
— Ответ 2
— Ответ 3
+ Ответ 4
— Ответ 5
Вопрос 2 …
— Ответ 1
+ Ответ 2
+ Ответ 3
— Ответ 4
— Ответ 5

Не сложно догадаться, что к первому вопросу (Вопрос 1), правильным ответом был «Ответ 4», а ко второму (Вопрос 2), правильным ответом были: «Ответ 2» и «Ответ 3». Программа позволяла делать тесты с несколькими вариантами ответов. Многим одногруппникам этот файл показался счастьем и они начали его заучивать, кто вопросы/ответы, а кто и просто одни ответы. К слову сказать, файл этот мог достигать довольно больших размеров, там могло быть от 300 и до 1500 вопросов. Мне такая перспектива была не по душе, а сознание программиста подсказывало, что если есть такой файл, то что-то можно придумать, дабы облегчить свою жизнь в плане тестов.

В программе в случайном порядке отображаются вопросы из этого списка и варианты ответов из этого же списка, надо всего лишь найти возможность «прочитать», какой вопрос сейчас отображает программа, далее найти его в этом текстовом файле и отобразить каким-то образом правильный ответ.

Задача нетривиальная, учитывая то, что создавать программы я умел, но вот каким-то образом вмешиваться в другие программы знаний не было. После изучения литературы стало понятно, что без API программирования тут не обойтись.

Попробую пояснить в картинках, каждая программа состоит из окон, есть главное окно программы, и куча дочерних окон, у которых, в свою очередь, тоже могут быть дочерние окна:

Вот так вот выглядит окно программы:



А вот так, упрощённо, выглядят окна в программе (помечены красным):



Есть так же, хорошая программа, называется Microsoft Spy++, входит в комплект среды разработки программного обеспечения Visual studio. Ей можно посмотреть в какой иерархии находятся эти окна, что они из себя представляют и прочее. Итак:



Что мы видим? Первой строчкой главное окно программы и имя этого окна «tTester – Информационная безопасность». Таким образом найти нужное окно из всех, которые есть в системе, можно по имени: «tTester – Информационная безопасность». Дальше, пятым дочерним окном является окно с вопросом, вот это – «Угрозами динамической целостности являются :». Ну и в различной иерархии окна ответов: «введение неверных данных», «дублирование данных», «кража», «изменение данных». Также хочу обратить внимание на окна с названиями «&1», «&2», «&3», «&4» — это те окна, где ставится галочка, они нам потом пригодятся.

API программирование позволяет нам найти нужное окно, от него найти окно с вопросом и прочитать текст вопроса. Далее мы зачитываем наш текстовый файл с данными, находим в нём этот вопрос и зачитываем правильный вариант ответа. Далее, применяя опять же API функции, перебираем окна с ответами и сравниваем с тем, что мы зачитали в файле и, при совпадении, посылаем в окно с названием «&1(2,3,4)» событие «клик мышки».

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

Это всё замечательно работает, но что делать, когда файла с вопросами и ответами нет? Можно прибегнуть к небольшой хитрости. По завершению теста нам показывается информационное окно, сколько ошибок было допущено и оценка.
Вот такое окно:



Делаем программу, которая несколько раз в секунду при помощи API функций проверяет простую вещь: не появилось ли у нас в системе окна с названием «Результаты»? И при появлении такового, посылаем этому окну команду «Hide» — скрыть, а заодно показываем своё, заранее подготовленное, окно с нужным нам текстом. При клике на кнопку «ОК» нашего, заранее подготовленного окна, посылаем клик на кнопку «ОК» скрытого окна и закрываем своё. Всё!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.