Вопреки всем моим предрассудкам, в поддержке микромягких мне до последнего старались помочь. Чат автоматически сквозным образом переводит, хотя я не прочь был на моем ломаном ангельском общаться. Полдня разные операторы суетились по моему вопросу, очень быстро, ни разу не заставив меня заскучать. Это я несколько раз заставлял их ждать. В итоге проблему решили.
Жаль, не удалось сделать скрин переписки, они были очень обходительны и даже радушны. Поддержали мою мысль, что поскорее бы открылись продажи софта в РФ. Ну просто лапки, честно.
Ищу версию БЕЗ рекламы (отключение рекламы в настройках). В актуальной версии ее не отключить, а она и бесит и грузит приложение, лаги. Много версий уже перепробовал. Плиз, помогите найти рабочую версию под Вин11, где можно отключить рекламу?
Искал на 4pda — 14 000 страниц комментариев, сотня версий... Ну всё по феншую, в общем. Попробовал 5 разных версий, не работают... Очень не хочется официальную последнюю версию с рекламой на пол-экрана ставить.
Онлайн-версия WhatsApp получила крупный редизайн, призванный сделать мессенджер более удобным для пользователя. В сети уже появился скриншот с демонстрацией нововведений — на этот раз разработчики сделали акцент на боковой панели, которая собрала почти все функции приложения в одном месте для удобства их использования.
Главным нововведением стало расширение интерфейса боковой панели для упрощения навигации. С помощью соответствующих иконок пользователь может быстро переключиться на вкладки чата, статуса, каналов, сообществ или архива, а также переместиться к избранному.
Апдейт пока доступен только ограниченному числу пользователей, которые ранее присоединились к официальной программе бета-тестирования. Точная дата глобального релиза новой версии WhatsApp Web разработчиками пока не объявлена.
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
С момента выхода первой части статьи из рубрики «сам себе экосистема» прошёл уже практически год! За это время, мы успели с вами реализовать клиенты VK и YouTube, которые работают на Android 2.2+, а также на Windows Phone 8, написать небольшую 2D-игру с нуля весом менее 1Мб, которая работает практически везде и довести существующее приложение до ума, дабы оно работало даже на смартфоне с дисплеем 240x320! Но на дворе 2024 год, люди стремительно переходят из соц. сетей в продвинутые мессенджеры и уже сложно себе представить современного человека, который не пользовался бы «телегой» или даже «вайбером» в качестве основного средства общения. Поэтому я решил реализовать клиент Telegram на смартфоне 14-летней давности на базе официальной реализации MTProto от команды Telegram — TDLib. Сегодня мы с вами: узнаем новые причины мотивации вернуть в строй смартфоны прошлых лет, напишем на C# реле-сервер, который обрабатывает пакеты MTProto и кодирует их в простой текстовый формат датасетов, который можно моментально обработать даже при нестабильном GPRS-соединении на 21-летнем Siemens C60, а также узнаем о разработке миниатюрных Android-приложений на базе «голого» API-системы, которые не тянут за собой никаких зависимостей, в том числе и AppCompat/androidx. Интересно? Тогда жду вас под катом!
На дворе уже стукнул 2024 год, современные смартфоны предлагают какие-то немыслимые мощности относительно тех, которые когда-то были в первых Android-девайсах. Сейчас за сотню баксов можно купить смартфон с хорошей 1080p IPS-матрицей, 4Гб ОЗУ и 8-ядерным шустрым чипсетом, который вполне способен плавно тянуть даже стремительно «жиреющие» на ресурсы клиенты социальных сетей, банков и прочие необходимые в повседневной жизни приложения. И казалось бы: всё хорошо, покупай себе редмик раз в год или айфон раз в несколько лет и наслаждайся всеми прелестями работы современных приложений…
Для многих людей смартфон — это лишь инструмент, повседневный компаньон, который помогает облегчить выполнение каких-то задач. Им совершенно не важно, как он выглядит, как ощущается в руках, какой у него дисплей и железо «под капотом», лишь бы работал да и нормально. Но есть и другая категория людей, для которых телефоны, смартфоны и любые портативные гаджеты — это не просто утилитарный девайс, а настоящее инженерное произведение искусства, с которого буквально сдувают пылинки и стараются до последнего пользоваться ими как повседневными устройствами. Хотите пример? Смотрите ниже:
Фактически, среди современных смартфонов по сути и нет представителей такого нынче вымершего форм-фактора, как сайдслайдеры с физической QWERTY-клавиатурой, боковые раскладушки с двумя дисплеями и даже из QWERTY-моноблоков есть только смартфоны от Unihertz. Даже среди моноблоков с тачскринами нет никакого разнообразия, лишь без-рамочные одинаковые девайсы за исключением устройств от Sony.
Galaxy S Plus
Раньше меня часто спрашивали, мол, да как ты вообще можешь пользоваться смартфоном 10-летней давности, на котором давно нет официальных клиентов популярных сервисов и только недавно, с развитием блога, мне перестали задавать этот вопрос, поняв, что это бесполезно — ведь это дело принципа и порыва энтузиазма! Смотрите сами: у нас уже есть простенькие, но вполне рабочие клиенты ВК, YouTube, сейчас я допиливаю клиент «Сбера» на СМСках, реализую карты OpenStreetMap (правда пока без адекватной навигации), а в будущем планирую написать приложение для мониторинга погоды и трекинга посылок. Кроме того, в рамках этой статьи мы реализуем с вами клиент Telegram: так чем же это не функционал современного смартфона?
Но хорошо, с функционалом разобрались, однако для многих читателей слова «старый смартфон» это прямые синонимы «тормозной смартфон», мол «фуу, да как можно пользоваться этим тормозным кирпичом, он же лагает в последней версии моей ВКшечки!». Но давайте поставим вопрос ребром: может, это не столько девайсы немощные, сколько сами приложения, с кодовой базой, которая тянется более 10 лет, откровенно жиреют, обрастают костылями и хаками после далеко не одного поколения программистов, которые над ними работали? :) Один, вот, предпочитал пользоваться чистым AppCompat'ом, другой решил притащить зависимость, которая, например, оптимизирует виртуализацию ListView, третий решил заменить всю сериализацию Json со встроенных классов в Android на что-то стороннее и реализовал это костылями и вот так, по чуть-чуть изначально оптимальный и шустрый код превращается в неповоротливое УГ, которое не рефакторили кучу лет.
На видео Galaxy Pocket Neo — очень дешёвый Android-смартфон из 2011 года с 1-ядерным чипсетом на ~800МГц и 256Мб ОЗУ. При этом всём, Android софтварно рисует все анимации на процессоре, без участия GPU.
А значит у стареньких девайсов всё равно есть шанс быть полезными и стать полноценными повседневными смартфонами даже спустя более чем десять лет после выхода! И в сегодняшнем материале, я вам расскажу об особенностях разработки самопального клиента Telegram с собственным прокси-сервером, которое концептуально допускает реализацию даже на кнопочном Siemens C60 2003 года. Как? Читаем ниже!
❯ Принцип работы
В отличии от ВК (который разрабатывали те же самые люди, что и Telegram), API которого построено на базе REST-запросов и концепции Longpolling'а для моментального получения событий с сервера, Telegram построен на базе собственного протокола под названием MTProto, который может работать поверх любого «транспорта» (протокола нижнего уровня) — TCP, HTTP, WebSocket и т.п. Сам по себе MTProto в современном виде, разработка прожженного математика Николая Дурова и его команды — протокол относительно сложный для реализации «на коленке» и в первую очередь требует довольно серьезного понимания принципов работы современной криптографии, да и документирован он всё ещё не особо хорошо. Кроме того, у MTProto весьма интересный бинарный формат пакетов, эдакий велосипед Protobuf. В долгосрочной перспективе поддерживать свой велосипед MTProto может быть весьма проблематично, учитывая не самую лучшую документацию.
Но городить велосипед и не нужно, поскольку у команды Telegram есть официальная реализация MTProto — библиотека TDLib, которая инкапсулирует в себе не только детали реализации протокола, но и сетевой ввод/вывод и выбор транспорта, хранение базы данных сообщений и авторизации, автоматическую загрузку фото и видео, конвертация объектов из бинарного формата MTProto в JSON и полная многопоточность и частичная потоко-безопасность. С одной стороны это плюс — уже готовое решение для реализации клиента на новой поддерживаемой платформе, где есть OpenSSL (можно статически слинковать), zlib (линкуется статически), сокеты и файловый ввод/вывод, а также довольно неплохой механизм JSON-based API, которое позволяет использовать библиотеку в любом языке, который поддерживает вызов C-функций, а с другой и минус — библиотека довольно много весит, в одиночку прибавляя ~20Мб веса приложения для каждой архитектуры, у неё течёт память и у нее странный механизм получения данных с сервера (например, нельзя ответить на сообщение, зная его ID, если сообщение предварительно не загружено, при том что на сервере весь ответ — это просто ID, на какое сообщение прилетел ответ).
Понятное дело, что на стареньком смартфоне использовать оригинальный TDLib будет проблематичным — даже если собрать либы современным NDK и запилить JNI-интерфейс, библиотека «жрёт» много ОЗУ (20-100Мб «вхолостую», в зависимости от числа диалогов и частоты прилетающих событий, плюс со временем течет до 1-2Гб, если не использовать базу данных сообщений. Скорее всего, это косяк в реализации пулов, объекты из которых выгружаются при сбросе в базу, но не выгружаются при высоком потреблении ОЗУ) и уж тем-более TDLib не запустить на любимых кнопочных Java-сонериках! Поэтому я решил написать прокси-сервер, который отправляет команды, слушает ивенты TDLib и предоставляет REST-like API для клиентских программ, которые просто вызывают какой-либо метод, а в ответ получают простой и короткий строковой датасет только с необходимыми полями, весом до 10Кб (что позволяет его быстро загрузить даже с GPRS-интернетом), который можно быстро распарсить даже на преусловутом Siemens C60!
К сожалению, поскольку TDLib прожорлив, я не смогу захостить на своём сервере инстансы для читателей, которые хотят поюзать приложение, поэтому вам придется ставить и запускать сервер на своём VDS/компьютере с белым IP/роутере, если под него есть .NET Core :)
Клиентом же будет выступать Android-смартфон, где приложение будет фронтэндом данных с сервера. Ничего сложного на первое время нет: первое окно — это список диалогов, второе окно — список сообщений в диалоге + поле для написания сообщения, третье окно — информация о пользователе. Всё это я реализовал за три дня не-напряжной работы «на коленке».
Давайте же перейдем к реализации сервера!
❯ Прокси-сервер
Сервер я решил писать на C#, поскольку у .NET Core сейчас всё очень хорошо с кроссплатформенностью и производительностью. Его можно даже на Raspberry Pi запустить :)
Итак, какая-же архитектура такого сервера может быть? Программа инициализирует TDLib, начинает слушать её события в отдельном потоке, пока в основном потоке крутится HTTP-сервер, который обрабатывает каждый отдельный запрос с клиентского приложения. Почему синхронно? Потому что TDLib фактически не возвращает никаких идентификаторов для возвращаемых датасетов, дабы их можно было отличить друг от друга. Приведу пример: у нас есть метод getChatHistory, который возвращает n-сообщений. При этом TDLib сам определяет, сколько хочет сообщений вернуть (и в первый вызов возвращает одно сообщение вне зависимости от настрое и отправляем пакет message n-раз. При этом в пакете message нет какого-либо ID, который позволял бы ассоциировать текущий объект с какой-либо операцией. Увы!
Начинаем с коммуникации с TDLib. Для работы с библиотекой, мы будем использовать json-интерфейс. Для .NET есть биндинги через C++/CLI, но в таком случае, сервер не будет работать на Linux. Для работы с библиотекой хватит лишь три функции: CreateClientID, которая аллокейтит новый инстанс клиента, Send, которая асинхронно отправляет JSON-объект с командой, которую затем обработает TDLib и Receive, которая ждёт N-секунд и возвращает в виде ASCII-строки (!) JSON-объект с описанием события или данными после одного из запросов. За это у нас отвечает класс TDLibInterface, который объявляет PInvoke-методы для вызова нативных методов из библиотеки. .NET Core сам подгрузит библиотеку tdjson (причём на Linux он добавит ей префикс а-ля libtdjson.so, а на Windows загрузит tdjson.dll) и сам разберется с маршаллингом аргументов функций: например, string автоматически преобразует в const char*. Тем не менее, с const char* возвратами нужно быть аккуратнее — у меня был SIGSEGV, пока я ручками не конвертировал их в обычную строку.
З.Ы: На Пикабу нет отдельного тега для кода, а вставить листинги картинками я не могу из-за ограничения на 25 медиаэлементов. Так что листинги будут совсем без табов, но алгоритм их работы понять можно :)
Позволю себе чуточку критики в сторону TDLib. Во первых, почему нет s-версии функции с возможностью указать длину входной строки, а tdjson полагается исключительно на \0 в конце строки? Во вторых, почему const char*, а не wchar_t*? Сейчас юникод во входной строке приходится escape'ами превращать в \u-последовательности. После этого, нам нужно написать обёртку над TDLib, которая будет вызывать для зарегистрированных событий специальные функции, называемые коллбэками. При этом закомментированный WriteLine снизу — это «дебаг» для того, чтобы узнать названия неизвестных мне ивентов :)
В каждом объекте, полученном с помощью receive, есть поле "@type", которое содержит в себе имя класса возвращаемого объекта. Первый же вопрос от читателей — почему я использую JObject с ручным дерганьем нужных полей и вручную пишу JSON в виде строковых литералов вместо нормальной сериализации/десериализации? Ответ прост: во-первых, для актуализации Data-классов придется писать кодогенератор из TL-схемы, а во-вторых иногда TDLib может возвращать немного разные объекты в JSON, из-за чего приходится мудрить с атрибутами на этих самых Data-классах, иначе десериализатор выбросит исключение. Это решается нормальными юнит-тестами на всех вариантах данных, но зачем себе в колени стрелять, если нужен конкретный фиксированный функционал и лишь малое число от всех полей, возвращаемых TDLib?
string recv = NativeInterface.Receive(10.0d);
if (recv != null) { JObject json = JObject.Parse(recv);
if (!handlers.ContainsKey(type)) { //Console.WriteLine("Unknown event type: {0}", type); continue; }
handlers[type](recv, json); }
Теперь переходим к самому интересному — обработке событий и реализации синхронного клиента, который позволяет без async/await просто запросить список сообщений и сразу же его получить (такой подход может быть полезен и юзерботам, которые не хотят размазывать стейты по всей программе). Почему без асинков? Честно сказать, мне они просто не нравятся: как привык к концепции wait/notify и коллбэков из Java, так их и юзаю всю жизнь :)
Сначала TDLib запрашивает параметры инициализации (стейт authorizationStateWaitTdlibParameters), затем если пользователь не авторизован — запрашивает номер телефона и код подтверждения (плюс дополнительные шаги для авторизации если они есть). В конце, TDLib возвращает стейт Ready, что означает готовность библиотеки к работе:
После этого, можно начать работу с данными. Обратите внимание, мой подход потоко-небезопасен, его нельзя дергать из нескольких потоков одновременно! В коде ниже, я вызываю метод для фетча сообщений, а затем в соответствующем коллбэке от TDLib обрабатываю данные (дабы статья не разрасталась на 20+ минут, я чуть урезал все листинги).
public List<Message> QueryMessagesInChat(long chatId, long lastMessage, int count) { messages.Clear();
public User QueryUser(long userId) { string json = Utils.Format("{\"@type\": \"getUser\", \"user_id\": \"{0}\" }", userId); NativeInterface.Send(InstanceID, json);
waitHandle.WaitOne(); return user; }
Переходим к реализации самого сервера, для наших целей хватит обычного HttpListener. Сначала мы зарегистрируем все поддерживаемые методы и занесем их в ассоциативный список ключ-значение. Сами методы реализованы в виде делегатов, которые принимают лишь один аргумент — список параметров из строки запроса, а возвращают строку — все ответы, за исключением особых (связанных с загрузкой вложений) — текстовые.
Переходим к обработке запроса. Метод ищет, зарегистрирован ли запрошенный метод и если да, то парсит строку запроса, которая начинается с "?", которую затем передаёт в виде коллекции ключ->значения обработчику метода:
А сами методы, в свою очередь, дергают соответствующие функции из клиента и формируют на их основе датасет в примитивном формате:
public staticstring QueryChats(Dictionary<string, string> args) { if(args.ContainsKey("count")) { int count = int.Parse(args["count"]); StringBuilder ret = new StringBuilder();
В результате получаем вот такой простой датасет, который, как я и говорил, легко распарсить и на Siemens C60, и на Atmega328 — да где угодно! В целом, такой сервер можно использовать для реализации бота в телеграме, который будет передавать показания каких-то датчиков, сигнализацию и прочие клевые штуки!
Переходим к реализации клиента, т.е. приложения на Android. Здесь будет не менее интересно!
❯ Пилим для Android
В геймдеве есть своеобразный мем — некоторые инди-разработчики сначала начинают делать меню, вместо основного геймплея, что становится предметом насмешек среди других разработчиков. Но в разработке приложений для смартфонов всё по другому — здесь как-раз таки хорошо заранее продумывать макет будущего приложения!
Поскольку у нас с вами мессенджер, то главный экран должен представлять из себя список чатов (ListView) и верхнюю панельку, где в будущем могут разместиться настройки и свайп-менюшка:
Такой вот простой макет.
Каждый пункт меню — это тоже отдельный layout, в котором мы по шаблону строим внешний вид будущего элемента списка. На немолодых устройствах есть смысл использовать как можно меньше контейнеров в layout'е, поскольку пересчет позиций и размеров элементов — одна из самых «тяжелых» операций в UI-фреймворке вообще. Кроме того, не стоит использовать кучу картинок и drawable — в Android 2.x всё 2D рисуется софтварно, аппаратное ускорение появилось только в 3.0 (частично).
Но дабы в списке диалогов что-то появилось, нужно сначала реализовать фетчинг (получение) этих самых диалогов с сервера! Сам объект, который занимается обработкой запросов называется ClientManager и является синглтоном — он в единственном экземпляре на все время работы программы. Помимо менеджмента «ноды» (т.е. прокси-сервера), токена для авторизации и обработчика ошибок, ClientManager реализует метод для асинхронного запроса информации с сервера и, собственно, формирует строки запросов с помощью соответствующих методов:
Подгрузка чатов и сообщений реализована через Adapter — концепция «виртуальных» списков, которая предполагает что система создаст не 50 элементов интерфейса на каждую кнопку чата, а только 5 и будет их виртуально «мотать по кругу», обновляя только данные в уже существующих элементах. Это позволяет значительно ускорить отрисовку, учитывая то, что Android 2.x Canvas рисуется программно.
Ну вы уже явно замучились видеть простыни кода, давайте посмотрим что у нас вышло!
Шустренько, да? А ведь это ультрабюджетник Alcatel OT-916D, один из последних массовых дешевых QWERTY-смартфонов за 5 000 рублей из 2012 года. Кстати, смартфон подарил мне читатель chuvakoff с Хабра!
Переходим к окну чата. Основной макет почти такой-же, как и у основного окна: только добавилась панелька для ввода сообщения снизу.
Концептуально, всё тоже самое — запрашиваем данные с сервера, парсим их и загружаем в адаптер, благодаря чему мы сможем листать наш диалог. Однако в сообщения я добавил контекстное меню с стандартными фишками типа копирования, ответа и прочих подобных действий. Поскольку у нас нет ни пушей, ни еще каких-либо средств для поулчения данных о новых сообщениях, я раз в определенный интервал просто получаю сообщения — и если новый датасет отличается от старого — обновляю окошко чата.
Переходим к реализации поля для ввода сообщения. Здесь всё просто — на серверсайде за это отвечает метод SendMessage. Однако для того, чтобы с нашего клиента можно было ответить на другие сообщения, я ввёл также «контекст ответа», в котором запоминается сообщение, на которое мы хотим ответить. Telegram также поддерживает Markdown, однако его полная поддержка пока не реализована.
В остальном же, функционал конечно пока совсем базовый, однако клиент работает очень шустро даже бюджетной X10 Mini Pro и позволяет чатится с моими читателями в Telegram. В будущем хотелось бы допилить:
Поддержка картинок: Сейчас уже есть кривоватый механизм кэширования изображений на стороне сервера, который позволяет загружать аватарки чатов. В будущем, я добавлю поддержку «галерей» с картинками!
Поддержка голосовых сообщений: Не все их любят, но они порой удобны и выручают. Реализую как прослушивание, так и запись!
Подробный просмотр профилей и менеджмент чатов: Удаление сообщений, чатов и прочие фишечки из официальных клиентов.
Казалось бы — до официальных клиентов ещё очень далеко. Но сам факт, чтобы всё это работало достаточно шустро на девайсах, которым уже более 10 лет!
❯ Звучит интересно! Как заюзать твой клиент?
Тут всё очень и очень просто! В первую очередь, нам понадобится ПК с белым IP, роутер (если под него есть сборка dotnet), либо VDS. Виртуальные сервера сейчас стоят копейки, у ТаймВеба есть тариф за 188 рублей в месяц, которого с головой хватит для нашего сервера.
Такая вот рекламная интеграция (к слову, прокси для всех приложений уже более года крутятся именно на мощностях TimeWeb Cloud)!
Программа сначала запросит номер телефона, а затем код подтверждения Telegram. После этого будет создана папка tdlib/, где будут хранится данные вашей сессии, а также файл authkey.txt, где хранится случайный ключ для сессии (md5 phone_number + response code + псевдослучайное число). Не оставляйте его в /var/www/!
Если всё нормально, программа начнёт слушать порт 13377 на всех сетевых интерфейсах, в т.ч и в локальной сети. После этого, ставим уже предварительно собранный, либо собираем сами в Android Studio APK и в окне авторизации пишем адрес ноды и ключ авторизации. Если всё настроено верно — программа запомнит сервер и будет работать без проблем! Вот так всё легко :) Как видите — всё очень и очень просто!
Кроме того, буквально за пару дней до публикации статьи я сел вечерком из интереса что-нить под Java-телефоны попилить… и, как и обещал, реализовал Proof of Concept возможности работы Telegram даже на сонериках, которым скоро 20 лет стукнет! А ведь если ещё чуть заморочится, можно запустить приложение даже на преусловутых монохромных сименсах!
❯ Заключение
Вот такой у нас получился проект с реализацией лёгкого, примитивного, но тем не менее рабочего клиента Telegram, который на клиентской части вообще не использует никаких зависимостей. Вес собранного APK в release-версии — всего 54 килобайта! Понятное дело что с ростом функционала, вес программы будет увеличиваться, но я обещаю — больше 1Мб он не вырастет :)
Ну а вам, моим читателям, надеюсь было интересно прочитать такой «двойной материал» не только о разработке сетевой части без использования Apache/nginx/IIS, но и UI-фронтэнда для Android-смартфонов, которым уже более 10 лет! Исходный код проекта можно найти на моём GitHub: как приложения, так и сервера, а также убедиться в отсутствии каких либо закладок и, если совсем не доверяете, собрать бинарники сами! Для сборки понадобится VS2017 или свежее, а также Android Studio 2.3.2 (если собираете для Android 2.1 и ниже).
Друзья! Сейчас на Хабре опросы сломаны, поэтому если у вас есть желание, вы можете проголосовать в комментариях: какой стиль статей вам больше нравится — где больше конкретики и кода с пояснением как конкретно работает та или иная часть программы, или наоборот стиль ближе к научпопу, где фрагментов кода нет, или их значительно меньше? Пишите своё мнение о проекте в комментариях!
Кроме того, у меня есть канал в Telegram, куда я публикую бэкстейдж статей, ссылки на новый материал, свои наработки, а также посты о ремонте девайсов и различные мысли.
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!
1. Feroxbuster - Инструмент брутфорсинга веб-директорий, написанный на Rust, который используется для фазинга и брутфорсинга веб-директорий. Он особенно полезен для оценки безопасности сайта.
2. Radamsa - Генератор искаженных данных для программного обеспечения
имеет уникальный подход к фазингу, генерируя широкий спектр искаженных данных из небольшого количества входных образцов.
3. Honggfuzz - это универсальный инструмент от Google, который может быть использован для фазинга различных типов приложений, включая веб-сервисы. Он особенно эффективен для выявления уязвимостей, связанных с безопасностью памяти.
4. Boofuzz - Наследник Sulley для сетевого фазинга и предназначен для фазинга сетевых протоколов. Этот инструмент может быть полезен для специалистов по сетевой безопасности, желающих проверить надежность сетевой инфраструктуры на устойчивость к атакам.
5. OSS-Fuzz - Инструмент представляет из себя платформу для непрерывного фазинга, которая интегрируется с проектами с открытым исходным кодом, помогая разработчикам и исследователям безопасности в автоматическом обнаружении уязвимостей.
6. ffuf - Один из самых быстрых веб-фаззеров, написанный на Go.
7. Libfuzzer - Разработан как так называемый инструмент эволюционного фаззинга. Как это работает – инструмент отправляет фаззированные входные данные в определенную точку входа или поле ввода в целевой программе. Затем он отслеживает, какие части кода задействуются, на основе реакции тестируемого приложения на запросы. Вооружившись новой информацией, Libfuzzer изменяет свои запросы, чтобы посмотреть, сможет ли он проникнуть еще глубже.
8. Sulley - Программа была создана для пользователей, которые хотят активировать механизм фаззинга, а затем перейти к работе над чем-то другим. Когда они вернутся через несколько часов или дней, у Sulley Fuzzing будет готов отчет обо всем, что он нашел.
Существует множество инструментов, которые можно использовать для повышения привилегий в системах как Windows, так и Linux. Подробнее о пяти инструментах, которые помогут вам в этом процессе:
1. PrivescCheck от itm4n - Целью этого сценария является выявление уязвимостей локального повышения привилегий (LPE), которые обычно возникают из-за проблем с конфигурацией Windows или неправильных методов работы. Он также может собирать полезную информацию для некоторых задач эксплуатации и пост-эксплуатации.
2. Linux Exploit Suggester от The-Z-Labs - Простой в использовании инструмент, позволяющий быстро определить потенциальные векторы атаки для повышения привилегий в системах Linux. Он автоматически определяет версию ядра и возвращает список эксплойтов, соответствующих этой версии.
3.PEASS-ng от Carlospolop - Это своего рода швейцарский армейский нож для повышения привилегий. Инструмент предоставляет обширные возможности по обнаружению уязвимостей и эксплуатации их в Windows и Unix-like системах.
4. Moriarty от BC-SECURITY - Комплексный .NET-инструмент, расширяющий функциональность Watson and Sherlock . Он предназначен для перечисления недостающих KB, обнаружения различных уязвимостей и предложения потенциальных эксплойтов для повышения привилегий в средах Windows.
5. autoSUID от Albertov - Этот сценарий позволяет вам находить и перечислять двоичные файлы SUID и проверять, можно ли использовать один из них для повышения или поддержания повышенных привилегий итеративным способом. Он сравнивает текущие двоичные файлы SUID в системе со списком GTFOBins и сообщает информацию о том, как повысить привилегии с помощью этих двоичных файлов.
Используя эти инструменты, вы сможете обнаружить потенциальные уязвимости и тщательно проверить систему на уязвимые точки для повышения привилегий
Почитал несколько статей по этой теме и если честно, разочаровался. Видимо, "всяк кулик, свое болото хвалит" в принципе все правильно, но убого, в плане функционала и возможностей, такие статьи может чат-ГПТ писать, который далек от задач системного администрирования и тему раскуривал по статьям которые сам и высрал. Как показывает опыт 15 лет системного инженера, нам платят за стабильность. Что это значит в практическом плане? Пока все работает, ты никому не нужен, а вот когда сломается... Тут главное понять куда копать и как исправить максимально быстро, для этого нужны простые и надежные программы, проверенные годами и если возможно без свистоперделок.
Если описывать работу софта по принципу:
Название
Описание
Чего делает
Где скачать
Таких статей море, они дают информацию, а что бы информация запала в голову, стала знанием, надо описывать реальные задачи, которые решает программа, поехали:
SpaceSniffer
Звонят Вам с утра и сообщают что не сохраняются файлы в "общей папке", Вы заходите на файловый сервер и видите, кто то из юзеров решил сделать резервную копию своих документов за пять лет или сохранил личные видосики в общей папке, что бы освободить место на телефончике, исчерпана дисковая квота или тупо занято все доступное пространство. Знакомо?
SpaceSniffer - гениальная софтина, вы говорите ей ФАС! и она шерстит все указанные папки, а результат выводит в визуальном виде, чем больше размер файла или папки, тем больше пространства она занимает в представлении. Если организация большая, и общих документов много, вас ждет масса открытий, у кого порнуха, у кого рецептики и дипломы тут лежат.
Возможности SpaceSniffer
Наглядная интерактивная диаграмма занятого и свободного места на дисках
Поддержка локальных дисков, съемных носителей, сетевых ресурсов
Анализирует файлы и папки на NTFS дисках
Отображает размеры папок и файлов в удобном графическом представлении
Позволяет быстро найти крупные файлы и папки, которые занимают много места
Фильтрация результатов по размеру, типу файлов и другим параметрам
Экспорт отчётов в HTML и текстовом формате
Есть портейбл версия, работает без установки
Интуитивно понятный интерфейс, минимум настроек
SpaceSniffer поможет оперативно выявить проблемы с заполненным диском и найти, что именно его занимает. Не заменимый инструмент для системных администраторов.
User Profile Wizard
Вы подняли контроллер домена и тут поняли, нужна программа с помощью которой нужно завести компьютер в домен и сделать локального юзера, доменным, т.е., сохранить его настройки, ярлыки, документы - всё то, с чем он работает каждый день и потерю чего воспримет очень болезнено. Когда в организации 20 компьютеров, можно и озадачиться, а если 300 или 1000? Вот Вам решение! Отличная софтина, справляется на ура, но... Сертификаты, лицензии придется накатывать ручками, по новой.
Основные возможности User Profile Wizard:
Автоматическое создание профилей для новых пользователей и компьютеров
Копирование, перенос и восстановление профилей
Быстрая миграция профилей на другой ПК
Пакетное создание и настройка множества профилей
Автономный режим для создания профиля без подключения к сети
Возможность изменения папки профиля, квоты диска
Импорт и экспорт профилей и настроек программ
Удаление временных файлов и очистка профилей
Редактирование конфигурации по умолчанию для новых профилей
Журнал событий и отчёты о процессах
Поддержка родных функций Windows и групповых политик
User Profile Wizard сильно упрощает рутинные задачи с профилями пользователей и компьютеров.
LanTopoLog
Новое место работы, Вам надо разобраться с сетевой структурой, какое оборудование, как включено. Коллега работавший до Вас, конструировал все на "живую нитку" организация росла, докупали оборудование, подключал и держал все это в голове или была другая причина, по которой схемы сети нет, мониторинга нет, ну вы поняли. Запустить сканер и проверить сеть по маске - решение для одноранговой сети, а если структура сложнее, есть vlan, vpn? Или например, в сети 15 штук D-Link DES-1210 (история из моей практики) которые просто втыкали, не заморачиваясь настройкой, взять их под управление и хоть как-то сконфигурировать, а они как известно, из коробки имеют статичный адрес 10.90.90.90 - 15 железок на которых штормит из за петли с единым IP адресом - страшный сон, такое на всю жизнь запоминается. Если напишите в комментариях, что интересно как разрулить такую беду, расскажу обязательно (у задачи несколько решений). Короче, пора разбираться, наводить порядок и тут начинается детективная история...
Существенно облегчит Вашу работу на новом месте может сетевой сканер L2 уровня, который построит схему физических соединений, покажет кто на каком порту сидит, какой порт заблокирован по причине петли (ну если конечно, активное оборудование настроено правильно). Таких программ по пальцам перечесть, все они своеобразные. Nagios - вроде как умеет строить схему по второму уровню, но умные люди говорят овчинка выделки не стоит, т.к., все самое вкусное в нем давно платно. SolarWind - "швецарский нож" умеет всё, но стоит денег для провинции невероятных, есть на торрентах, криво-ломаный и перенасыщенный левыми скриптами. Остается LanTopolog - на мой взгляд оптимальное решение, как БМВ - ничего лишнего и все есть. Да платный, но есть бесплатная версия, которая очень быстро построит схему сети L2 (не забудьте указать Core) правильно. Отыскать за каким свитчом и на каком порту сидит определенный MAC или IP адрес - легко и непринужденно! Если настроите на оборудовании RSTP - покажет где авария, умеет уведомления в телеграм и на почту слать, да много чего может. Отличие бесплатной версии, со временем перестает работать поиск и некоторые хосты скрываются под записью "Demo", но схема есть, можно зайти на оборудование и посмотреть.
Возможности LanTopoLog
автоматическое построение физической топологии локальной сети на основе данных, собранных с коммутаторов по протоколу SNMP
отображение схемы сети в двух-панельном браузерe
диаграммы сети можно редактировать
показывает все устройства на всех портах коммутаторов, их имена и адреса IP
настраиваемое контекстное меню для иконок компьютеров и коммутаторов
отображение номеров VLAN, портов LACP
мониторинг состояния Spanning Tree и оповещение об изменениях в топологии STP
ping мониторинг всех хостов сети
отображение даты и времени последнего ответа на ping каждого компьютера
добавление в схему любых данных, привязанных к mac адресу в импортируемом файле
публикация схемы сети на web сервере
поиск в базе данных LanTopoLog в том числе и через web браузер
автоматическое добавление компьютеров в схему сети по мере их подключения к сети с записью в журнале об обнаружения нового mac адреса и с оповещением
администраторов
индикация состояния тревоги и отправка уведомлений на e-mail, через Telegram и на Syslog сервер
инвентаризация компьютеров в сети предприятия средствами WMI
отображение скорости соединения на всех портах коммутаторов
мониторинг сетевого трафика, что позволяет узнать источник трафика с точностью до порта коммутатора
мониторинг ошибочных и потерянных пакетов (ifInErrors/ifOutErrors, ifInDiscards/ifOutDiscards)
оповещение администраторов о превышении заданных порогов трафика
Да, важный момент, на оборудовании должен быть настроен и включен протокол SNMP. Лицензия LanTopoLog привязывается к MAC адресу 1-3х устройств в сети, т.е., имеет смысл завести роутер специально для программы, уволился и забрал с собой.
FAR manager
Если честно, не знаю с чего начать, ситуаций когда FAR экономил моё время 100-500 тыщ. Ну например:
Нужно залить по скоренькому на виртуальный хостинг файл для подтверждения владения (google, yandex и т.д.) или подправить конфигурацию NGINX или MySQL на хосте Proxmox - создаешь SFTP подключение и правишь в встроеном редакторе.
Нужно подключиться к диску на другом компьютере с админскими правами, что бы скопировать файлы - была такая организация, где сотрудники перед увольнением удаляли данные, а руководство требовало снять копию, по разным причинам увольняются люди, но это совсем другая история.
Проверка DNS записей, например в ходе настройки почтового сервера, когда в командной строке вводишь однотипные запросы много раз с незначительными отличиями, проверяешь как резолвят сервера провайдер, google, cloudflare. Far позволяет редактировать комманду перед вводом.
Копирование, удаление, переименование файлов по маске - более гибкого инструмента наверное нет.
Far знает все исполняемые файлы на компьютере, сам предлагает варианты, только начните вводить. Правда для этого расположение файла должно быть включено в переменную $path .
Да много чего, главное начать юзать FAR, если зайдет потом будете наслаждаться его возможностями. Скажу сразу, заходит не всем, как например компы от Apple, есть у меня коллеги свято верят что TotalCommander может больше - я не спорю, неблагодарное это занятие. В википедии есть несколько статей по теме.
Важный момент, не забудьте отключать в встроеном редакторе BOM - если будете править линуксовые файлы, неочевидная фича, которая мне как то изрядно "крови попортила".
LDAP admin
Утро начинается не с кофе... В смысле утренние звонки это просьбы сбросить пароль, логика простая, приходит человек утром на работу, с просонья набирает старый пароль забыв сменить раскладку, потом нечаяно нажимает CAPS-LOCK и учетка блокируется, надо менять пароль и снимать блокировку учетки. Можно это сделать через RDP на контроллер домена, но проще держать под рукой LDAP admin - операция займет гораздо меньше времени. У программы есть русский язык, хотя для системного администратора это как правило не существенно, есть куча темплэйтов - рекомендую потестить, возможно и Вам зайдёт.
Возможности LDAP admin
Вот несколько наиболее полезных возможностей бесплатной утилиты LDAP Admin:
Подключение и управление Active Directory как GUI альтернатива консольным средствам AD
Просмотр доменов, деревьев каталогов, объектов AD в удобном интерфейсе
Создание, изменение, перемещение, удаление объектов AD (пользователей, групп, компьютеров и т.д.)
Управление групповыми политиками и их назначение на OU и объекты
Редактирование атрибутов объектов AD из GUI, массовые операции
Поиск объектов по фильтрам, экспорт результатов поиска
Синхронизация с AD из файлов CSV для массового импорта данных
Мониторинг репликации AD и состояния доменных контроллеров
Журнал событий для отслеживания изменений в AD
Настраиваемая ролевая модель безопасности для делегирования задач
LDAP Admin упрощает управление инфраструктурой AD и позволяет автоматизировать рутинные задачи.
Заключение
Надеюсь, эта подборка из нескольких бесплатных программ для системных администраторов оказалась полезной и помогла вам оптимизировать ваш рабочий софт. Конечно, это далеко не полный список, но я постарался включить действительно качественные, проверенные временем утилиты, которые решают наиболее ежедневные задачи.
Установите хотя бы несколько из этих инструментов на свой рабочий компьютер или ноутбук и вы сразу почувствуете, как возрастает ваша продуктивность. Думаю это позволит экономить время на рутинных операциях и больше сосредоточиться на более важных задачах. Буду рад получить вашу обратную связь и предложения дополнить этот список еще какими-то полезными программами! Оригинал статьи тут
Купил я клаву A4Tech Bloody S98 Sports Lime (клаву люблю - софт уже ненавижу)
Захотел я сделать профиль с музыкой - дабы не тянуться постоянно к FN клавише... Для изменения громкости и тд. Но меня достало постоянно менять цвет клавы - ибо при переключении профиля... Вся клава заливается его цветом... (вроде удобно, но сука.. опять тыкать FN и 1-9 чтоб поменять цвет)
в итоге тыкался, тыкался - в проге сменить цвет нельзя... Нашел файлик BackLight.log по пути C:\Program Files (x86)\KeyDominator3\KeyDominator3\UserLog\Keyboard\SR98_NEW_418FCE3D\kernel4\BackLight.log
SR98_NEW_418FCE3D - в моём случае A4Tech Bloody S98 Sports Lime у вас явно будет, что-то другое (особо не заблудитесь)
Открываем файл через (в моём случае Notepad++) Видим дохуя текста....... теперь вспоминаем какой там была папка, ах да - у меня SR98_NEW_418FCE3D
Значения цвета здесь в упоси сатана Decimal... (циферки после RGB= ) НО, куда же без НО!!!! Красный и синий цвет поменяны местами... Буквально... Если вписать 255 (синий) в проге и соответственно на клаве - мы получим красный... (что фактически 16711680)
в итоге нужный мне оттенок Decimal:5964287 (hex 5B01FF - RGB 91,1,255) в проге будет Decimal:16712027