Автоматическое обновление пароля для vpnbook.com

Преамбула

На самом деле прошло куча времени, после того, как я заходил на vpnbook.com и пользовался их бесплатным vpn-сервисом. Ну так вот, есть проблема, сервис-то бесплатный, а пароль периодически менялся. Раньше было проще — пароль был на странице, и его можно было просто сграббить, а теперь нет — пароль нарисован на картинке.

Дополнительные приложения

1. Нам понадобится какой-то парсер HTML
2. Понадобится какая-нибудь распознавалка текста на картинке, тобишь OCR, поддерживающая режим командной строки, благо в линуксах есть их от слова, хоть дупой жуй. Я использовал самую известную и проверенную, Tesseract называется, распознает все на ура. Картинку с паролем, слава Ктулху, владельцы сервиса (пока) не зашумили и не испоганили, так что распознавание пройдет без дополнительного геморроя.
3. Для отладки можно показывать изображение перед распознаванием прямо в консоли, чтоб это работало, можно установить FIM (копия)

Установка Tesseract

В Slackware проще всего установить его через sbopkg. В своих дистрах сами разбирайтесь.

1. Ставим sbopkg, если не стоит, с официального сайта или обновляем если стояла поросшая мхом версия со старым репозиторием в конфиге

2. Запускаем sbopkg В поиске (Search) вводим leptonica, и устанавливаем самую свежую версию. Это зависимость, т.е. библиотека, необходимая для Tesseract. Нашли — жмем Process и уходим курить.

3. Когда все скомпилировалось и поставилось, аналогичным образом ставим Tesseract.

Подготовка

1. Заводим необходимые переменные:

#!/bin/bash

VPNBOOKPAGE="https://www.vpnbook.com/"
WORKDIR="/tmp/vpnbook/"
HTMLFILE="vpnhtml.html"
PASSIMG="password.png"
AUTHPATH="~/openvpn/vpnbook/vpnbook.auth"

2. Перед скачиванием удаляем временный файлы и создаем рабочий каталог, если не существует (если существует, то ключ -p в команде mkdir поможет избежать ошибки):
rm "$WORKDIR$HTMLFILE" 2>/dev/null
rm "$WORKDIR$PASSIMG" 2>/dev/null
mkdir -p "$WORKDIR"

3. Скачиваем страницу с паролем:

echo -n "Get vpnbook page..."
wget -P "$WORKDIR" --default-page="$HTMLFILE" --header="Content-type: text/html" "$VPNBOOKPAGE" 2>/tmp/vpnpass.err.log

Примечание: Почему-то wget всю информацию, вне зависимости от того, произошла ошибка, или все прошло штатно, выкидывает на stderr, посему переопределяем в отдельный лог всю информацию из stderr, чтоб экран не загаживала: 2>/tmp/vpnpass.err.log

4. Проверяем, загрузилось или нет:

if [[ ! -f "$WORKDIR$HTMLFILE" ]];then
    echo
    echo "Page not downloaded!"
    exit
else
    echo "OK"
fi

Получение картинки с паролем

1. Вытаскиваем все ссылки на картинки со страницы
2. Отфильтровываем нужные grep'ом: grep "password.php"
3. Выбираем одну (их там две одинаковых): head -n1
4. Заменяем пробел в ссылке на знак +, что понадобится для получения картинки (пробел в POST или GET запросе заменяется на +). Притворяемся браузером.
5. Объединяем это в одну команду, и сохраняем ссылку в переменную:

echo -n "Get password image..."
PASSLNK=`xidel -s --extract "//img/@src" "$WORKDIR$HTMLFILE"|grep "password.php"|head -n1|sed 's% %+%'`

6. Загружаем картинку себе:

wget "$VPNBOOKPAGE$PASSLNK" -O "$WORKDIR$PASSIMG" 2>>/tmp/vpnpass.err.log

7. Проверяем, успешно ли прошла загрузка:

if [[ ! -f "$WORKDIR$PASSIMG" ]];then
    echo
    echo "Image not downloaded!"
    exit
else
    echo "OK"
fi

8. Для отладки показываем картинку перед распознаванием, если был указан соответствующий ключ (-s):

if [[ "$1" == "-s" ]];then
    fim "$WORKDIR$PASSIMG"
fi

Распознавание изображения и сохранение пароля

Для распознавания текста, нам придется воспользоваться OCR tesseract. Поскольку текст на английском и довольно прост для распознавания, то из всей мощи Tesseract’а (а инструмент и правда очень крутой), мы воспользуемся самым простым вариантом — все оставим по умолчанию, а результат распознавания выведем на stdout

Примечание: Tesseract’у нужно обязательно указывать, куда выводить результат распознавания. Это второй параметр в команде.

Команда распознавания:

tesseract "$WORKDIR$PASSIMG" stdout

Сохраняем результат в переменную:

VP_PASSWORD=`tesseract "$WORKDIR$PASSIMG" stdout`

Выыодим полученный пароль на экран и сохраняем его в авторизационный файл для Openvpn:

echo -n "Recognize image..."
VP_PASSWORD=`tesseract "$WORKDIR$PASSIMG" stdout`
echo "OK"
echo "Password: $VP_PASSWORD"
if [ -z "$VP_PASSWORD" ]; then
    echo "Password is empty. Exitting!"
    exit
fi

echo -n "Update autorisation file $AUTHPATH..."
echo "vpnbook" >"$AUTHPATH"
echo -n "$VP_PASSWORD">>"$AUTHPATH"

echo
echo "Complete!" 

Кто пользуется PPTP

Может совместить этот скрипт со старым скриптом, для обновления конфигов PPTP (новые конфиги делайте сами по образцу). Ссылка на старый скрипт

Скрипт целиком

На GitHub

На PasteBin специально не кладу, поскольку там есть стукачи, которые доносят владельцам сервиса, что появился новый скрипт по выдиранию пароля. А по-русски владельцы сервиса читать не умеют. Да и на Гитхабе лежал скрипт четырехсотлетней давности, так что не догадаются, что обновился.

One Response to Автоматическое обновление пароля для vpnbook.com

  1. Pingback: Автоматическое получение конфигов и пароля к VPN от vpnbook, теперь и для Windows. | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *