Темы седьмого выпуска: скрипт для загрузки картинок на Yfrog, получение паролей из адресного пространства процесса в UNIX, обфускация кода в Perl, регулярное выражение для валидации JSON и не только. Предыдущие выпуски: первый , второй , третий , четвертый , пятый и шестой .
1. Скрипт загрузки картинок на Yfrog
Честно говоря, поначалу я думал написать отдельный модуль и залить его на CPAN, но потом оказалось, что тут кода-то всего на тридцать строк:
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 переключиться на другой монитор
Выводит список мониторов и доступных режимов:
Включаем вывод на монитор VGA:
Выключаем вывод на монитор LVDS:
Меняем разрешение для монитора VGA:
Чтобы картинка не растягивалась:
Также можно разделить картинку между несколькими мониторами:
Чтобы не увидеть сообщение об ошибке вроде такого:
… нужно подправить xorg.conf .
3. Что делать, если в Ubuntu у окон пропали заголовки?
В Xubuntu нужно сказать:
В других убунтах вместо xfwm используется metacity или compiz. Соответствующий менеджер окон нужно запустить с ключом — -replace. Если же менеджера окон нет вообще (например, он был случайно удален), его нужно установить. Это удобно сделать, перейдя в консоль путем нажатия Ctr+Alt+F1. Вернуться в X11 можно с помощью сочетания Ctr+Alt+F7.
4. Отключение гостевого входа в Xubuntu
По умолчанию в Xubuntu разрешен гостевой вход в систему. Для отключения этой возможности нужно отредактировать файл /etc/lightdm/lightdm.conf следующим образом:
user-session=xubuntu
greeter-session=lightdm-gtk-greeter
allow-guest=false
Обратите особое внимание на последнюю строчку. После перезагрузки системы войти под гостем уже не удастся.
5. Как получить пароли из адресного пространства процесса
Получаем ID процесса:
Аттачимся к процессу с помощью отладчика GDB :
(gdb) generate-core-file
(gdb) detach
(gdb) q
Пароль скорее всего хранится в памяти где-то рядом с именем пользователя:
В выводе получим несколько десятков строк, напоминающих пароль — осталось попробовать их все по очереди.
В Ubuntu для выполнения такого приема нужно иметь права суперпользователя, а вот в CentOS достаточно просто быть владельцем процесса. Во FreeBSD с настройками по умолчанию примем не сработает, ибо отключен procfs.
6. Обфускация кода на Perl
Можно вбить в адресной строки браузера http://perlobfuscator.com/ (см также разъяснения относительно так называемого «сжатия») или же воспользоваться модулем Acme::EyeDrops:
См также заметку Как написать неплохой обфускатор .
7. Debian — пишем простенький init.d скрипт
Создаем файл /etc/init.d/common следующего содержания:
### 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 update-rc.d common defaults
Удаляем скрипт из автозапуска:
См также wiki-страничку How to LSBize an Init Script на debian.org, и еще скрипт для автозапуска веб-сервера starman , что не так давно проскакивал в рассылке Moscow.PM.
8. Если вы не помните приоритеты операторов в Perl
… то оцените следующий прием по достоинству:
Вывод:
Как видите, вместо того, чтобы учить приоритеты операторов можно просто запомнить приведенную выше команду.
9. Как изменить яркость экрана в Debian/Ubuntu
Очень просто:
Подробности, как обычно, в манах.
10. Регулярное выражение для валидации JSON
А это регулярное выражение я решил тупо скопипастить со StackOverflow :
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