Categories: Всячина

mini-notes-issue-7/

Темы седьмого выпуска: скрипт для загрузки картинок на Yfrog, получение паролей из адресного пространства процесса в UNIX, обфускация кода в Perl, регулярное выражение для валидации JSON и не только. Предыдущие выпуски: первый , второй , третий , четвертый , пятый и шестой .

1. Скрипт загрузки картинок на Yfrog

Честно говоря, поначалу я думал написать отдельный модуль и залить его на CPAN, но потом оказалось, что тут кода-то всего на тридцать строк:

#!/usr/bin/env perl

use strict ;
use warnings ;
use LWP ;

# yfrog-uplaod.pl v 0.1
# (c) Alexandr A Alexeev 2012 | http://remontka.com/

my $file = $ARGV [ 0 ] or die «Usage: $0 <fname> n » ;

my $host = int ( rand ( 9 ) ) + 1 ;
my $ua = LWP :: UserAgent -> new ( ) ;
my $res = $ua -> post (
«http://iload$host.imageshack.us/upload_api.php» ,
[
key => ‘015EFMNVfe7f6f7e93cb4a7b0a41e19956ce59f8’ ,
Filedata => [ $file ] ,
] ,
Content_Type => ‘form-data’ ,
) ;

if ( $res -> is_success &&
$res -> decoded_content =~ m ! <image_link> ( .*? ) </ image_link >! ) {
print «[+] OK n » ;
print «image_link: t $1 n » ;
$res -> decoded_content =~ m ! <yfrog_link> ( .*? ) </ yfrog_link >!;
print «yfrog_link: t $1 n » ;
} else {
print «[-] Failed n » ;
}

Короткую ссылку можно использовать в Twitter, длинную — на форумах и в блогах.

2. Как в X11 переключиться на другой монитор

Выводит список мониторов и доступных режимов:

xrandr

Включаем вывод на монитор VGA:

xrandr —output VGA —auto

Выключаем вывод на монитор LVDS:

xrandr —output LVDS —off

Меняем разрешение для монитора VGA:

xrandr —output VGA —mode 1680×1050

Чтобы картинка не растягивалась:

xrandr —output VGA —mode 1680×1050 —scale 1×1

Также можно разделить картинку между несколькими мониторами:

xrandr —output LVDS —left-of VGA —auto

Чтобы не увидеть сообщение об ошибке вроде такого:

xrandr: screen cannot be larger than 1280×1280 (desired size 2560×960)

… нужно подправить xorg.conf .

3. Что делать, если в Ubuntu у окон пропали заголовки?

В Xubuntu нужно сказать:

xfwm4 —replace

В других убунтах вместо xfwm используется metacity или compiz. Соответствующий менеджер окон нужно запустить с ключом — -replace. Если же менеджера окон нет вообще (например, он был случайно удален), его нужно установить. Это удобно сделать, перейдя в консоль путем нажатия Ctr+Alt+F1. Вернуться в X11 можно с помощью сочетания Ctr+Alt+F7.

4. Отключение гостевого входа в Xubuntu

По умолчанию в Xubuntu разрешен гостевой вход в систему. Для отключения этой возможности нужно отредактировать файл /etc/lightdm/lightdm.conf следующим образом:

[SeatDefaults]
user-session=xubuntu
greeter-session=lightdm-gtk-greeter
allow-guest=false

Обратите особое внимание на последнюю строчку. После перезагрузки системы войти под гостем уже не удастся.

5. Как получить пароли из адресного пространства процесса

Получаем ID процесса:

ps wuax | grep mail-notification

Аттачимся к процессу с помощью отладчика GDB :

sudo gdb —pid 5075

(gdb) generate-core-file
(gdb) detach
(gdb) q

Пароль скорее всего хранится в памяти где-то рядом с именем пользователя:

sudo strings core.5075 | grep -C 3 ‘afiskon’

В выводе получим несколько десятков строк, напоминающих пароль — осталось попробовать их все по очереди.

В Ubuntu для выполнения такого приема нужно иметь права суперпользователя, а вот в CentOS достаточно просто быть владельцем процесса. Во FreeBSD с настройками по умолчанию примем не сработает, ибо отключен procfs.

6. Обфускация кода на Perl

Можно вбить в адресной строки браузера http://perlobfuscator.com/ (см также разъяснения относительно так называемого «сжатия») или же воспользоваться модулем Acme::EyeDrops:

perl -MAcme:: EyeDrops =sightly -le ‘print sightly({SourceFile=>»x.pl»})’

См также заметку Как написать неплохой обфускатор .

7. Debian — пишем простенький init.d скрипт

Создаем файл /etc/init.d/common следующего содержания:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          common
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Short description
# Description:       Description…
### END INIT INFO

case «$1» in
start )
ifconfig eth0 down
ifconfig eth0 hw ether 00: 11 : 22 : 33 : 44 : 55
ifconfig eth0 up
;;
stop )
;;
* )
echo «Usage: /etc/init.d/common {start|stop}»
exit 1
;;
esac

exit 0

Как видите, этот скрипт меняет MAC-адрес сетевой карты во время загрузки системы (в комментариях подсказывают , что пример неудачный). Меняем права доступа и добавляем скрипт на автозапуск:

sudo chmod 755 / etc / init.d / common
sudo update-rc.d common defaults

Удаляем скрипт из автозапуска:

sudo update-rc.d -f common remove

См также wiki-страничку How to LSBize an Init Script на debian.org, и еще скрипт для автозапуска веб-сервера starman , что не так давно проскакивал в рассылке Moscow.PM.

8. Если вы не помните приоритеты операторов в Perl

… то оцените следующий прием по достоинству:

perl -MO =Deparse,-p -e ‘print $x * $y — $z && $xx || $yy ^ ! $zz’

Вывод:

print((((($x * $y) — $z) && $xx) || ($yy ^ (!$zz))));

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

9. Как изменить яркость экрана в Debian/Ubuntu

Очень просто:

sudo setpci -s 00: 02.0 F4.B= 99

Подробности, как обычно, в манах.

10. Регулярное выражение для валидации JSON

А это регулярное выражение я решил тупо скопипастить со StackOverflow :

sub JSON { # http://stackoverflow.com/a/3845829
qr /
( ? ( DEFINE )
( ? <number> -? ( ?= [ 1 9 ] | 0 ( ?! d ) ) d + ( . d + ) ? ( [ eE ] [ +- ] ? d + ) ? )
( ? <boolean> true | false | null )
( ? <string> » ([^» \\ ] * | \\ [ » \ \ bfnrt / ] | \ \ u [0-9a-f]{4} )* » )
( ? <array> [ ( ?: ( ? &json ) ( ?: , ( ? &json ) ) * ) ? s * ] )
( ? <pair> s * ( ? &string ) s * : ( ? &json ) )
( ? <object> { ( ?: ( ? &pair ) ( ?: , ( ? &pair ) ) * ) ? s * } )
( ? <json> s * ( ?: ( ? &number ) | ( ? &boolean ) | ( ? &string ) | ( ? &array ) | ( ? &object ) ) s * )
)
A ( ? &json ) Z
/ six
}

В модуле Regexp::Constant, если что, такого нет.

Дополнение: Мини заметки — выпуск 8

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago