7 июля в Санкт-Петербурге пройдет «очная ставка» NeoQUEST-2016. Гостей ждут интересные доклады, конкурсы, общение с коллегами, а лучших участников online-этапа — восьмичасовое соревнование по кибербезопасности! В преддверии «очной ставки» продолжаем разбирать задания online-этапа, и на очереди — задание, посвященное не самому типичному способу использования компьютерной мышки.

Задумывались ли вы когда-нибудь о том, как работает оптическая мышка? Все просто: в нижней части расположена камера, быстро делающая снимки поверхности, по которой водят мышку. Сравнивая полученные изображения, контроллер мышки вычисляет смещение. Есть вопрос и поинтереснее: можно ли как-то достать изображение поверхности под мышкой? Спойлер: можно! Как это сделать, расскажем под катом!

Исходные данные


Участнику давался docx-файл, в тексте которого содержался некий IP-адрес. Первым делом, конечно же, участники переходили по этому адресу. Тут-то и начиналось самое интересное: на них буквально вываливались какие-то числа!



Что-то совершенно невразумительное! И главное, непонятно, что с этим делать.

Решение


Для начала стоит внимательно изучить docx-файл. Можно заметить любопытную деталь: он весит 223 кб – многовато для одного-единственного IP-адреса. Тут сразу вспоминается о том, что docx на самом деле является архивом. При открытии файла с помощью WinRAR (или другого архиватора), внутри обнаруживается pdf-файл с первым ключом. Один есть, однако должны быть и другие.



Этот файл содержит спецификацию оптического сенсора Agilent ADNS-2610, в частности, информацию о том, как получить изображение из-под мышки. Становится понятно, что числа с сайта – это картинки, полученные с помощью сенсора.

Единственная проблема заключается в том, что, согласно спецификации, картинка имеет размер 18x18, а значит, предположительно ее размер должен составлять 324 байта (с учетом того, что она черно-белая). Но за один раз мы получаем только 243 однобайтовых числа. Что-то тут не сходится!

Внимательно прочитав спецификацию, можно понять, что один пиксель кодируется не одним байтом, а шестью битами. Это объясняет несоответствие: 243/6 = 324/8.

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

Заходим на сайт, открываем инструменты разработчика и останавливаем исполнение всех скриптов. Затем вставляем в html-код страницы элемент canvas:



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



Наконец, запускаем скрипт и получаем видео с мышки!



Перемещая курсор по экрану, можно найти второй ключ. Вот, кстати, весь лист, по которому «водили» мышкой:



И кое-что еще…


В этом задании получение данных с оптического сенсора имитировалось. А как обстоят дела с реальными мышками? Оказывается, что и с настоящей мышки можно считать картинку, но с некоторыми ограничениями. Во-первых, не все оптические сенсоры подходят для получения изображения. Во-вторых, даже если сенсор подходящий, придется разбирать мышку и подсоединять к сенсору специальным образом запрограммированную плату. Так что без серьезной подготовки слежка через камеру в мышке невозможна.
Поделиться с друзьями
-->

Комментарии (8)


  1. impetus
    01.06.2016 14:20
    +36

    Как это сделать, расскажем под катом!
    Зашёл. прочитал:
    с настоящей мышки можно считать картинку, но с некоторыми ограничениями. Во-первых, не все оптические сенсоры подходят для получения изображения. Во-вторых, даже если сенсор подходящий, придется разбирать мышку и подсоединять к сенсору специальным образом запрограммированную плату.
    Рассказали, да.


    1. ZlodeiBaal
      01.06.2016 14:29

      На хабре/ГТ уже было пару статей как это делать. Поищите. Но насколько я помню, с современных мышей сложно вытащить.


      1. Rumlin
        01.06.2016 15:40

        Вроде бы там выдаются только в готовом виде XY смещения изображения под сенсором.


        1. custos
          01.06.2016 15:49
          +1

          1. labyrinth
            01.06.2016 16:29
            +1

            В 2013 году тоже рассказывали, но по-английски: Convert Optical Mouse into Arduino Web Camera


      1. Vindicar
        01.06.2016 21:24
        +2

        Было-то было, но, согласитесь, заголовок и статья совсем о разных вещах.



  1. shweew
    02.06.2016 10:49
    +1

    Статья должна называться «Очередное задание онлайн-этапа NeoQUEST-2016».