Даешь свободную литературу! Или как я с политикой вуза боролся

Доброго времени суток, хабровчане!  Это мой первый пост на форуме, так что прошу строго не судить.

Коротко обо мне: студент, увлекаюсь электроникой, микроконтроллерами, и программированием. Однако, моя специальность ни коим образом не связана с It. Со мной покончено, переходим к сути.

 Как и полагается любому техническому вузу – в нашем есть куча интернет ресурсов, которыми вуз чрезмерно гордится. Однако есть оборотная сторона медали – качество этих сервисов. А именно, если говорить про электронную библиотеку, о коей и пойдет речь в данной статье, то в ней напрочь отсутствует возможность скачивания pdf-версии нужной тебе методички, точнее она есть, но за это придется заплатить немало денЯк. Деньги далеко не маленькие (если говорить именно про цену за вузовские методички). Если же такой формат не устраивает, то можешь пользоваться онлайн библиотекой.

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

Просмотрщик оформлен максимально неудобно: долгое время не работал переход на определенную страницу книги, и книгу в 700 страниц приходилось перелистывать по страничке, что превращалось в адскую муку. Но самое ужасное в этом сайте то, что каждые 20 минут он просит авторизоваться по новой…

И теперь представьте картину: человек пытается подготовиться к контрольной по квантовой механике по методичкам преподавателя, объемом 700 страниц, где необходимый материал находится на 500, и может перелистывать по 5 страничек в минуту, и каждые 20 минут, его попытки приходится возобновлять.… В общем, жесть…. И вот после очередной неудачной попытки прочитать нужную главу,  я решил, что пришло время положить конец данному произволу.

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

“http://www.<название сайта>/plugins/<название просмоторщика>/getDoc.php?Id=<id книги>&page=<номер страницы>”

После получения данной ссылки скачивание книги не составляет и труда:

  1. Необходимо получить id книги (или лучше ссылку на нее)

  2. Узнать количество страниц

  3. В самом простом цикле for пробежаться по всем страницам, загрузив их на компьютер

  4. Объединить фотографии в единый файл pdf

  5. Радоваться

Собственно, к выполнению данных шагов я и приступил. В процессе работы выяснилось, что также, необходимым шагом является авторизация на самом ресурсе.

Самая первая версия программы выглядела максимально убого: я использовал java и библиотеку selenium для работы с сетью. Приложение получилось явно не user-friendly: запускалась только из IDEA, в которой ручками необходимо было вставлять ссылку на каждую книгу, также ручками забивать количество страниц. Более того, самым убожеством был тот факт, что приложение полностью имитировало пользователя:

  • Открывался сайт в браузере

  • Далее проводился поиск полей для логина и пароля и их заполнение

  • Затем переход по ссылке с первой страницей книги

  • И сочетание клавиш “CTRL”+”S”, нажатие на “Enter”….

В общем – фу! Нельзя так делать!

Но когда у тебя на носу контрольная по квантмеху, и так сойдет. Программа была написана минут за 20, и книжки она выкачивала долго, и иногда не все страницы, хуже того, после скачивания, опять же ручками приходилось объединять картинки в единый файл pdf….

Но, не спешите бросаться помидорами, данный кошмар в дальнейшем был преобразован в весьма неплохой код. Я перешел на Delphi! Да, многие могут сказать, что язык устарел, и не обладает должным функционалам, однако в своей работе я его применяю постоянно. Обучился сему творению благодаря Михаилу Фленову (низкий поклон вам, Миша).

Итак, переходим к финальной версии программы, которая была написана, спустя месяца два – три после моего первого “чудо творения”.

Рисунок 1 - Главная форма приложения
Рисунок 1 - Главная форма приложения

Итак, суть осталось точно такой же, да и шаги не поменялись. Программулиной Wire Shark узнал, какая последовательность отправляется в POST запросе при авторизации. И меня сильно напугал один факт: пароль был зашифрованным.

Небольшое отклонение: логин на сайте представляет собой некоторый набор цифр, а пароль – имя, написанной на русском языке. Однако, в программе WireShark на сайт отправлялся шестнадцатеричный код следующего формата: %D0% FF %D0% FF %D1% FF. Как позже выяснилось, символы “FF” кодировали буквы имени, а %D0% и %D1%, что то вроде контрольных байт. З.Ы. Огромная просьба к знатокам, читающим эту статью, если это какой либо общеизвестный сетевой протокол, то не кидайтесь помидорами, а дайте, пожалуйста, ссылку, где можно прочитать про него. Но т.к. я не сталкивался с таким раньше, пришлось разбираться во всем самому.

Первым делом я обратил внимание на повторяющиеся символы %D1% и %D0%, которые, как я сразу и предположил, являются контрольными байтами, однако, оставалась загадкой, чем отличается %D0% от %D1%. Но это пока отложим, едем дальше. Как же шифруется пароль? А он шифруется достаточно просто, предположим, меня зовут Василий, давайте запишем мое имя в ACII символах:

82 (В) A0 (а) E1 (с) A8 (и) AB (л) A8 (и) A9 (й)

А на сайт отправляется следующая последовательность:

72 (В) 90 (а) 61 (с) 98 (и) 9B (л) 98 (и) 99 (й)

Хм, просматривается одна зависимость…. А, точно! Если внимательно приглядеться, то у каждого символа, отправляемого на сайт, старший байт уменьшается на 1. Бум! Загадка разгадана.

Хотя, стоп, а почему же тогда вместо D1 (буква с), на сайт отправляется 61? А черт ее знает! Просто запомним, что для символов, лежащих в диапазоне от E0 до EF из старшего байта необходимо вычитать не 1, а 6. Собственно и все! А помните, я говорил про контрольный символ %D1%? Так вот, этот символ как раз таки ставится перед символами из данного диапазона. Ну, собственно и все. Далее привожу кусок кода, отвечающий за «шифровку».

Код ""
 for i := 1 to length(password) do
 begin
    temp := Ord(password[i]);		   				 //Представили пароль в HEX виде
    if (temp < 1088) or (temp > 1103) then // Значения символов E0 и EF
        begin			                				 //Если вне этого диапазона, то %D0%
	pasBytes[i] := '%D0%' + IntToHex(((temp) - 896), 2); // + 128 - 1024 для шифрования
   newPassword := newPassword + pasBytes[i];
         end
    else
		begin				   												//Иначе %D1%
	pasBytes[i] := '%D1%' + IntToHex(((temp) - 960), 2); // +64 -1024 для шифрования
                   newPassword := newPassword + pasBytes[i];
	end;
 end;
//1024 здесь вычитается потому, что в Delphi почему то ASCII символы начинаются с #400
//Почему - не ясно 

Финальная последовательность, отправляемая на сайт, будет выглядеть следующим образом:

%D0% 72 %D0% 90 %D1% 61 %D0% 98 %D0% 9B %D0% 98 %D0% 99

Собственно это и была самая сложная часть работы.

Далее, после авторизации, пользователь вставляет в строку ввода ссылку на необходимую книгу. Программа же в это время отправляет Get запрос на сервер, из ответа которого, затем в автоматическом режиме находит название книги, ее ID, и количество страниц. Все эти данные сохраняются в глобальные переменные. И, затем, после нажатия кнопки “Download”, в отдельном потоке отправляются Get запросы на сервер, из которых и забираются картинки с изображениями страниц. Которые в дальнейшем, с помощью библиотеки Synapse формируются в единый PDF файл.

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

В общем, то и все. Если кому надо, могу выложить исходники на Github и выложить в комментариях ссылку. Также хотелось услышать ваше мнение по поводу моей «дешифровки». Всем спасибо, до скорых встреч на просторах интернета.

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 6 609 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 21

    +9
    повторяющиеся символы %D1% и %D0%, которые, как я сразу и предположил, являются контрольными байтами, однако, оставалась загадкой, чем отличается %D0% от %D1%
    Представление кириллицы в UTF-8
      0
      Ну да, изобрел велосипед заново)
      Спасибо за ссылку, будет весьма полезной
      +7
      Ваш страшный неизвечтный шифр называется utf8, судя по всему.
      PS Меня опередили. :)
        +1
        Вот это я понимаю, тяга к знаниям! ))))
          –13
          Это похоже на стеб, а не на тягу к знаниям
          –1
          WireShark для данной задачи избыточен, хватит и инструментов разработчика в браузере. Они позволяют увидеть и не закодированные данные.
            +11

            А вы тоже ожидали статью про борьбу с системой в стиле FOSS и RMS; с угрозами отчисления и голодовками?


            (Осуждаю кликбейтный заголовок, не статью)

              –2
              Это будет в дальнейшем, пока что я заложил основу
              +6

              Так, а что вы побороли?


              Политику вуза? Она осталась неизменной.


              Здорово, что вы написали техническое решение, позволяющее обойти политику вуза, а не побороть.


              Когда вуз, с вашей помощью устранит все проблемы, о которых вы написали в начале статьи, можно будет говорить о каких-то победах.


              Двигайтесь в этом направлении.

                0
                Да, вы правы, политика осталась неизменной.

                Зато я дал студентам возможность пользоваться литературой без ограничений.

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

                Двигаться в этом направлении, конечно, буду :)
                  0
                  Почему «неосуществимо»? Что именно мешает вузу открыть студентам возможность долистывать до 550-й страницы?
                    +2

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


                    Сам работаю в вузе и автора понимаю, сдвинуть там что-то, иногда, ну очень трудно. Но, если получается, это здорово.

                      0
                      Проблему с перелистыванием страниц, вуз устранил (забыл про это упомянуть в статье).

                      Однако, работать с документами в таком виде, в котором нам это предлагается, крайне неудобно. Под «неосуществимо» я имел ввиду то, что вузу вероятнее всего невыгодно открывать бесплатный доступ к литературе. Говоря же про онлайн библиотеку, это также, скорее всего, невыгодно с экономической точки зрения — менять структуру сайта.

                      З.Ы. msidiagnos в целом, более коротко описал всю суть
                    0
                    курсовая по информатике и ИКТ ))))
                    0
                    Подобные статьи всегда вызывают улыбку. Удачи автору!
                      0

                      С интересом посмотрел бы исходники, если позволите.

                        +1
                        Лично меня у, будучи студентом, взрыв пукана вызывали pdf без возможности поиска. И, как я понимаю, именно такие файлы на выходе и выходят (надеюсь, что неправ, и библиотека Synapse это комбайн, делающий все и сразу).
                        Есть ли идеи, как туда OCR прикрутить, который, пусть и коряво, но, все же, файл в текст превратит и сформирует PDF, в котором будет и картинка (чтобы видеть глазами первоисточник), и текст для поиска одновременно?
                          0
                          Тут все зависит от получаемой картинки, я пытался полученный файл обработать через Adobe Acrobat (преобразовать картинки в текст), в некоторых случаях получалось весьма неплохо. Но в большинстве случаев, качество получаемого текста зависит от исходников, в моем же случае, исходники не всегда хорошего качества.

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

                          З.Ы. ссылку на исходники чуть позже выложу, сейчас не могу
                            0
                            Лично я такой необходимости не испытывал

                            Может быть, тогда мое Вам почтение)
                            Из моего опыта, — для списывания или экстренной подготовки к вопросу, пока препод объявил вопрос и водит глазами по аудитории, ища, кого бы дернуть, — вообще маст хев.
                            Для подготовки к экзамену по списку вопросов не так сильно надо, но лишним не будет
                            0

                            Можно заюзать Tesseract, он умеет распознавать и добавлять слой поверх картинки текста который можно использовать для выделение и поиска через утилиты типа pdfgrep.

                              0
                              Хм, впервые слышу

                              Почитаю, спасибо за информацию

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое