<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5566599040270542169</id><updated>2012-02-02T11:10:26.377-08:00</updated><category term='virtualization'/><category term='kernel32.dll'/><category term='unix-tools'/><category term='деловые качества'/><category term='zfs'/><category term='ini-файл'/><category term='debugging'/><category term='perl'/><category term='import'/><category term='hash'/><category term='ollydbg'/><category term='фотография'/><category term='Windows7'/><category term='развивающие задачки'/><category term='C++'/><category term='kernelbase.dll'/><category term='shell'/><category term='python'/><category term='polymorphic'/><category term='cryptanalysis'/><category term='mbr'/><category term='Hiew'/><category term='freebsd'/><category term='support documentation'/><category term='reversing'/><category term='переводы'/><category term='английский'/><category term='PEB'/><category term='urls'/><category term='english'/><category term='System loader'/><category term='wifi'/><category term='application design'/><category term='developments'/><category term='MSVC2008'/><category term='drivers development'/><category term='деловая этика'/><category term='Внутренности Windows'/><category term='API hooking'/><category term='UAC'/><category term='unix'/><category term='грамматика'/><category term='screencasting'/><category term='testing'/><category term='nikon'/><category term='используемые программы'/><category term='настройка'/><category term='unpacking'/><category term='binding'/><title type='text'>Software research and development</title><subtitle type='html'>About reversing engineering and software development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1788026980102048951</id><published>2012-01-22T09:33:00.000-08:00</published><updated>2012-01-23T04:54:27.777-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>FreeBSD and Edge E120</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: left;"&gt;Этот топик связан с продвижением процесса настройки и установки FreeBSD на недавно купленный Lenove Thinkpad Edge E120 о нем&amp;nbsp;&lt;a href="http://www.notebook.ru/notebook/lenovo-thinkpad-edge-e120-11700/"&gt;подробней&lt;/a&gt;.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;Трудности:&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;div&gt;Хочется вместо VESA подключить Intel GMA 300 драйвер&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Не удается настроить иксы(возможно из-за не родного драйвера) и сейчас все сжато по высоте.&lt;/li&gt;&lt;li&gt;Когда вставляю наушники, не появляется звук в наушниках и не исчезает в динамиках.&lt;/li&gt;&lt;/ol&gt;&lt;ol style="text-align: left;"&gt;&lt;/ol&gt;&lt;div&gt;Попытки:&lt;/div&gt;&lt;div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;С моей Video-карточкой Intel GMA 3000 все сложно, ведутся работы в проекте и по этому поводу можно &amp;nbsp;почитать&amp;nbsp;&lt;a href="http://techfeed.ru/2011/07/dlya-freebsd-dostupen-rabochij-prototip-videodrajvera-intel-s-podderzhkoj-kmsgem/"&gt;тут&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Да, все дело в разрешении. Смена драйвера, как только его из Current в Head затащат, должна помочь.&lt;/li&gt;&lt;li&gt;Для решения попробовать&amp;nbsp;&lt;a href="http://wiki.freebsd.org/Sound"&gt;Wiki Freebsd Sound&lt;/a&gt;. Также нужно почитать man snd_hda(4)&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1788026980102048951?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1788026980102048951/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1788026980102048951' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1788026980102048951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1788026980102048951'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2012/01/freebsd-and-edge-e120.html' title='FreeBSD and Edge E120'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5104895262442417342</id><published>2012-01-22T05:09:00.000-08:00</published><updated>2012-02-01T23:36:31.103-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='urls'/><category scheme='http://www.blogger.com/atom/ns#' term='developments'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Developers artilcle ULRs</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Собственно надо бы куда-нибудь помещать ссылки на статьи по разработки, которые мне показались интересными и полезными. Этот топки и есть список таких ссылок.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Разработка ПО&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://experience.openquality.ru/exception-handling/"&gt;Типичные сценарии распространения и обработки исключений&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://habrahabr.ru/blogs/programming/136766/"&gt;Паттерны ООП в метафорах&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Тестирование ПО:&lt;/div&gt;&lt;div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://testingforall.com/blog/?p=38"&gt;Тест план: искореняем боязнь&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.openquality.ru/unit-tests-why/"&gt;Модульные тесты: pros, cons, et cetera&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5104895262442417342?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5104895262442417342/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5104895262442417342' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5104895262442417342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5104895262442417342'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2012/01/developers-artilcle-ulrs.html' title='Developers artilcle ULRs'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5173209170587589082</id><published>2012-01-18T02:45:00.000-08:00</published><updated>2012-02-02T11:10:26.385-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='urls'/><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>FreeBSD article URLs</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Здесь буду перечислять список URL-ов на статьи по FreeBSD которые мне понравились.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://eax.me/freebsd-soft/"&gt;Установка и обновление софта во FreeBSD&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/base/sys/freebsd_ports_tips.txt.html"&gt;Хитрости работы с портами в FreeBSD, использование portupgrade&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pascal.tsu.ru/unix/syscons/russian.html"&gt;Русификация syscons&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pascal.tsu.ru/unix/syscons/screen.html"&gt;Дисплей&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pascal.tsu.ru/unix/syscons/keyboard.html"&gt;Клавиатура&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Обзор девайсов:&lt;/div&gt;&lt;div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.mavetju.org/mail/view_message.php?list=freebsd-questions&amp;amp;id=794805"&gt;ATA_STATIC_ID&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;Исключительно по UNIX:&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://cb.vu/unixtoolbox.xhtml"&gt;UNIX TOOLBOX&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;FreeBSD это охрененное средство для обновления мозгов&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5173209170587589082?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5173209170587589082/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5173209170587589082' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5173209170587589082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5173209170587589082'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2012/01/freebsd-url-article-list.html' title='FreeBSD article URLs'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2219727192714287384</id><published>2011-12-25T03:44:00.000-08:00</published><updated>2012-01-28T01:13:58.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='деловая этика'/><category scheme='http://www.blogger.com/atom/ns#' term='деловые качества'/><title type='text'>Развитие деловых качеств</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Вобщем-то встречаю немало интересных мануалов в инэте по развитию личностных деловых качеств и хочется полезные из них куда-нить записывать. Эта тема есть список подобных мануалов.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.rabota.ru/soiskateljam/na_rabochem_meste/pravila_horoshego_tona.html?action=print"&gt;Правила хорошего тона&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rabota.ru/rabotodateljam/upravlenie_personalom/demotivatory_personala.html?action=print"&gt;Демотиваторы персонала&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://habrahabr.ru/blogs/infosphere/135265/"&gt;Электронная почта это просто?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://habrahabr.ru/blogs/htranslations/137172/"&gt;Почему я не стану вас нанимать&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2219727192714287384?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2219727192714287384/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2219727192714287384' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2219727192714287384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2219727192714287384'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/12/blog-post.html' title='Развитие деловых качеств'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-9132287991458093463</id><published>2011-12-25T02:49:00.000-08:00</published><updated>2011-12-25T08:45:26.775-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='настройка'/><title type='text'>Настройка FreeBSD 9.0 amd64</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Вообщем-то в этой теме хочу перечислить все что я делаю по настройке FreeBSD 9.0 amd64, пока RC3 для настройки, чтобы начать&amp;nbsp;чувствовать&amp;nbsp;себя как обычный привычный юзер работающий за виндой и не хавающий мозг вопросами "А как можно распечатать?" или "Как можно посмотреть DJVU? ". Вобщем целью сего топа является перечисление настроек по настройке десктоп окружения.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;0. Первичные настройки&lt;br /&gt;&lt;br /&gt;Отключения сигнала Beep в консоли:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; # echo "hw.syscons.bell=0" &amp;gt;&amp;gt; /etc/sysctl.conf&lt;/blockquote&gt;Задание имени компа:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; # echo 'hostname="ТУТА_ИМЯ_КОМПА"' &amp;gt;&amp;gt; /mnt/etc/rc.conf&lt;/blockquote&gt;Все дальнейшие настройки касаются файла ".cshrc", т.к. он настраивает csh. Итак,&amp;nbsp;для разноцветности вывода тулзов нужно добавить:&lt;br /&gt;&lt;br /&gt;Для grep:&lt;br /&gt;&amp;nbsp; alias grep grep --colour=auto&lt;br /&gt;&lt;br /&gt;Для ls:&lt;br /&gt;&amp;nbsp; setenv CLICOLOR 1 &lt;br /&gt;&amp;nbsp; setenv LSCOLORS ExGxFxdxCxDxDxBxBxExEx&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;Теперь изменим shell-prompt на более дружелюбный:&lt;br /&gt;&amp;nbsp; set prompt = "%n@%m [%B%c%b]%# "&lt;br /&gt;&lt;br /&gt;1. Загрузка картинки во время старта вместо диагностических сообщений.&lt;br /&gt;&lt;br /&gt;Основание: сообщения в логах можно увидеть и они нужны только при разборе полетов и очень редко нужно видеть что-то на экране из диагностики. Если уж понадобится, то врубить несложно.&lt;br /&gt;&lt;br /&gt;Загрузить картинку BMP-формата и разрешением не больше "1024х768", лично у меня "640x480", затем ложим в папку "/boot/&lt;filename&gt;" и делаем так:&lt;/filename&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# echo 'vesa_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'splash_bmp_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'bitmap_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;&lt;div style="text-align: -webkit-auto;"&gt;# echo 'bitmap_name="/boot/&lt;span style="line-height: 19px;"&gt;ИМЯ_ВАШЕГО_ФАЙЛА&lt;/span&gt;"' &amp;gt;&amp;gt; /boot/loader.conf&lt;/div&gt;&lt;/blockquote&gt;Я специально пометил большими буквами куда надо вколотить гвоздями имя файла содержащего сплэш-картинку.&lt;br /&gt;&lt;br /&gt;2. Настройка WiFi&lt;br /&gt;&lt;br /&gt;Пока настроено&amp;nbsp;&lt;a href="http://ntvisigoth.blogspot.com/2011/12/wifi-thinkpad-e120.html"&gt;так&lt;/a&gt;. Да это то что я запостил совсем недавно. Пока не решил проблему настройки под много сетей будет так. Вопрос который решаю в этом направлении звучит так:&lt;br /&gt;&lt;br /&gt;Как настроить несколько точек доступа, к примеру "домашняя", "рабочая", "макдональдс", "дом второй мамы" и чтобы фриха автоматом шарилась по этим точкам в попытках подключиться.&lt;br /&gt;&lt;br /&gt;3. Двоичная совместимость с Linux&lt;br /&gt;&lt;br /&gt;Для общения по Skype и просмотра флэш-роликов на ютубе нужно поставить эту совместимость.&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# echo 'linux_enable="YES"' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;# echo 'linproc /compat/linux/proc linprocfs rw 0 0' &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;# mkdir -p /compat/linux/proc&lt;br /&gt;# mount /compat/linux/proc&lt;br /&gt;# /etc/rc.d/abi start&lt;/blockquote&gt;3. Графический пользовательский интерфейс&lt;br /&gt;&lt;br /&gt;Понимание магии в этом вопрос помог &lt;a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/x-config.html"&gt;хэндбук&lt;/a&gt;.&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# pkg_add -r xorg&lt;br /&gt;# pkg_add -r xfce4&lt;/blockquote&gt;Далее:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# echo 'hald_enable="YES"' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;# echo 'dbus_enable="YES"' &amp;gt;&amp;gt; /etc/rc.conf&lt;/blockquote&gt;&lt;br /&gt;Затем создал возможность запуска по startx, заюзал из хэндбука:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;% echo "/usr/local/bin/startxfce4" &amp;gt; ~/.xinitrc&lt;/blockquote&gt;Однако сделал это под root.&lt;br /&gt;&lt;br /&gt;Несмотря на то что иксы по startx запускаются сделал такое:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# Xorg -configure&lt;/blockquote&gt;Затем поставил:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# pkg_add -r xfce4-xkb-plugin&amp;nbsp;&lt;/blockquote&gt;Этот пакет дает возможность вывести индикатор раскладки и задать привычную мне &amp;nbsp;горячую клавишу по смене раскладки "ctrl_shift". Правда у меня какой-то глюк, при нажатии на Shift и '?', у меня не появляется ',' а появляется '?'. Я к такому не привык и ищу как бы это решить :)&lt;br /&gt;&lt;br /&gt;4. Установка Google Chrome и флэш к нему&lt;br /&gt;&lt;br /&gt;Сам хром поставил так:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# pkg_add -r chromium&lt;/blockquote&gt;Флэш поставил на основе этой&amp;nbsp;&lt;a href="http://www.sergeysl.ru/freebsd-flash-on-firefox-chromium-epiphany-konqueror-and-opera/"&gt;статьи&lt;/a&gt;, из нее скомуниздил:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# cd /usr/ports/www/linux-f10-flashplugin11&lt;br /&gt;# make install clean&lt;br /&gt;# cd ../nspluginwrapper&lt;br /&gt;# make install clean&lt;br /&gt;# mkdir /usr/local/lib/browser_plugins&lt;br /&gt;# nspluginwrapper -a -i&lt;br /&gt;# mkdir -p&amp;nbsp;&amp;lt;ТУТА_ДОМАШНИЙ_КАТАЛОГ_ЮЗЕРА&amp;gt;/.mozilla/plugins&lt;br /&gt;# ln -s /usr/local/lib/browser_plugins/npwrapper.libflashplayer.so &amp;lt;ТУТА_ДОМАШНИЙ_КАТАЛОГ_ЮЗЕРА&amp;gt;/.mozilla/plugins&lt;/blockquote&gt;Дальше в адресной строке Chrome пишем "chrome://plugins" и наблюдаем флэш-плагин.&lt;br /&gt;&lt;br /&gt;5. Midnight Commander&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# pkg_add -r mc&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-9132287991458093463?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/9132287991458093463/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=9132287991458093463' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/9132287991458093463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/9132287991458093463'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/12/freebsd-90-amd64.html' title='Настройка FreeBSD 9.0 amd64'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1468425630341752126</id><published>2011-12-21T13:06:00.000-08:00</published><updated>2011-12-21T13:06:36.915-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='настройка'/><title type='text'>Настройка WiFi на Thinkpad e120</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Опишу тут, чтобы не забыть, как мне на моем Lenovo Thinkpad e120 интернет через WiFi настроить.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;blockquote class="tr_bq"&gt;# echo 'if_iwn_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'wlan_wep_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'wlan_ccmp_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'wlan_tkip_load="YES"' &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;# echo 'wlans_iwn0="wlan0"' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;# echo 'ifconfig_wlan0="WPA DHCP"' &amp;gt;&amp;gt; /etc/rc.conf&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;# wpa_passprase &amp;lt;тут задаем SSID&amp;gt; &amp;lt;тут задаем пароль&amp;gt; &amp;gt;&amp;gt; /etc/wpa_supplicant.conf&lt;/blockquote&gt;Открываем этот созданный файл и задаем:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;network={&lt;br /&gt;&amp;nbsp; ssid="тут мой SSID"&lt;br /&gt;&amp;nbsp; key_mgmt=WPA-PSK&lt;br /&gt;&amp;nbsp; #psk=тута мой пароль&lt;br /&gt;&amp;nbsp; psk=тут дохрена цифр связанных с моим паролем&lt;br /&gt;}&lt;/blockquote&gt;Задать надо именно "key_mgmt" поле!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1468425630341752126?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1468425630341752126/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1468425630341752126' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1468425630341752126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1468425630341752126'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/12/wifi-thinkpad-e120.html' title='Настройка WiFi на Thinkpad e120'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4076219421844645867</id><published>2011-12-20T01:39:00.000-08:00</published><updated>2012-01-19T10:46:23.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='mbr'/><title type='text'>Установка FreeBSD на MBR+ZFS</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;В виду того что купил новый девайс Lenovo ThinkPad Edge E120 мне очень захотелось поставить туда FreeBSD. На данный момент модно ставить GPT , а сверху ZFS. Однако у меня появились не малые траблы с этим. По видимому EFI там весьма кривой. Вот собственно&amp;nbsp;&lt;a href="http://sysadmins.ru/topic334377.html?sid=48d59ac0c1663f87a605948f628fcb89"&gt;тема&lt;/a&gt;&amp;nbsp;про трудности и что собственно я предпринял.&lt;br /&gt;&lt;br /&gt;В этой заметке описываю как ставить на базе MBR + GPT + 9.0 amd64 RC3&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Задача&lt;/b&gt;&lt;/i&gt;:&lt;br /&gt;Установить&amp;nbsp;FreeBSD 9.0 amd64 RC3 с корнем и основной ФС на базе ZFS.&lt;br /&gt;&lt;br /&gt;В &lt;i&gt;&lt;b&gt;наличии&lt;/b&gt;&lt;/i&gt;:&lt;br /&gt;Процессор &amp;nbsp; &amp;nbsp;: 64-битный&lt;br /&gt;Жесткий диск : 298 ГБ&lt;br /&gt;Оперативка &amp;nbsp; : 2ГБ&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Терминология&lt;/b&gt;&lt;/i&gt;:&lt;br /&gt;пул - под этим словом понимается пул устройств создаваемый командой "zfs create"&lt;br /&gt;amd64zfs - используется в качестве имени&amp;nbsp;ZFS&amp;nbsp;пула&lt;br /&gt;ada0 - это имя устройства жесткого HITACHI SATA-диска, куда я ставлю систему&lt;br /&gt;ada0s1 - это имя устройства слайса в MBR на который размечаем BSD-разметку&lt;br /&gt;Fixit - Командная строка LiveCD. Нужно загрузиться с memstick или DVD образа. Выбрать на старте опцию "LiveCD"&lt;br /&gt;&lt;br /&gt;Опираемся на статьи:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;http://wiki.freebsd.org/RootOnZFS/ZFSBootPartition&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.aisecure.net/2011/11/28/root-zfs-freebsd9/"&gt;http://www.aisecure.net/2011/11/28/root-zfs-freebsd9/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;1. Размечаем диск в MBR и создаем слайс:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# gpart create -s MBR ada0&lt;br /&gt;&amp;nbsp; Fixit# gpart add -t freebsd ada0&lt;/blockquote&gt;2. Размечаем слайс в BSD и создаем партиции:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# gpart create -s BSD ada0s1&lt;br /&gt;&amp;nbsp; Fixit# gpart add -s 294G -t freebsd-zfs ada0s1&lt;br /&gt;&amp;nbsp; Fixit# gpart add -t freebsd-swap ada0s1&lt;/blockquote&gt;&lt;b&gt;Note&lt;/b&gt;: &lt;i&gt;swap &lt;/i&gt;должен быть после zfs-партиции&lt;br /&gt;&lt;br /&gt;3. Задаем активный слайс: &lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# gpart set -a active -i 1 ada0&lt;/blockquote&gt;4. Увеличиваем /tmp до 512МБ:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# umount /dev/md1&lt;br /&gt;&amp;nbsp; Fixit# mdmfs -s 512M md1 /tmp&lt;/blockquote&gt;5. Создаем zfs пул:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# zpool create amd64zfs /dev/ada0s1a&lt;br /&gt;&amp;nbsp; Fixit# zpool set bootfs=amd64zfs amd64zfs&lt;br /&gt;&amp;nbsp; Fixit# zfs set checksum=fletcher4 amd64zfs&amp;nbsp;&lt;/blockquote&gt;6. Пишем загрузчик:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# gpart bootcode -b /boot/mbr ada0&lt;/blockquote&gt;7. Временно монтируем пул:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Fixit# zfs set mountpoint=/mnt amd64zfs&amp;nbsp;&lt;/blockquote&gt;8. Устанавливаем ZFS-загрузчик&lt;br /&gt;&lt;br /&gt;&amp;nbsp;*&amp;nbsp;Экспортируем&amp;nbsp;пул перед установкой буткода&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit: zpool export amd64zfs&lt;/blockquote&gt;&amp;nbsp; * Сетапим будкод стадии №1&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# dd if=/boot/zfsboot of=/dev/ad0s1 count=1&amp;nbsp;&lt;/blockquote&gt;&lt;b&gt;Note&lt;/b&gt;: Если появится сообщение "operation not permitted", то попробуй:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; &amp;nbsp; Fixit# sysctl kern.geom.debugflags=0x10&lt;/blockquote&gt;&amp;nbsp; * Сетапим буткод Стадия №2&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# dd if=/boot/zfsboot of=/dev/ad0s1a skip=1 seek=1024&lt;/blockquote&gt;&lt;b&gt;Note&lt;/b&gt;: Важно понимать что этот будкод устанавливается в подходящую дыру на диске в&amp;nbsp;ФС&amp;nbsp;согласно&amp;nbsp;формату ZFS это как раз после&amp;nbsp;ZFS&amp;nbsp;мета-данных, т.е. seek=1024&lt;br /&gt;&lt;br /&gt;&amp;nbsp; * Импортируем пул для продолжения установки&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit: zpool import -o cachefile=/tmp/zpool.cache amd64zfs&lt;/blockquote&gt;9. Создаем файловые схемы:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# zfs create amd64zfs/data&lt;br /&gt;&amp;nbsp; Fixit# zfs create amd64zfs/usr&lt;br /&gt;&amp;nbsp; Fixit# zfs create amd64zfs/usr/home&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o quota=4G amd64zfs/tmp&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o quota=4G amd64zfs/var&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o quota=4G amd64zfs/var/tmp&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o setuid=off amd64zfs/var/db &lt;br /&gt;&amp;nbsp; Fixit# zfs create -o setuid=off amd64zfs/usr/obj&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o exec=off -o setuid=off amd64zfs/var/empty &lt;br /&gt;&amp;nbsp; Fixit# zfs create -o compression=lzjb -o exec=on -o setuid=off amd64zfs/usr/src &lt;br /&gt;&amp;nbsp; Fixit# zfs create -o compression=off -o exec=on -o setuid=off amd64zfs/usr/ports&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o compression=lzjb -o exec=off -o setuid=off amd64zfs/var/crash&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o compression=off -o exec=off -o setuid=off amd64zfs/usr/ports/distfiles&lt;br /&gt;&amp;nbsp; Fixit# zfs create -o compression=off -o exec=off -o setuid=off amd64zfs/usr/ports/packages&lt;/blockquote&gt;10. Задаем привычные права:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# chmod 1777 /mnt/tmp&lt;br /&gt;&amp;nbsp; Fixit# chmod 1777 /mnt/var/tmp&lt;br /&gt;&amp;nbsp; Fixit# cd /mnt&amp;nbsp;; ln -s usr/home home&lt;/blockquote&gt;11. Создадим под-шел:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# sh&lt;/blockquote&gt;&lt;b&gt;Note&lt;/b&gt;: По умолчанию используется&amp;nbsp;&lt;i&gt;tsch&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;12. Установка системы:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# cd /usr/freebsd-dist&lt;br /&gt;&amp;nbsp; Fixit# export DESTDIR=/mnt&lt;br /&gt;&amp;nbsp; Fixit# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;&lt;br /&gt;&amp;nbsp; Fixit# do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done&lt;/blockquote&gt;13. Задание настроек загрузчика:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# echo 'zfs_enable="YES"' &amp;gt;&amp;gt; /mnt/etc/rc.conf&lt;br /&gt;&amp;nbsp; Fixit# echo 'zfs_load="YES"' &amp;gt;&amp;gt; /mnt/boot/loader.conf&lt;br /&gt;&amp;nbsp; Fixit# echo 'vfs.root.mountfrom="zfs:amd64zfs"' &amp;gt;&amp;gt; /mnt/boot/loader.conf&lt;br /&gt;&amp;nbsp; Fixit# cat &amp;lt;&amp;lt; EOF &amp;gt; /mnt/etc/fstab&lt;/blockquote&gt;Пишем следующее:&lt;br /&gt;&lt;br /&gt;# Device Mountpoint FStype Options Dump Pass#&lt;br /&gt;/dev/ada0s1b none swap sw 0 0&lt;br /&gt;EOF&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: Посмотри и убедись в назначении ada0s1b это точно своп?&lt;br /&gt;&lt;br /&gt;14. Копирование кэша пула:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# cp/tmp/zpool.cache&amp;nbsp;/mnt/boot/zfs/zpool.cache&lt;/blockquote&gt;15. Размонтировать все системы:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# zfs set readonly=on amd64zfs/var/empty&lt;br /&gt;&amp;nbsp; Fixit# umount -f /mnt&lt;br /&gt;&amp;nbsp; Fixit# zfs umount -a&lt;/blockquote&gt;16. Изменяем точки монтирования для пула?&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; Fixit# zfs set mountpoint=legacy amd64zfs&lt;br /&gt;&amp;nbsp; Fixit# zfs set mountpoint=/tmp amd64zfs/tmp&lt;br /&gt;&amp;nbsp; Fixit# zfs set mountpoint=/usr amd64zfs/usr&lt;br /&gt;&amp;nbsp; Fixit# zfs set mountpoint=/var amd64zfs/var&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4076219421844645867?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4076219421844645867/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4076219421844645867' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4076219421844645867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4076219421844645867'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/12/freebsd-mbrzfs.html' title='Установка FreeBSD на MBR+ZFS'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4733807994142353006</id><published>2011-12-14T01:40:00.001-08:00</published><updated>2011-12-14T01:41:08.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix-tools'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>UNIX-like systems and tools</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Здесь буду приводить ссылки на статьи об UNIX-подобных системах и тулзах в составе этих тулзов.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/library/au-unix-find/index.html"&gt;Расширенные возможности использования команды find в UNIX&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4733807994142353006?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4733807994142353006/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4733807994142353006' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4733807994142353006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4733807994142353006'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/12/unix-like-systems-and-tools.html' title='UNIX-like systems and tools'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4365750180956706493</id><published>2011-11-26T03:01:00.001-08:00</published><updated>2011-11-26T03:02:36.812-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows7'/><title type='text'>Windows7 God mode</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Где нашел не помню, но мне понравилось. Вобщем-то можно собрать все настройки для Windows 7 в одном месте. Шобы это чудо зафигачить надо создать на рабочем столе создать папку с названием "&lt;strong style="background-color: whitesmoke; color: #242424; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: justify;"&gt;GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}&lt;/strong&gt;"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4365750180956706493?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4365750180956706493/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4365750180956706493' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4365750180956706493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4365750180956706493'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/11/windows7-god-mode.html' title='Windows7 God mode'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-7675300666312457012</id><published>2011-11-21T07:25:00.001-08:00</published><updated>2011-11-21T12:09:17.734-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>Необходимые программы на FreeBSD?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: left;"&gt;Надумал я переходить на использование FreeBSD. Поэтому перед тем как перейти мне надо куда-нибудь записать свои "хочучки". Вобщем-то именно для этого и служит эта тема.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;0.Информационная безопасность:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Шифрование раздела, аналогично TrueCrypt&lt;/li&gt;&lt;li&gt;WinPCap-аналог для изучения трафика&lt;/li&gt;&lt;li&gt;Клиент VPN&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;I.Пользовательское:&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Смотреть видео&lt;/li&gt;&lt;li&gt;Слушать аудио&lt;/li&gt;&lt;li&gt;Internet browser&lt;/li&gt;&lt;li&gt;Клиенты ICQ, Jabber&lt;/li&gt;&lt;li&gt;Почтовый клиент&lt;/li&gt;&lt;li&gt;Файловый менеджер подобный Far и Norton&lt;/li&gt;&lt;li&gt;Читать\Писать электронные документы от Microsoft и OpenOffice&lt;/li&gt;&lt;li&gt;Аналог Microsoft Visio&lt;/li&gt;&lt;li&gt;Читать электронные книги в форматах djvu, pdf, chm&lt;/li&gt;&lt;li&gt;Клиент Torrent-сетей&lt;/li&gt;&lt;li&gt;Писать DVD-диски&lt;/li&gt;&lt;li&gt;Редактировать ISO-диски&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;II.Программирование:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Писать на Python 3.2 и 2.7&lt;/li&gt;&lt;li&gt;Клиент SVN;&lt;/li&gt;&lt;li&gt;Клиент Git&lt;/li&gt;&lt;li&gt;C\C++&lt;/li&gt;&lt;li&gt;Среда разработки&lt;/li&gt;&lt;li&gt;CMake&lt;/li&gt;&lt;/ol&gt;В общем-то я сначала куплю нетбук, поставлю че-можно на него. После того как освоюсь, тогда и можно будет думать о переводе основного инструмента, ноутбука, на фриху.&lt;br /&gt;&lt;br /&gt;В связи с чем:&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Какой нетбук покупать?&lt;/li&gt;&lt;li&gt;Че можно из выше перечисленного туда на сетапить?&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Пока выбрал такую вот модель:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://www.notebook.ru/notebook/lenovo-thinkpad-edge-e120-11700/"&gt;Lenovo ThinkPad Edge E120&lt;/a&gt;&amp;nbsp;и&amp;nbsp;&lt;a href="http://www.notik.ru/goods/15069.htm"&gt;тут тоже про него&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-7675300666312457012?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/7675300666312457012/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=7675300666312457012' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7675300666312457012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7675300666312457012'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/11/freebsd.html' title='Необходимые программы на FreeBSD?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5922698863817452034</id><published>2011-11-04T11:56:00.000-07:00</published><updated>2011-11-05T12:59:04.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Как заюзать unittest на Pyhon</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Вобщем, только что освоил это чудо и чтобы не забыть как его юзать напишу минисорец, который покажет мне все что мне надо знать и не забыть.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;#&lt;br /&gt;# Script result:&lt;br /&gt;# &amp;nbsp; &amp;nbsp; setUpClass&lt;br /&gt;# &amp;nbsp; &amp;nbsp; setUp&lt;br /&gt;# &amp;nbsp; &amp;nbsp; test_proba1&lt;br /&gt;# &amp;nbsp; &amp;nbsp; tearDown&lt;br /&gt;# &amp;nbsp; &amp;nbsp; setUp&lt;br /&gt;# &amp;nbsp; &amp;nbsp; test_proba2&lt;br /&gt;# &amp;nbsp; &amp;nbsp; tearDown&lt;br /&gt;# &amp;nbsp; &amp;nbsp; tearDownClass&lt;br /&gt;&lt;br /&gt;import unittest&lt;br /&gt;&lt;br /&gt;class TestProba(unittest.TestCase):&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;@classmethod&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def setUpClass(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'setUpClass\n' )&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;@classmethod&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def tearDownClass(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'tearDownClass\n' )&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def setUp(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'setUp\n' )&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def tearDown(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'tearDown\n' )&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def test_proba1(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'test_proba1\n' )&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;def test_proba2(self):&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;with open( 'proba.log', 'a+t' ) as f:&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;f.write( 'test_proba2\n' )&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;unittest.main()&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5922698863817452034?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5922698863817452034/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5922698863817452034' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5922698863817452034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5922698863817452034'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/11/unittest-pyhon.html' title='Как заюзать unittest на Pyhon'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-669846874876991232</id><published>2011-10-15T02:27:00.000-07:00</published><updated>2011-10-15T02:27:11.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Запрещайте явно операцию присвоения и конструктор копирования</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Сегодня решил написать функцию в своем мини-фреймворке. Смысл этой функции вернуть объект std::fstream по заданному имени. Какого же было мое удивление, что нельзя вызвать операцию присвоения, но об этом я узнал в результате экспериментов. До них ругалось и ругалось так, что не совсем понятно что делать?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Вот код банальной функции:&lt;br /&gt;#include &lt;fstream&gt;&lt;/fstream&gt;&lt;br /&gt;&lt;br /&gt;void Class1::Method1()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;std::fstream file1;&lt;br /&gt;&amp;nbsp; &amp;nbsp;std::fstream file2 = file1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Ругается так:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1&amp;gt;c:\program files (x86)\microsoft visual studio 9.0\vc\include\fstream(934) : error C2248: 'std::basic_ios&amp;lt;_Elem,_Traits&amp;gt;::basic_ios' : cannot access private member declared in class 'std::basic_ios&amp;lt;_Elem,_Traits&amp;gt;'&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;with&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Elem=char,&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Traits=std::char_traits&lt;char&gt;&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios(151) : see declaration of 'std::basic_ios&amp;lt;_Elem,_Traits&amp;gt;::basic_ios'&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;with&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Elem=char,&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Traits=std::char_traits&lt;char&gt;&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;This diagnostic occurred in the compiler generated function 'std::basic_fstream&amp;lt;_Elem,_Traits&amp;gt;::basic_fstream(const std::basic_fstream&amp;lt;_Elem,_Traits&amp;gt; &amp;amp;)'&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;with&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Elem=char,&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Traits=std::char_traits&lt;char&gt;&lt;br /&gt;1&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]&lt;br /&gt;1&amp;gt;Generating Code...&lt;/char&gt;&lt;/char&gt;&lt;/char&gt;&lt;/blockquote&gt;&lt;br /&gt;Что на мой взгляд не совсем описательно. Было бы куда лучше, если бы авторы класса std::fstream реализовали класс:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;class NonCopyable&lt;br /&gt;{&lt;br /&gt;protected:&lt;br /&gt;&amp;nbsp; &amp;nbsp; NonCopyable() &amp;nbsp; &amp;nbsp;{};&lt;br /&gt;&amp;nbsp; &amp;nbsp; ~NonCopyable() &amp;nbsp; {};&lt;br /&gt;private:&lt;br /&gt;&amp;nbsp; &amp;nbsp; NonCopyable( const NonCopyable&amp;amp; );&lt;br /&gt;&amp;nbsp; &amp;nbsp; NonCopyable&amp;amp; operator=( const NonCopyable&amp;amp; );&lt;br /&gt;};&lt;/blockquote&gt;&lt;br /&gt;&amp;nbsp;и уж от него унаследовавшись мы получаем более вразумительные описания ошибок.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-669846874876991232?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/669846874876991232/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=669846874876991232' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/669846874876991232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/669846874876991232'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/10/blog-post.html' title='Запрещайте явно операцию присвоения и конструктор копирования'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8932732779115789728</id><published>2011-10-04T14:24:00.000-07:00</published><updated>2011-10-05T02:29:18.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Что есть "тулза-фильтр" ?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Решил сознаться в собственном 2х недельном тупизме. Кто будет читать наверно будет в диком восторге, как будто баш прочитал.&lt;br /&gt;&lt;br /&gt;Предистория :&lt;br /&gt;Решил таки написать себе криптор, ато без подобной тулзы как-то не живется! ;) Думаю "криптор" вполне понятно для чего и зачем надо...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Разработка:&lt;br /&gt;Подумал что было бы неплохо принимать на входе некоторого сетевого интерфейса файлы и потом какой-нить тулзой формировать принятое куда-нить, чтобы криптор мог бы обработать и подать на выход, а дальше чтобы другая тулза полученную крипту послала по сети куда-нить. Решил, почему-то, что уж очень это похоже на тулзу-фильтр в привычной многим UNIX-философии, а раз так то буду ка я принимать вход на STDIN и выдавать крипту на STDOUT. Ну а дальше кому-чего надо пусть пишет все по средством shell пайпов и т.д. и т.п. Вроде счастье есть.&lt;br /&gt;&lt;br /&gt;Затык:&lt;br /&gt;В виду того что мой криптор работает с исполнимыми файлами, формат которых далеко не тривиален и поэтому в них надо позиционироваться от начала к концу и довольно часто, то надо бы иметь на входе Random Access. Как на STDIN получить это?&lt;br /&gt;&lt;br /&gt;Вывод:&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;blockquote&gt;Собственно вывод прост, там где надо на входе иметь Random Access, то это уже не тулза-фильтр!&lt;/blockquote&gt;Почему:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Это не тулза-фильтр потому что подход UNIX-way гласит "постарайтесь гадить текстом", т.е. работая с бинарными данными это означает идет резработка весьма прикольного фильтра.&lt;/li&gt;&lt;li&gt;На входе, т.е. STDIN, можно &amp;nbsp;получить Random Access скопировав куда-нить входное внутренний временной файл. Но это же костыль!&lt;/li&gt;&lt;/ul&gt;Как понял ? Как и советует вся "Программер индустрия":&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Если что-то идет с треском, значит ты где-то что-то не допонял или пишешь не верно.&lt;/li&gt;&lt;li&gt;Страйся, по мере возможностей, показать свои мысли кому-нить, возможно кто-то покажет в чем именно ты дебил?!&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8932732779115789728?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8932732779115789728/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8932732779115789728' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8932732779115789728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8932732779115789728'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/10/2.html' title='Что есть &quot;тулза-фильтр&quot; ?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8935838367738919112</id><published>2011-10-02T10:53:00.000-07:00</published><updated>2011-10-02T10:54:29.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hash'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Вычисление MD5 по файлу</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;В очередной раз порывшись в сорцах на предмет корректно написанной процедуры вычисления MD5 и потратив где-то 5 минут с возгласами "где же оно?", решил запостить сюда, чтобы проще было искать:&lt;br /&gt;&lt;br /&gt;def md5checksum( filename ) :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;md5 = hashlib.md5()&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;with open(&amp;nbsp;filename&amp;nbsp;, 'rb' ) as f :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;for chunk in iter( lambda: f.read( md5.block_size * 128 ), '' ) :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;if not chunk :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;break&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;md5.update( chunk )&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;return md5.hexdigest().upper()&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8935838367738919112?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8935838367738919112/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8935838367738919112' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8935838367738919112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8935838367738919112'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/10/md5.html' title='Вычисление MD5 по файлу'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1207542344433950368</id><published>2011-09-25T02:47:00.000-07:00</published><updated>2011-09-25T02:47:15.161-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Управление памятью в C++</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Поделюсь с довольно занятной ссылкой, где описан сабж. Вот сама ссылка на&amp;nbsp;&lt;a href="http://www.cantrip.org/wave12.html"&gt;Memory Management in C++&lt;/a&gt;. Надеюсь кому еще поможет, а не только мне.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1207542344433950368?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1207542344433950368/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1207542344433950368' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1207542344433950368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1207542344433950368'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/09/c.html' title='Управление памятью в C++'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6252710288533905099</id><published>2011-09-22T00:15:00.001-07:00</published><updated>2011-09-22T09:25:19.974-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='фотография'/><category scheme='http://www.blogger.com/atom/ns#' term='nikon'/><title type='text'>Характеристики моего цифрового фотоаппарата</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;У меня Nikon D40 Kit. Почитать можно &lt;a href="http://www.foto.ru/nikon_d40_kit_18-55.html"&gt;тут&lt;/a&gt;. Устал считать эффективное фокусное расстояние и решил раз и навсегда записать в этом посте и заодно, если кто спросит "че у тебя за штука?", то дам ссылку на этот пост.&lt;br /&gt;&lt;br /&gt;Объектив:&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: white; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;"&gt;&lt;a href="http://www.foto.ru/product.php?id=20296" style="color: red; text-decoration: underline;"&gt;NIKON AF-S 18-55 mm f/3.5-5.6 G DX&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Матрица:&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: white; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;"&gt;CCD, Nikon DX, 23,6 x 15,8 мм; 6,3 млн. пикселей&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Считаем:&lt;br /&gt;Для обычной и привычной пленки 35мм кадр будет 36х24. У меня же матрица 23.6х15.8. Теперь поделим 36 на 23.6 и получим приблизительно 1.5. Это ничто иное как кроп-фактор. Объектив у меня 18-55 и того 18*1.5 = 27 и 55*1.5= 82.5.&lt;br /&gt;&lt;br /&gt;ЭФР есть 27-82.5.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6252710288533905099?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6252710288533905099/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6252710288533905099' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6252710288533905099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6252710288533905099'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/09/blog-post.html' title='Характеристики моего цифрового фотоаппарата'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4830376692755631729</id><published>2011-08-12T23:55:00.000-07:00</published><updated>2011-08-12T23:55:15.721-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Невозможно выйти из вечного цикла</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Вот код написанный для версии 3.2:&lt;br /&gt;&lt;br /&gt;while True :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;reply = input( 'Enter text: ' )&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;if reply == 'stop' : break&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;try :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;num = int( reply )&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;except :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;print( 'Bad!' * 8 )&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;else :&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;print( int( reply ) ** 2 )&lt;br /&gt;print( 'Bye' )&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Я ввожу 'stop' , но &amp;nbsp;почему-то не вижу завершения цикла! Почему?&lt;/div&gt;&lt;div&gt;Ответ(base64.ru):&lt;/div&gt;&lt;div&gt;0JzQtdGI0LDQtdGCINC60L7QvdC10YfQvdGL0Lkg0YHQuNC80LLQvtC7ICdcbicg0Lgg0LXQs9C+INC90YPQttC90L4g0L7QsdGA0LXQt9Cw0YLRjCwg0Log0L/RgNC40LzQtdGA0YMg0YLQsNC6OiByZXBseSA9IGlucHV0KCAnRW50ZXIgdGV4dDogJyApLnN0cmlwKCk=&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4830376692755631729?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4830376692755631729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4830376692755631729' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4830376692755631729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4830376692755631729'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/08/blog-post.html' title='Невозможно выйти из вечного цикла'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4258970142019512330</id><published>2011-08-08T01:16:00.000-07:00</published><updated>2011-08-08T01:16:54.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ollydbg'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>OllyDbg 2.x теперь с плагинами</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Наверное все привыкли, что олька в чем-то не удобно, а в чем-то это самый удобный инструмент. Меня как-то не вставляла ветка 1.x и я ждал когда же будут плагины к 2-ке! Вот! Вот оно свершилось, теперь оно с плагинами ! ;)))&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4258970142019512330?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4258970142019512330/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4258970142019512330' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4258970142019512330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4258970142019512330'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/08/ollydbg-2x.html' title='OllyDbg 2.x теперь с плагинами'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-7155448497919936262</id><published>2011-06-05T05:30:00.000-07:00</published><updated>2011-06-05T05:34:35.013-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Исключите строчку в списке процессов из результатов после grep.</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Когда хочется найти определенный процесс запущенного под конкретным пользователем, то как правило пишут, что-нибудь такое:&lt;br /&gt;&lt;br /&gt;% ps -fS user1 | grep process_name&lt;br /&gt;&lt;br /&gt;Однако в результат попадет также и упоминание о&amp;nbsp;запущенном&amp;nbsp;grep, а это не совсем красиво.&lt;br /&gt;Вот пример:&lt;br /&gt;&lt;br /&gt;grep 1001 user1 process_name&lt;br /&gt;&lt;br /&gt;Как сформулировать мысль так, чтобы было исключена подобная &amp;nbsp;строка?&lt;br /&gt;&lt;br /&gt;Ответ(base64.ru)&lt;br /&gt;cHMgLWZTIHVzZXIxIHwgZ3JlcCBbcF1yb2Nlc3NfbmFtZQ==&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-7155448497919936262?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/7155448497919936262/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=7155448497919936262' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7155448497919936262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7155448497919936262'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/06/grep.html' title='Исключите строчку в списке процессов из результатов после grep.'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-906595619532841684</id><published>2011-04-17T13:15:00.000-07:00</published><updated>2011-04-24T01:35:48.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Первый опыт оптимизации ядра FreeBSD 8.2 RELEASE</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Взял сегодня список добрых дел, читай todo-лист, в котором описано чего хочу сделать за год и увидел "Перейти на FreeBSD" и подзадачу "Научиться оптимизить, компилить, тестить и ставить новое ядро". Именно этим сегодня и занялся.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Итак, исходные данные:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;VMWare workstation, созданная гостевуха на базе i386 архитектуры, с отключенным floppy, sound, COM1-портом;&lt;/li&gt;&lt;li&gt;Установленная FreeBSD 8.2 i386 RELEASE, без иксов;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;Читая Майкла Лукаса про "Absolute FreeBSD" &amp;nbsp;2nd edition понял, что мне куда ближе следующий путь компиляции ядра:&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li style="text-align: left;"&gt;Создание нового конфига ядра(# vi /sys/i386/conf/SYSDEVKERN );&lt;/li&gt;&lt;li style="text-align: left;"&gt;Включение GENERIC( include GENERIC);&lt;/li&gt;&lt;li style="text-align: left;"&gt;Дальнейшее отключение ненужных мне девайсов, процессоров и опций(nocpu, nodevice, nooptions);&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;Кто-то может возразить "Нафига так мудрить? Куда проще скопировать GENERIC в MYKERN и убрать оттуда не нужное". Но! У этого метода есть изъян:&lt;/div&gt;&lt;blockquote&gt;В будущем GENERIC может включать в себя все более новые фичи. Вы будете вынуждены скопировать очередной раз и удалить не нужное повторно!&lt;/blockquote&gt;В моем же случае, это не обязательно будет делать. То чего нет, не отключится! А то что нужно так и останется быть включеным! Даже то чего я еще не знаю. )))&lt;br /&gt;&lt;blockquote&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;В результате родился такой вот конфиг:&lt;br /&gt;include GENERIC&lt;br /&gt;&lt;br /&gt;ident SYSDEVKERN&lt;br /&gt;&lt;br /&gt;# VMware has Intel Core duo(I686_CPU class)&lt;br /&gt;nocpu I486_CPU&lt;br /&gt;nocpu I586_CPU&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nooptions INET6&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nodevice eisa&lt;br /&gt;nodevice fdc&lt;br /&gt;&lt;br /&gt;nodevice ataraid&lt;br /&gt;nodevice atapifd&lt;br /&gt;&lt;br /&gt;nodevice ahb&lt;br /&gt;nodevice ahc&lt;br /&gt;nodevice AHC_REG_PRETTY_PRINT&lt;br /&gt;nodevice ahd&lt;br /&gt;nodevice AHD_REG_PRETTY_PRINT&lt;br /&gt;nodevice amd&lt;br /&gt;nodevice hptiop&lt;br /&gt;nodevice isp&lt;br /&gt;nodevice ispfw&lt;br /&gt;nodevice ncr&lt;br /&gt;nodevice sym&lt;br /&gt;nodevice trm&lt;br /&gt;nodevice adv&lt;br /&gt;nodevice adw&lt;br /&gt;nodevice aha&lt;br /&gt;nodevice aic&lt;br /&gt;nodevice bt&lt;br /&gt;nodevice ncv&lt;br /&gt;nodevice nsp&lt;br /&gt;nodevice stg&lt;br /&gt;&lt;br /&gt;nodevice amr&lt;br /&gt;nodevice arcmsr&lt;br /&gt;nodevice asr&lt;br /&gt;nodevice ciss&lt;br /&gt;nodevice dpt&lt;br /&gt;nodevice hptmv&lt;br /&gt;nodevice hpttrr&lt;br /&gt;nodevice iir&lt;br /&gt;nodevice ips&lt;br /&gt;nodevice mly&lt;br /&gt;nodevice twy&lt;br /&gt;&lt;br /&gt;nodevice aac&lt;br /&gt;nodevice aacp&lt;br /&gt;nodevice ida&lt;br /&gt;nodevice mfi&lt;br /&gt;nodevice mlx&lt;br /&gt;nodevice pst&lt;br /&gt;nodevice twe&lt;br /&gt;&lt;br /&gt;nodevice de&lt;br /&gt;nodevice igb&lt;br /&gt;nodevice ixgb&lt;br /&gt;nodevice le&lt;br /&gt;nodevice ti&lt;br /&gt;nodevice txp&lt;br /&gt;nodevice vx&lt;br /&gt;&lt;br /&gt;nodevice miibus&lt;br /&gt;nodevice ae&lt;br /&gt;nodevice age&lt;br /&gt;nodevice alc&lt;br /&gt;nodevice ale&lt;br /&gt;nodevice bce&lt;br /&gt;nodevice bfe&lt;br /&gt;nodevice bge&lt;br /&gt;nodevice dc&lt;br /&gt;nodevice et&lt;br /&gt;nodevice fxp&lt;br /&gt;nodevice jme&lt;br /&gt;nodevice lge&lt;br /&gt;nodevice msk&lt;br /&gt;nodevice nfe&lt;br /&gt;nodevice nge&lt;br /&gt;nodevice nve&lt;br /&gt;nodevice pcn&lt;br /&gt;nodevice re&lt;br /&gt;nodevice rl&lt;br /&gt;nodevice sf&lt;br /&gt;nodevice sge&lt;br /&gt;nodevice sis&lt;br /&gt;nodevice sk&lt;br /&gt;nodevice ste&lt;br /&gt;nodevice stge&lt;br /&gt;nodevice tl&lt;br /&gt;nodevice tx&lt;br /&gt;nodevice vge&lt;br /&gt;nodevice vr&lt;br /&gt;nodevice wb&lt;br /&gt;nodevice xl&lt;br /&gt;&lt;br /&gt;nodevice cs&lt;br /&gt;nodevice ed&lt;br /&gt;nodevice ex&lt;br /&gt;nodevice ep&lt;br /&gt;nodevice fe&lt;br /&gt;nodevice ie&lt;br /&gt;nodevice sn&lt;br /&gt;nodevice xe&lt;br /&gt;&lt;br /&gt;nodevice wlan&lt;br /&gt;nooptions IEEE80211_DEBUG&lt;br /&gt;nooptions IEEE80211_AMPDU_AGE&lt;br /&gt;nooptions IEEE80211_SUPPORT_MESH&lt;br /&gt;nodevice wlan_wep&lt;br /&gt;nodevice wlan_ccmp&lt;br /&gt;nodevice wlan_tkip&lt;br /&gt;nodevice wlan_amrr&lt;br /&gt;nodevice an&lt;br /&gt;nodevice ath&lt;br /&gt;nodevice ath_hal&lt;br /&gt;nodevice AH_SUPPORT_AR5416&lt;br /&gt;nodevice ath_rate_sample&lt;br /&gt;nodevice ral&lt;br /&gt;nodevice wi&lt;br /&gt;nodevice wl&lt;br /&gt;&lt;br /&gt;nodevice vlan&lt;br /&gt;&lt;br /&gt;nodevice ukbd&lt;br /&gt;nodevice ulpt&lt;br /&gt;nodevice ums&lt;br /&gt;nodevice urio&lt;br /&gt;nodevice u3g&lt;br /&gt;nodevice uark&lt;br /&gt;nodevice ubsa&lt;br /&gt;nodevice uftdi&lt;br /&gt;nodevice uipaq&lt;br /&gt;nodevice uplcom&lt;br /&gt;nodevice uslcom&lt;br /&gt;nodevice uvisor&lt;br /&gt;nodevice uvscom&lt;br /&gt;&lt;br /&gt;nodevice aue&lt;br /&gt;nodevice axe&lt;br /&gt;nodevice cdce&lt;br /&gt;nodevice cue&lt;br /&gt;nodevice kue&lt;br /&gt;nodevice rue&lt;br /&gt;nodevice udav&lt;br /&gt;&lt;br /&gt;nodevice rum&lt;br /&gt;nodevice uath&lt;br /&gt;nodevice ural&lt;br /&gt;nodevice zyd&lt;br /&gt;&lt;br /&gt;options     INCLUDE_CONFIG_FILE     # Include this file in kernel&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="fullpost"&gt;Как видно я отрубил IPv6 и множество Wireless-устройств, RAID-контроллеров и USB-устройств, ну и исторические процы 486 и 586.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Ну а дальше я скомпилировал и одноразово загрузился с этого ядра:&lt;br /&gt;&lt;blockquote&gt;# make KERNCONF=SYSDEVKERN INSTKERNNAME=kernel.sysdev &lt;br /&gt;# nextboot -k /boot/kernel.sysdev&amp;nbsp;&lt;/blockquote&gt;Последняя команда патчит настроечные файлы так, чтобы загрузиться с этого ядра только один раз! Думаю это весьма полезно при удаленной отладке ядра. Ну а когда загрузился с ядра, то убедившись в работоспособности удалил старое и переименовал это в новое:&lt;br /&gt;&lt;blockquote&gt;# rm -rf /boot/kernel&lt;br /&gt;# mv /boot/kernel.sysdev /boot/kernel&lt;/blockquote&gt;Опирался в основном на результаты:&lt;br /&gt;&lt;blockquote&gt;dmesg | grep -i &amp;lt;тут че-нить&amp;gt;&lt;br /&gt;pciconf -lv &lt;br /&gt;atacontrol -list&lt;br /&gt;kldstat -v&lt;/blockquote&gt;Но как ни странно /sys/i386/conf/LINT мне ни в чем не помогло. Мне там нифига не понятно ))&lt;br /&gt;&lt;br /&gt;Вывод: Новое ядро след. раз буду компилировать только если захочу новую фичу и она не появится без добавления этой опции в конфиг ядро с последующей перекомпиляцией. Ну а так, чего-то пока смысла не увидел!&lt;br /&gt;&lt;br /&gt;ЗЫ:&lt;br /&gt;&amp;nbsp; VMwar-ный файл жесткого диска, жутко разбух где-то около 3.12 ГБ и архивация по LZMA2 дает &amp;nbsp;вместо прежних 333МБ уже 477MБ. Так что виртуалка в коллекции вм-образов будет больше места занимать, что совсем не радует!&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-906595619532841684?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/906595619532841684/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=906595619532841684' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/906595619532841684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/906595619532841684'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/04/freebsd-82-release.html' title='Первый опыт оптимизации ядра FreeBSD 8.2 RELEASE'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8293642461710750122</id><published>2011-04-12T12:52:00.000-07:00</published><updated>2011-04-24T01:37:47.775-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='переводы'/><title type='text'>Русский перевод. Майкла Лукаса "FreeBSD. Полное руководство"</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&amp;nbsp; &amp;nbsp; Сегодня вечером продолжая читать книгу по FreeBSD от Майкла Лукаса обнаружил ошибку перевода. Так она меня млин забесила, что решил написать об этом в блоге.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Я всегда стараюсь учиться на практике, прочитал чуть-чуть и тут же попробовал на практике. Сегодня тыкая команду:&lt;br /&gt;&lt;blockquote&gt;% du -i&lt;/blockquote&gt;для того чтобы узнать количество свободных inode-ов увидел, что команда &amp;nbsp;выдает результат:&lt;br /&gt;&lt;blockquote&gt;du: illegal options --i&lt;/blockquote&gt;Вот текст:&lt;br /&gt;&lt;blockquote&gt;Увидеть количество свободных индексных дескрипторов, доступных в файловой системе, можно с помощью команды du  –i.&lt;/blockquote&gt;Да! Это в русской версии книги! ;( Но заменив &lt;b&gt;du&lt;/b&gt; на &lt;b&gt;df&lt;/b&gt; увидел то что хотел. Решил посмотреть, что пишет сам Лукас?&lt;br /&gt;&lt;blockquote&gt;Use df -i to see how many inodes remain free on your filesystem.&lt;/blockquote&gt;Мораль: Всегда держите при себе копию того что вы читаете на языке оригинала! Даже если вы плохо знаете этот язык.&lt;br /&gt;&lt;br /&gt;ЗЫ: Книгу взял &lt;a href="http://www.infanata.com/info/teach/1146112718-freebsd-podrobnoe-rukovodstvo-2-izdanie.html"&gt;по этой ссылке&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8293642461710750122?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8293642461710750122/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8293642461710750122' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8293642461710750122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8293642461710750122'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/04/freebsd.html' title='Русский перевод. Майкла Лукаса &quot;FreeBSD. Полное руководство&quot;'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-7807417795190406224</id><published>2011-04-11T06:36:00.000-07:00</published><updated>2011-04-24T01:38:27.469-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Интерфейс консольных утилит UNIX-like системз</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&amp;nbsp; &amp;nbsp; Буквально на днях в моем бредовом сознании возникла мысль: "Ты наконец-то знаешь как надо разрабатывать консольные тулзы". Возможно немного высокопарно, возможно потом, спустя годы, скажу: "На самом деле я нифига ничего так и не понял по существу". Однако сейчас у меня есть хоть какая-то альфа-версия понимания того, &amp;nbsp;как все же надо разрабатывать тулзы консольного типа. Понял это только благодаря ковырянию в FreeBSD, т.е. непосредственно в результате метода "научного фтыка".&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Итак, выведу некоторые правила и критерии, которых буду придерживаться в своих дальнейших разработках:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Обязательные&lt;/b&gt;:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Любая консольная тулза выполняет строго одно действие и делает это хорошо, понятно и непротиворечиво;&lt;/li&gt;&lt;li&gt;Сообщения об ошибках пишутся исключительно в STDERR;&lt;/li&gt;&lt;li&gt;Тулза должна понимать аргументы: "-h, --help, -?, -v, --version";&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;Благодаря чтению книги "Программное обеспечение UNIX" Брайна Кернигана мне стало понятно, что в большинстве случаев разрабатываю программы-фильтры. Эти программы предназначены для обработки некоторых входных данных и подачи на выход. Очень часто подобного рода программ можно встретить в соединениях с чем-либо через "пайп", банальный пример:&lt;/div&gt;&lt;blockquote&gt;# dmesg | grep CPU&amp;nbsp;&lt;/blockquote&gt;&amp;nbsp; &amp;nbsp; Тут тулза &lt;b&gt;grep&lt;/b&gt; как раз выступает в роли фильтра, т.к. берет на входе данные от dmesg -&amp;gt; обрабатывает -&amp;gt; выдает на выход, точнее STDOUT, который по дефолту связан с терминалом.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; К тулзам-фильтрам можно выставить &lt;b&gt;обязательные&lt;/b&gt; для выполнения требования, по мимо тех что указаны в верху:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Если не заданы входные данные через аргументы командной строки, то их надо брать из STDIN;&lt;/li&gt;&lt;li&gt;В случае если ну указаны сведения куда выводить результат, то его нужно выводить в STDOUT;&lt;/li&gt;&lt;/ol&gt;&amp;nbsp; &amp;nbsp; Реализуя работу с STDIN, STDOUT, STDERR в своей тулзе вы тем самым дадите возможность пользователю включить свою тулзу в код скрипта. Ведь до вашей тулзы может сколь угодно большое количество других программ, которые &amp;nbsp;в свою очередь могут брать данные из баз данных, сетевых ресурсов, файлов, устройств и т.д. и т.п. Также после вашей тулзы возможно неменее большое чем на входе количество программ, которые также как и на входе могут отдавать данные в сеть, базы данных, файлы, устройства и т.д. и т.п.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp; &amp;nbsp;Взглянем некоторых поток команд связанных посредством механизма "пайп", который поддерживают, чуть ли не все UNIX командные интерпретаторы:&lt;/div&gt;&lt;blockquote&gt;% trojan_gen --compiller_type=MSVC --compiller_version=v90 | malware_cryptor --complexity_level=2 | tee sample.bin | send2client --list=clients_emails.lst&lt;/blockquote&gt;&amp;nbsp; &amp;nbsp; Пример конечно надуманный и в реальности врядли встретится по причине громоздкости и неуклюжести, но тем не менее пример показывает что "malware_cryptor" выступает в роли тулзы-фильтра и что его можно удобно использовать реализовав работу с STDIN\STDOUT соглассно &amp;nbsp;критериям для тулзов-фильтров указанных выше.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Вы только вдумайтесь, какой сложный процесс обработки можно создать и при этом не особо парясь! А ведь всего достаточно знать принцип UNIX-утилит:&lt;br /&gt;&lt;blockquote&gt;Тулза должна делать ровно одно дело и ничего более, при этом делать его хорошо!&amp;nbsp;&lt;/blockquote&gt;P.S.:&lt;br /&gt;Советую почитать на хабре статью под названием "&amp;nbsp;&lt;a href="http://habrahabr.ru/blogs/nix/117050/"&gt;Команда dd и все, что с ней связано&lt;/a&gt; " . Она дает понимание "UNIX way".&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-7807417795190406224?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/7807417795190406224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=7807417795190406224' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7807417795190406224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7807417795190406224'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/04/unix-like.html' title='Интерфейс консольных утилит UNIX-like системз'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5124799947548202762</id><published>2011-03-31T11:59:00.000-07:00</published><updated>2011-03-31T11:59:28.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='используемые программы'/><title type='text'>Список ПО, которое использую</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Буду тут обновлять список ПО, которое использую с ссылками на офиц. сайты и обзоры ПО(если такие найдутся).&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://jenyay.net/blog/2010/10/14/task-coach-programma-dlya-khraneniya-spiska-zadach/"&gt;Озборная статья: "Task Coach – программа для хранения списка задач"&lt;/a&gt; ,&amp;nbsp;&lt;a href="http://www.taskcoach.org/"&gt;официальный сайт производителя&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://keepass.info/"&gt;KeePass Password Safe&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5124799947548202762?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5124799947548202762/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5124799947548202762' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5124799947548202762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5124799947548202762'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/03/blog-post_31.html' title='Список ПО, которое использую'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8215620361792108165</id><published>2011-03-14T01:26:00.000-07:00</published><updated>2011-03-14T01:26:57.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Видосы для реверсеров</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Нашел интересный ресурс, где есть видосы связанные с информационной безопасностью и реверсингом. Вот&amp;nbsp;&lt;a href="http://www.securitytube.net/"&gt;securitytube&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8215620361792108165?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8215620361792108165/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8215620361792108165' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8215620361792108165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8215620361792108165'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/03/blog-post.html' title='Видосы для реверсеров'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8515876474567128167</id><published>2011-03-02T01:36:00.000-08:00</published><updated>2011-04-24T01:38:53.669-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Использование файлов во FreeBSD</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Все что тут напишу, это своего рода пересказ того что прочитал в книге Б. Кернигана, но на понятном мне языке. Для будущего напоминания об азах ;)&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Файловая система UNIX различает для файла:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Содержимое;&lt;/li&gt;&lt;li&gt;Служебную информацию(inode).&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;Служебная информация это расположение файла на диски, время изменения содержимого, время использования содержимого и время изменения самой служебной информации и др. Служебная информация хранится в спец. файле i-node(сейчас дефис принято опускать).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Нужно заметить, что каждый inode имеет свое значение, циферку, которая уникальна в пределах одного устройства хранения, да я не оговорился, не слайса или партиции, а именно девайса!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Теперь приведу несколько полезных опций команды "ls":&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li style="text-align: left;"&gt;-c - сортировать по времени модификации inode;&lt;/li&gt;&lt;li style="text-align: left;"&gt;-u - сортировать по времени последнего использования;&lt;/li&gt;&lt;li style="text-align: left;"&gt;-t - сортировать по времени, начиная с самого нового;&lt;/li&gt;&lt;li style="text-align: left;"&gt;-i - выводить значения inode;&lt;/li&gt;&lt;li style="text-align: left;"&gt;-l - подробный вывод о файлах;&lt;/li&gt;&lt;li style="text-align: left;"&gt;-q - принудительный вывод не графических символов.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;Теперь "неочевидность" выполнив команду:&lt;/div&gt;&lt;blockquote&gt;#date &amp;gt; filename&amp;nbsp;&lt;/blockquote&gt;Казалось бы изменилось содержимое, т.е. файл использовался, но тем не менее эта время на время использования не влияет! Поэтому вывод ls -u может немного обескуражить :) Под использованием следует понимать "просмотр", "чтение", "запуск на выполнение", а вот "запись" почему-то не является операцией использования.&lt;br /&gt;&lt;br /&gt;Для того чтобы посмотреть, когда же менялся файл мы должны выполнить:&lt;br /&gt;&lt;blockquote&gt;#ls -lt&lt;/blockquote&gt;Чтобы узнать когда файлу поменяли маску доступа или модифицировали, то можно запустить так:&lt;br /&gt;&lt;blockquote&gt;# ls -lc&lt;/blockquote&gt;&lt;br /&gt;Думаю на этом все! ;)&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8515876474567128167?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8515876474567128167/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8515876474567128167' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8515876474567128167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8515876474567128167'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/03/freebsd.html' title='Использование файлов во FreeBSD'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6863515337145474870</id><published>2011-02-24T23:16:00.000-08:00</published><updated>2011-02-24T23:16:01.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Удалите файл</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Создайте файл с именем "-t" зайдя на UNIX-подобную машину. К примеру так:&lt;br /&gt;# ed&lt;br /&gt;a&lt;br /&gt;test file&lt;br /&gt;.&lt;br /&gt;w&amp;nbsp;-t&lt;br /&gt;q&lt;br /&gt;# ls -l&lt;br /&gt;убедитесь в его существовании! А теперь попробуйте удалить.&lt;br /&gt;&lt;br /&gt;Ответ(http://www.base64.ru/):&lt;br /&gt;cm0gLi8tdA==&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6863515337145474870?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6863515337145474870/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6863515337145474870' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6863515337145474870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6863515337145474870'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/blog-post_24.html' title='Удалите файл'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5770283023714807640</id><published>2011-02-24T01:52:00.000-08:00</published><updated>2011-02-24T12:19:07.513-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Горячие кнопки в c-shell</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Читая "Программное окружение UNIX" от Брайна Кернигана и Роба Пайка решил потестить, а че ваще работает для FreeBSD?&lt;br /&gt;Обнаружено:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+u - удаление набранной строки(удобно, т.к. задолбался жать Backspace);&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+d - завершить ввод;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+m -"Return", т.е. таже реакция если мы нажмем на привычный нам "Enter";&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+g - воспроизвести звуковой сигнал(иногда в скриптах хочется привлечь юзера);&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+c - завершить работу программы(к примеру остановить зацикленную прогу);&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+h - аналог привычного нам "Backspace";&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+s - Остановить вывод программы в терминал;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Ctrl+q - Востановить, после остановки, вывод программы в терминал;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;Мне лично упростили п.1 и п.2 ;)&lt;br /&gt;&lt;br /&gt;Нюанс:&lt;br /&gt;Для завершения сеанса работы с UNIX-системой логичней для системы нажатие на Ctrl+d, так сказать завершить ввод, вместо "exit" команды.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5770283023714807640?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5770283023714807640/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5770283023714807640' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5770283023714807640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5770283023714807640'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/c-shell.html' title='Горячие кнопки в c-shell'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4093537685980610218</id><published>2011-02-23T07:51:00.000-08:00</published><updated>2011-02-23T07:51:32.133-08:00</updated><title type='text'>Программное обеспечение во FreeBSD</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: left;"&gt;Активно интерисуюсь установкой ПО во FreeBSD. Ее аудитом. Безопасностью и нюансами. Несмотря нато что есть официальный от проекта Handbook дающий ответы на множество возможных ответов. Приведу все-таки две ссылки, которые мне больше понравились :)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://posix.ru/distro/bsd_ports/"&gt;FreeBSD: управление портами&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://posix.ru/distro/bsd_pkg/"&gt;FreeBSD: управление пакетами&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;из них весьма понравилась:&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;$ make fetch-recursive-list&lt;/blockquote&gt;дающая список URL-ов на собственно сами сорцы! ;) Которые можно читать, втыкать и ваще ;)&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4093537685980610218?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4093537685980610218/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4093537685980610218' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4093537685980610218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4093537685980610218'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/freebsd_23.html' title='Программное обеспечение во FreeBSD'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3738541322766601155</id><published>2011-02-22T15:05:00.000-08:00</published><updated>2011-02-23T03:07:19.116-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>Установка портов по дефолту в мире FreeBSD</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Вобщем пока ознакамливаюсь с этой системой. Стоит 8.2 release для архитектуры i386.&lt;br /&gt;Имеется два метода установки ПО:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Порты;&lt;/li&gt;&lt;li&gt;Пакажи.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;В текущий момент времени интерисует только п.1. Однако после манипуляций с #portsnap fetch -&amp;gt; #portsnap update или #portsnap fetch update, т.е. после обоновления древа портов до свежего. Переходя собственно к установке, юзая #make install clean можно через N секунд наблюдать появление надоедливых вопросов вида: "Вы какие опции хотите включить в компиляцию Питона?" или "Вам надо ставить Перл64?" и т.д. и т.п.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;У меня возник вопрос: "А как избавиться от вопросов и научить ставить по дефолту?". Забил в гугл вопрос "make install clean без вопросов" увидел, что подобное решается через проставновку в /etc/make.conf заклинания "BATCH=yes", означающего "BATCH=yes обеспечивает пакетную сборку порта."(взято &lt;a href="http://unix1.jinr.ru/~lavr/make-ports.html"&gt;тут&lt;/a&gt;).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Казалось бы все круто. Но! Это же аналогично тому что привычый юзер виндовоза жмет постоянно Next-&amp;gt;Next-&amp;gt;Next-&amp;gt;... т.е. банально не интерисуется а че ему там ставится-то? Однако если отключить сборку портов без вопросов появляются вопросы ответа на которых не всегда знаешь, а лезть в гугл означает "Установка порта возможно займет доп...ы времени"&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Вопрос сего поста: Как найти золотую середину?&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3738541322766601155?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3738541322766601155/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3738541322766601155' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3738541322766601155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3738541322766601155'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/freebsd.html' title='Установка портов по дефолту в мире FreeBSD'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5224880973090972446</id><published>2011-02-16T11:32:00.000-08:00</published><updated>2011-02-16T11:32:28.900-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='грамматика'/><category scheme='http://www.blogger.com/atom/ns#' term='английский'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>Конструкция с повторящимся действием "то и дело".</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Многим наверное хотелось написать что-нить вроде "Пока я рассказывал ему вчерашний день, он то и дело меня перебивал" или "Пока сервис получал данные от клиенских программ, менеджер памяти то и дело сбоил" и т.д и &amp;nbsp;т.п.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для подобного действия есть конструкция вида "kept (on) V-ing" , где V это распрастраненное обозначение глагола.&lt;br /&gt;&lt;br /&gt;Вот примеры:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;He kept on interrupting me while I was telling the story. - Он то и дело меня перебивал, пока я рассказывал историю.&lt;/li&gt;&lt;li&gt;She kept on smiling while reading the book - Она то и дело улыбалась, пока читала книгу;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;Думаю смысл понятен )&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5224880973090972446?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5224880973090972446/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5224880973090972446' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5224880973090972446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5224880973090972446'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/blog-post_16.html' title='Конструкция с повторящимся действием &quot;то и дело&quot;.'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4526606919133849703</id><published>2011-02-16T00:02:00.000-08:00</published><updated>2011-02-16T00:07:37.635-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='грамматика'/><category scheme='http://www.blogger.com/atom/ns#' term='английский'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>Применение "мог" и "смог" в английском</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Речь пойдет о том как сказать: "Я &lt;b&gt;могу&lt;/b&gt; сделать эту работу" и с подчеркиванием "Я &lt;b&gt;&lt;u&gt;с&lt;/u&gt;мог&lt;/b&gt; сделать эту работу".&lt;br /&gt;&lt;br /&gt;I.&lt;br /&gt;Modal verb: can&lt;br /&gt;Past: &lt;b&gt;could&lt;/b&gt;&lt;br /&gt;Present: &lt;b&gt;can&lt;/b&gt;&lt;br /&gt;Future: none&lt;br /&gt;&lt;br /&gt;II.&lt;br /&gt;Modal verb: to be able to&lt;br /&gt;Past: &lt;b&gt;was/were&lt;/b&gt; able to&lt;br /&gt;Present: &lt;b&gt;am/is/are&lt;/b&gt; able to&lt;br /&gt;Future: &lt;b&gt;will be&lt;/b&gt; able to&lt;br /&gt;&lt;br /&gt;Первое, вспомогательный глагол "can", применяется когда нужно сказать "мог" / "не мог". А когда нужно передать оттенок, что наконец-то смог, то это второе!&lt;br /&gt;&lt;br /&gt;Еще. Как видим, из выше приведенного, мы не можем сказать "Я могу это сделать завтра", только и только "Я смогу сделать это завтра", применив "will be able to"!&lt;br /&gt;&lt;br /&gt;Примеры:&lt;br /&gt;Я смог поставить MS Windows, когда мне было 10. - I was be able to MS Windows, when I was 10.&lt;br /&gt;Он сможет написать программу завтра. - He will be able to write the program tomorow.&lt;br /&gt;&lt;br /&gt;Нюанс:&lt;br /&gt;Слова "&lt;b&gt;was/were able&lt;/b&gt; to" можно заменить на "&lt;b&gt;managed&lt;/b&gt; to".&lt;br /&gt;&lt;br /&gt;Пример:&lt;br /&gt;I managed to run the SSH daemon yesterday eveninig. - Я смог запустить демон SSH вчера вечером.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4526606919133849703?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4526606919133849703/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4526606919133849703' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4526606919133849703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4526606919133849703'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/blog-post.html' title='Применение &quot;мог&quot; и &quot;смог&quot; в английском'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-373845211167816476</id><published>2011-02-02T01:13:00.000-08:00</published><updated>2011-02-04T14:07:11.165-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>Как получить цветную консоль во FreeBSD?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Задался сегодня вопросом: "А че это у меня промпт не информативный?" и решил научить его навыкам ответов на вопросы: "Где я?", "Кто я?" и "Когда обед, т.е. скоко времени?". Однако как это сделать не сразу нашел, однако есть отличный пост в блоге у некоего товарища, но копи-пастить влом и поэтому привожу токо&amp;nbsp;&lt;a href="http://www.propheta.ru/2008/02/cshtcsh.html"&gt;ссылку&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Первым делом определю, что за оболочка у меня, а это запустив:&lt;br /&gt;&lt;blockquote&gt;echo $SHELL&lt;/blockquote&gt;увижу:&lt;br /&gt;&lt;blockquote&gt;/bin/csh&lt;/blockquote&gt;что означает у меня "C Shell" и что настроечный файл к нему это "&lt;b&gt;.cshrc&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;Далее, чтобы получить цветной вывод команды "ls" можно задать альяс в файле &lt;b&gt;.cshrc&lt;/b&gt;, который лежит в корневой папке юзера. Открыв его и задав опцию G можно получить раксрашенный вывод. Что чуть информативней. У меня задано так:&lt;br /&gt;&lt;blockquote&gt;alias ls ls -GAFawh&lt;/blockquote&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;A и a - Лучше глянуть "man ls", это в двух словах не пояснить;&lt;/li&gt;&lt;li&gt;F - Директориям добавлять "/";&lt;/li&gt;&lt;li&gt;h - &amp;nbsp;Когда юзается опция "l" добавлять суфиксы Byte, Kilobyte, etc;&lt;/li&gt;&lt;li&gt;w - Принудительно раскрашивать непечатываемые символы;&lt;/li&gt;&lt;/ul&gt;Весьма нравится. Остается решить вопрос: "как задать свои цвета?"&lt;br /&gt;&lt;br /&gt;Вывод grep тоже можно подсветить, для этого надо можно задать альяс:&lt;br /&gt;&lt;br /&gt;alias grep      grep --colour=auto&lt;br /&gt;&lt;br /&gt;Остается настроить приглашение в командной строке, для этого загуглив "FreeBSD prompt sh color" набредаю на&amp;nbsp;&lt;a href="http://www.understudy.net/custom.html#table2"&gt;ссылку&lt;/a&gt;, которая учит как задавать цвета! Еще раз: она дает мне понимание как задать цветовые настройки под мой C-Shell. Приступим:&lt;br /&gt;&lt;br /&gt;Сначала хочу видеть, чтото вроде этого:&lt;br /&gt;&lt;blockquote&gt;root@freebsd82rc [bin]# &amp;nbsp;&lt;/blockquote&gt;Это описывается, так:&lt;br /&gt;&lt;blockquote&gt;set prompt = "%n@%m [%c]%# "&lt;/blockquote&gt;Где "n", "m" и "c" это юзер, машина и короткий путь к рабочей папке. Выделю жирным путь к папке, для этого использую %B(сюда вставляю %c)%b. Все это теперь выглядит так:&lt;br /&gt;&lt;blockquote&gt;set prompt = "%n@%m [%B%c%b]%# "&lt;/blockquote&gt;Начнем задавать цветовые настройки, для этого откроем страничку, которая учит цветам(см.выше) и читаем. Для включения настроек надо предварить "\n" и использовать конструкции вида %{\033[Xm%}.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-373845211167816476?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/373845211167816476/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=373845211167816476' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/373845211167816476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/373845211167816476'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/02/prompt-freebsd.html' title='Как получить цветную консоль во FreeBSD?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3923299639544455439</id><published>2011-01-31T01:56:00.000-08:00</published><updated>2011-01-31T02:00:33.551-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>Конструкция "run out of"</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Сегодня на занятиях по английскому познакомился с интересной конструкцией: "run out of" означаеющей "закончиться". Примеры:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Hard disk drive run out of space - На жестком диске закончилось место;&lt;/li&gt;&lt;li&gt;I run out of money - У меня закончились деньги;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;Весьма прикольно это выглядит при таких вот фразах:&lt;/div&gt;&lt;blockquote&gt;What do you do when you run out of knowledge?&lt;/blockquote&gt;Не правда ли "взрывает мозг" ? :)&lt;br /&gt;&lt;br /&gt;Цель этой конструкции: юзать тогда, когда хочется выразить мысль о том, что у кого-то\чего-то чтото кончилось в наличии(спички, деньги, деньги и т.д. и т.п.)&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3923299639544455439?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3923299639544455439/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3923299639544455439' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3923299639544455439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3923299639544455439'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2011/01/run-out-of.html' title='Конструкция &quot;run out of&quot;'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1085576033684495692</id><published>2010-12-28T10:43:00.000-08:00</published><updated>2011-02-20T13:54:12.767-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><category scheme='http://www.blogger.com/atom/ns#' term='support documentation'/><title type='text'>Чем отличаются опции с одним дефисом от опций с двумя в консольных приложениях?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Сегодня как будто заново родился в прямом смысле слова.&lt;br /&gt;&lt;br /&gt;Можно значительно улучшить разработку скриптов с применением утиллит консольного типа поддерживающих задание опций в стиле UNIX подхода и поддерживать его в своих тулзах. Вероятно вы видели в консоли строку помощи, подобную этой:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;c:\tools\grep_&amp;gt;grep --help&lt;br /&gt;Usage: grep [OPTION]... PATTERN [FILE] ...&lt;br /&gt;Search for PATTERN in each FILE or standard input.&lt;br /&gt;Example: grep -i 'hello world' menu.h main.c&lt;br /&gt;&lt;br /&gt;Regexp selection and interpretation:&lt;br /&gt;-E, --extended-regexp     PATTERN is an extended regular expression&lt;br /&gt;-F, --fixed-strings       PATTERN is a set of newline-separated strings&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Возможно у Вас также как и у меня возникали вопросы:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;А чем отличаются опции с одним дифисом, от опций с двумя дефисами?&lt;/li&gt;&lt;li&gt;Если обе опции ведут к одному и тому же, то зачем вводить две?&lt;/li&gt;&lt;/ol&gt;Введем терминологию(не моя, услышал от коллеги):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Короткие опции, помечаемые одним дефисом;&lt;/li&gt;&lt;li&gt;Длинные опции, помечаемые двумя дефисами.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Для того чтобы понять эту разницу, нужно осознавать, что существуют два случая применения программ консольного типа:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;В визуальной среде позволяющей интерактивно работать с програмами консольного типа(К примеру: для MS Windows это "cmd.exe", либо FAR с горячей клавишей "ctrl+O");&lt;/li&gt;&lt;li&gt;В командных сценариях(*.bat, *.cmd, *.sh, etc).&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Для первого же случая использование утиллит предполагает, что они применяются для быстрого получение результата, к примеру необходимого при отладке командного сценария и пользователь, как правило помнит назначение применяемых им опций. Поэтому при использовании опций такого типа допускается для скорости набора "буковок" команды применять один дефис.&lt;br /&gt;&lt;br /&gt;Для второго случая следует, когда утилиты консольного типа используются в скриптах. Их применение предполагает, что в будущем возможно придется изменить скрипт, а это надо означает, что надо помнить значение каждой опции и при этом скрипт может быть сколь угодно большим. Для таких опций используются два дефиса.&lt;br /&gt;&lt;br /&gt;Осталось пояснить еще один нюанс, который весьма важен и который нужно знать!&lt;br /&gt;Значения в коротких опциях, следуют через пробел, а в длинных через символ "=" , который в языке программирования в "С" означает "присвоить".&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1085576033684495692?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1085576033684495692/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1085576033684495692' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1085576033684495692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1085576033684495692'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/12/unix.html' title='Чем отличаются опции с одним дефисом от опций с двумя в консольных приложениях?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3574280696108249927</id><published>2010-11-18T12:41:00.000-08:00</published><updated>2010-11-18T12:41:35.107-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screencasting'/><category scheme='http://www.blogger.com/atom/ns#' term='support documentation'/><title type='text'>Screencast making</title><content type='html'>Уже давным давно столкнулся с разнообразными обучающами видео-роликами. Ищи как правило на youtube.com. Все что поднимает бунт в моей душе, к примеру драйвер-девелопмент, разработка и проектирование приложений, написание грамотного кода, да много чего. Однако только недавно решился на создание своих скринкастов, так сказать до рос ))) Встал вопрос, на чем остановиться?&lt;br /&gt;&lt;br /&gt;Ответ гугла вывел меня на обзор программ приведенный на хабре, благодаря которумы узнал об&amp;nbsp;&lt;a href="http://camstudio.org/"&gt;этой фриварной проге&lt;/a&gt;. Умеет как раз то что надо:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Пишет полноэкранный видос с микрофоном;&lt;/li&gt;&lt;li&gt;Позволяет также на видосе уставливать разнообразные стрелочки, заметки и др. Причем разными цветами!!&lt;/li&gt;&lt;/ul&gt;Может, как нить начну толкать свои мысли через скринкасты, пока все это будет направлено на корпоративный документатион, по причине того, что информация нужна, а писать много букав влом!;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3574280696108249927?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3574280696108249927/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3574280696108249927' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3574280696108249927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3574280696108249927'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/11/screencast-making.html' title='Screencast making'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5467464183507491254</id><published>2010-10-03T03:12:00.000-07:00</published><updated>2010-10-03T03:12:18.207-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Бъярн Страуструп</title><content type='html'>Очень многие из нас хотят знать, а что собственно думает о С++ сам автор? Об этом можно получить представление, но только англо-понимающих. К сожалению у меня не такой уровень владения языком,чтобы легко понимать его,однако замечу что говорит Бъярн члено-раздельно!!!&lt;br /&gt;Предлагаю практикующимся в С++ и английском, слушать чаще подобных людей. Приведу ссылки на ютуб, где можно послушать Бъярна:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=RbwiUwUuyBw&amp;amp;feature=related"&gt;На ютубе раз&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=lMmVuRNmHzQ&amp;amp;feature=related"&gt;C++0x lecture by Bjarne Stroustrup at UofT&lt;/a&gt; (лекция !!!)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=W-LCMtm9WWA&amp;amp;feature=related"&gt;Bjarne Stroustrup talking about "Université du SI"&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=ptY52nYNXQ4"&gt;Design and Evolution of C++ -Bjarne Stroustrup &amp;amp; Herb Sutter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Успеха вам в понимании! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5467464183507491254?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5467464183507491254/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5467464183507491254' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5467464183507491254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5467464183507491254'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/10/blog-post.html' title='Бъярн Страуструп'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5587441657976499805</id><published>2010-09-29T04:37:00.000-07:00</published><updated>2010-09-29T23:30:56.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Получить десятичное число, перевести и вывести в двоичной системе счисления</title><content type='html'>Задачка уровня 1-курсника ВУЗа:&lt;br /&gt;&lt;br /&gt;Введенное десятичное число в диапазоне от 0 до INT_MAX(константа из climit-инклуда) преобразовать в двоичную систему счисления и вывести на экран. Для вывода и ввода юзать std::cout, std::cin.&lt;br /&gt;&lt;br /&gt;Запрещено:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Использовать любые массивы;&lt;/li&gt;&lt;li&gt;Вызывать printf;&lt;/li&gt;&lt;li&gt;Создавать функции, кроме одной main();&lt;/li&gt;&lt;li&gt;Использовать манипуляторы пространства std::&lt;/li&gt;&lt;li&gt;Логические сдвиги чисел, т.е. операции '&amp;lt;&amp;lt;', '&amp;gt;&amp;gt;'&lt;/li&gt;&lt;li&gt;Рекурсия запрещена.&lt;/li&gt;&lt;li&gt;Логическое умножение;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;Ответ(http://www.base64.ru/):&lt;br /&gt;ICAgIGludCBudW1iZXIgPSBpOwogICAgaW50IHBvd2VyICA9IDE7CiAgICB3aGlsZShwb3dlcioyPD1udW1iZXIgJiYgcG93ZXIqMiA+IHBvd2VyKQogICAgICBwb3dlcio9MjsKICAgIAogICAgd2hpbGUocG93ZXIgPiAwKSB7CiAgICAgIGNvdXQgICA8PCBudW1iZXIgLyBwb3dlcjsKICAgICAgbnVtYmVyICU9IHBvd2VyOwogICAgICBwb3dlciAgLz0gMjsKICAgIH0=&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5587441657976499805?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5587441657976499805/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5587441657976499805' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5587441657976499805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5587441657976499805'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/blog-post_29.html' title='Получить десятичное число, перевести и вывести в двоичной системе счисления'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6932283845687484962</id><published>2010-09-13T04:51:00.000-07:00</published><updated>2010-09-13T04:51:09.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='System loader'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Забавное нововведение в использовании реестра MS Windows</title><content type='html'>Вобщем, теперь можно менять способ поиска DLL-ок, но об этом лучше почитать&amp;nbsp;&lt;a href="http://support.microsoft.com/kb/2264107"&gt;тут&lt;/a&gt;. Фактически означает еще одну "возможность" ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6932283845687484962?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6932283845687484962/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6932283845687484962' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6932283845687484962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6932283845687484962'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/ms-windows.html' title='Забавное нововведение в использовании реестра MS Windows'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3481491190232404731</id><published>2010-09-08T12:35:00.000-07:00</published><updated>2010-09-08T12:36:18.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hiew'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Меня догнал Python</title><content type='html'>Итак, как дикая смесь ленивого + системаного программиста + реверсера мне всегда было любопытны технологиии автоматизирующие реверс и поиск чего-либо для решения моих задач в кратчейшее время или чтобы само искалось ))) Но в этот раз технологии, а точнее язык, сам меня догнал и четко сказал мне "Я Python! Меня надо учить!" и сколько бы не убегал от его эгоцентричности, что мол он сказал и ... не убежал. Он твердо сегодня мне заявил: "А теперь я еще и в WinDbg"&lt;br /&gt;&lt;br /&gt;О чем это я ? О том что скриптовый язык Python теперь почти в любом в более-менее значимом реверс-инструменте:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://pykd.codeplex.com/"&gt;Python extension for WinDbg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://0xeb.wordpress.com/"&gt;PyHiew (open source project) is a Hiew external module (HEM)&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://hexblog.com/2008/03/pythonic_way.html"&gt;Pythonic way (Слова Ильфака Гуильфанова)&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Он также есть в виде плагина для OllyDbg 1.0&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3481491190232404731?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3481491190232404731/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3481491190232404731' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3481491190232404731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3481491190232404731'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/python.html' title='Меня догнал Python'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8570068590389523572</id><published>2010-09-04T06:36:00.000-07:00</published><updated>2010-11-08T02:31:05.615-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Создание нового SVN-проекта на кряклаб</title><content type='html'>Ввиду того что команда cracklab.ru подняли SVN сервак, то я тут же воспользовался этой возможностью ) Поэтому теперь, все мои публичные исходники будут только&amp;nbsp;&lt;a href="https://ssl.cracklab.ru/svn/sysdev"&gt;тут&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Цель проекта:&lt;br /&gt;Сбор существующего или разработка нового кода облегчающего написание приложений или исполнимых модулей, т.е. драйверов или динамических библиотек.&lt;br /&gt;&lt;br /&gt;Пока еще все конечно сырое, но в последствии будет куда лучше ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8570068590389523572?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8570068590389523572/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8570068590389523572' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8570068590389523572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8570068590389523572'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/svn.html' title='Создание нового SVN-проекта на кряклаб'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-806277638034532313</id><published>2010-09-02T02:11:00.000-07:00</published><updated>2010-09-02T02:11:19.900-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Детект машинной инструкции PUSH/POP reg</title><content type='html'>Приведу одну из задачек, которые встречаются в практике написания кодо-анализитаторов. Есть код приведенный ниже, нужно оптимизировать и получить более эффективный по выполнению код:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt; switch(Opc)&lt;br /&gt; {&lt;br /&gt; case 0x50: case 0x51: case 0x52: case 0x53:&lt;br /&gt; case 0x54: case 0x55: case 0x56: case 0x57:&lt;br /&gt; {&lt;br /&gt;  std::cout &amp;lt;&amp;lt; "This is PUSH reg instruction" &amp;lt;&amp;lt; std::endl;&lt;br /&gt;  break;&lt;br /&gt; }&lt;br /&gt; case 0x58: case 0x59: case 0x5A: case 0x5B:&lt;br /&gt; case 0x5C: case 0x5D: case 0x5E: case 0x5F:&lt;br /&gt; {&lt;br /&gt;  std::cout &amp;lt;&amp;lt; "This is POP reg instruction"  &lt;/code&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;code&gt; std::endl;&lt;br /&gt;  break;&lt;br /&gt; }&lt;br /&gt; default:&lt;br /&gt;  std::cout &lt;/code&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;code&gt; "This isn't PUSH/POP reg instruction" &lt;/code&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;code&gt; std::endl;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;Ответ (http://www.base64.ru/):&lt;br /&gt;&lt;br /&gt;CS8vINCe0LTQvdC+INC40Lcg0LLQvtC30LzQvtC20L3Ri9GFINGA0LXRiNC10L3QuNC5CglpZigoT3BjICYgMHhGOCk9PTB4NTApCgkJc3RkOjpjb3V0IDw8ICJUaGlzIGlzIFBVU0ggcmVnIGluc3RydWN0aW9uIiA8PCBzdGQ6OmVuZGw7CgllbHNlIGlmKChPcGMgJiAweEY4KT09MHg1OCkKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgaXMgUE9QIHJlZyBpbnN0cnVjdGlvbiIgIDw8IHN0ZDo6ZW5kbDsKCWVsc2UKCQlzdGQ6OmNvdXQgPDwgIlRoaXMgaXNuJ3QgUFVTSC9QT1AgcmVnIGluc3RydWN0aW9uIiA8PCBzdGQ6OmVuZGw7&lt;/pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-806277638034532313?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/806277638034532313/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=806277638034532313' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/806277638034532313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/806277638034532313'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/pushpop-reg.html' title='Детект машинной инструкции PUSH/POP reg'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1354784421570684811</id><published>2010-09-01T23:40:00.000-07:00</published><updated>2011-04-24T01:42:41.085-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='unpacking'/><title type='text'>Упаковщики, крипторы, протекторы</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Громадное количество реверсеров рано или поздно могут осознать, что им почему-то вдруг стал нужен упаковщик\криптор\протектор. Наступает такое прозрение по разным причинам, вероятно малвару по прятать, может быть это их новая развивающая задача, либо защита софта, но хотел бы отметить последних лиц. Да, речь пойдет о тех людях, которые в силу каких-либо причин решили писать свой протектор и им почему-то не подошли экземпляры существующих на рынке и в свободном доступе протекторы.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Прежде чем разрабатывать новый защитный софт нужно &amp;nbsp;учитывать очень много нюансов, вот два из них:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Защищенный софт вашим поделием могут детектировать антивирусы;&lt;/li&gt;&lt;li&gt;Обработанные файлы должны иметь возможность работать не привязываясь исключительно к одной версии системы;&lt;/li&gt;&lt;/ul&gt;Хотел бы остановиться прежде всего на детктировании антивирусами. Почему в одних случаях антивирус вдруг начинает ругаться, а в совершенно такой же ситуации без какой-то там "мелочи", вдруг говорит что это зловред?&lt;br /&gt;&lt;br /&gt;Дело в том что, закриптованное\упакованное\запротекченное приложение для специалистов антивирусных компаний попадает в одну и туже категорию, которую условно называеют "packed objects" и логично, ведь антивирусный продукт не знает, что этот файл упакован, а не запротекчен, другими словами продукт не может знать цели обработки файла! Это может озвучить только человек, поиследовав файл. Именно по этой причине все обработанный файлы и не похожие на стандартные попадают в одну "свалку" называемую "packed objects".&lt;br /&gt;&lt;br /&gt;Выявить что файл обработан, почти, не составляет труда для современных средств. Используются довольно много методик, вот ряд из них: подсчет энтропии, попытка узнать по стабу версию компилятора, по заголовкам и другим сущностям исполнимого формата выявить аномалии, которых не содержат, как правило, стандартные файлы получаемые компиллерами.&lt;br /&gt;&lt;br /&gt;После выявления факта "обработанности" и соотнесения его в группу пакованных объектов, можно выявить "нелегальные" действия, которые "честный" протектор либо не позволит себе, либо применит в случае крайней нужды. Какие действия можно считать "не легальными" ?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;На точке входа "анти-дебаг" или "анти-дизасм" или какой-либо трюк, т.к. это потенциальный кандидат в "анти-эмуляционные" трюки;&lt;/li&gt;&lt;li&gt;На упакованные файлы несложно создать сигнатуру, в плоть до статической! Ведь автор настолько умен, что создал неломаемый для реверса прот и ему не зачем от кого-то прятаться! Да и в следующем билде прота, многое поменяется, смысл прятаться?&lt;/li&gt;&lt;li&gt;В стабе нет кода работающего со спецификой системы, к примеру с полями PEB, значения регистров на старте. Потому что это недокументированности, как вывод есть вероятность, что не будет работать на другой версии системы. А автор между прочим стремится к стабильной работе на множестве систем!&lt;/li&gt;&lt;/ul&gt;Советы при построении стаба:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Не применять сложный код мешающий наложить сигнатуру, аверам будет влом и они задетектят, а вы в очередной раз будет рвать волосы с криками "ааа, они там все ламеры, опять...". Лучше потратьте силы на разработку виртуализации кода, чем на "недетектируемость".&lt;/li&gt;&lt;li&gt;Откажитесь от использования каких-либо "громоздких" циклов на точке входа и применения всяческих недокументированностей!&lt;/li&gt;&lt;li&gt;Используйте GetProcAddress вместо того чтобы искать самому, сложность реверса заключается в отнюдь не в получении ответа "Да как же это он апи-шки то находит?", отнюдь! Эмуляция "GetProcAddress" это вчерашний день! Сегодня может служить, только "довеском", лучше улучшайте виртуализацию кода, детект виртуальных машин, ну и сохранение результатов того же GetProcAddress черт знает куда и др. вещи;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1354784421570684811?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1354784421570684811/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1354784421570684811' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1354784421570684811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1354784421570684811'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/blog-post.html' title='Упаковщики, крипторы, протекторы'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4006501011648164020</id><published>2010-09-01T12:19:00.000-07:00</published><updated>2010-09-01T12:19:28.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows7'/><title type='text'>Забыл пароль от Win 7 x64, чего делать?</title><content type='html'>Задумался тут, что если у человека не стоит пароля на BIOS и как тогда мне стать админом на его компе,. если там семерка? ;) Порыскав по инэту наткнулся на:&lt;br /&gt;&lt;a href="http://www.whatsmypass.com/change-your-password-with-sticky-keys"&gt;Change your password with sticky keys&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Приведу цитату:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;To reset a forgotten administrator password, follow these steps:&lt;/blockquote&gt;&lt;ol&gt;&lt;li&gt;&lt;blockquote&gt;Boot from Windows PE or Windows RE and access the command prompt.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Find the drive letter of the partition where Windows is installed. In Vista and Windows XP, it is usually C:, in Windows 7, it is D: in most cases because the first partition contains Startup Repair. To find the drive letter, type C: (or D:, respectively) and search for the Windows folder. Note that Windows PE (RE) usually resides on X:.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Type the following command (replace “c:” with the correct drive letter if Windows is not located on C:):&lt;/blockquote&gt;&lt;blockquote&gt;&lt;strong&gt;copy c:\windows\system32\sethc.exe c:\&lt;/strong&gt;&lt;/blockquote&gt;&lt;blockquote&gt;This creates a copy of sethc.exe to restore later.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Type this command to replace sethc.exe with cmd.exe:&lt;/blockquote&gt;&lt;blockquote&gt;&lt;strong&gt;copy /y c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe&lt;/strong&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;Reboot your computer and start the Windows installation where you forgot the administrator password.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;After you see the logon screen, press the SHIFT key five times.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;You should see a command prompt where you can enter the following command to reset the Windows password (see screenshot above):&lt;/blockquote&gt;&lt;blockquote&gt;&lt;strong&gt;net user you_user_name new_password&lt;/strong&gt;&lt;/blockquote&gt;&lt;blockquote&gt;If you don’t know your user name, just type &lt;strong&gt;net user&lt;/strong&gt; to list the available user names.&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;You can now log on with the new password.&lt;/blockquote&gt;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4006501011648164020?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4006501011648164020/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4006501011648164020' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4006501011648164020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4006501011648164020'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/09/win-7-x64.html' title='Забыл пароль от Win 7 x64, чего делать?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8028676680133759053</id><published>2010-08-26T02:38:00.000-07:00</published><updated>2010-08-26T02:38:50.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hiew'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Плагины к Hiew</title><content type='html'>&amp;nbsp;Итак, новости которые меня весьма поразили ;)&lt;ol&gt;&lt;li&gt;Hiewplus,&amp;nbsp;&lt;a href="http://lgwm.org/projects/hiewplus/"&gt;ссылка на hiewplus&lt;/a&gt;&lt;/li&gt;&lt;li&gt;PyHiew, &lt;a href="http://code.google.com/p/pyhiew/"&gt;ссылка на pyhiew&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&amp;nbsp; Первый представляет собой приложение win32 и позволяет попытаться открыть процессы в стандартном Hiew-шном интерфейсе.&lt;br /&gt;&amp;nbsp; Второй же служит для добавления возможности написания скриптов на Python и использовать их к открытому в Hiew файле.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8028676680133759053?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8028676680133759053/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8028676680133759053' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8028676680133759053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8028676680133759053'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/hiew.html' title='Плагины к Hiew'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6732092974032319576</id><published>2010-08-18T14:02:00.000-07:00</published><updated>2010-08-18T14:18:48.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Реализация идиомы Pointer to Implementation с применением std::auto_ptr</title><content type='html'>Сегодня в очередной раз столкнулся с очень интересной ошибкой, которую уже видел этим летом и пока вспомнил в чем дело, и как ее победить в очередной раз сломал себе мозг. В следствии чего решил написать небольшую задачку, думаю изучающим C++ будет интересно знать некоторые нюансы языка.&lt;br /&gt;&lt;br /&gt;Цель: Понять почему возникает ошибка компиляции и осознать метод ее решения.&lt;br /&gt;&lt;br /&gt;Условия: имеется небольшой файл-хидер header1.hpp:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#include &lt;memory&gt;&lt;br /&gt;&lt;br /&gt;class CMain1 {&lt;br /&gt;  class     CAddon;&lt;br /&gt;  typedef   std::auto_ptr&amp;lt; CAddon &amp;gt;  AddonPtr_t;&lt;br /&gt;public:&lt;br /&gt;  CMain1();&lt;br /&gt;private:&lt;br /&gt;  AddonPtr_t m_Addon;&lt;br /&gt;};&lt;br /&gt;&lt;/memory&gt;&lt;/code&gt;&lt;/pre&gt;а также есть файл-реализации impl1.cpp:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#include "header1.h"&lt;br /&gt;&lt;br /&gt;class CMain1::CAddon {&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;CMain1::CMain1()&lt;br /&gt;: m_Addon(new CAddon) &lt;br /&gt;{}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Ответ ( &amp;nbsp;http://www.base64.ru/ ):&lt;br /&gt;----&lt;br /&gt;&amp;nbsp;0JTQtdGB0YLRgNGD0LrRgtC+0YAg0LrQu9Cw0YHRgdCwIENNYWluMSDQstGL0LfRi9Cy0LDQtdGCINC00LXRgdGC0YDRg9C60YLQvtGAIHN0ZDo6YXV0b19wdHIsINC90L4g0L/RgNC4INGN0YLQvtC8IH5DTWFpbigpINC/0L7QvdGP0YLQuNGPINC90LUg0LjQvNC10LXRgiDQviDRgtC+0Lwg0LrQsNC6INGD0YHRgtGA0L7QtdC9IENBZGRvbi4g0KfRgtC+INCx0Ysg0LjQt9Cx0LDQstC40YLRjNGB0Y8g0L7RgiDQvtGI0LjQsdC60Lgg0L3Rg9C20L3QviAg0L3QsNC/0LjRgdCw0YLRjCDRgNC10LDQu9C40LfQsNGG0LjRjiB+Q01haW4oKSDQsiDRgtC+0Lwg0LbQtSDRhNCw0LnQu9C1INCz0LTQtSDQuCDQtNC10LrQu9Cw0YDQsNGG0LjRjyBDQWRkb24=&lt;br /&gt;----&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6732092974032319576?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6732092974032319576/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6732092974032319576' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6732092974032319576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6732092974032319576'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/pointer-to-implementation-stdautoptr.html' title='Реализация идиомы Pointer to Implementation с применением std::auto_ptr'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6138617175151906356</id><published>2010-08-13T22:10:00.000-07:00</published><updated>2010-08-13T23:23:08.330-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Небезопасные типы в закрытых базовых классах</title><content type='html'>Наверняка многие сталкивались с готовым кодом, который менять нельзя, хоть ты тресни. А в нем используются небозопасные типы, к примеру метод класса принимает указатель на void, а по нему не зная типа или размера нельзя корректно освободить память!&lt;br /&gt;Читая Джеффа Элджера увидел интересный прием:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class UnsafeNode {&lt;br /&gt;public:&lt;br /&gt;  UnsafeNode(UnsafeNode * next_, void * data_);&lt;br /&gt;  virtual ~UnsafeNode();&lt;br /&gt;  UnsafeNode * Next();&lt;br /&gt;  void * Data();&lt;br /&gt;private:&lt;br /&gt;  UnsafeNode * m_Next;&lt;br /&gt;  void       * m_Data;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;template &amp;lt; typename T&amp;gt;&lt;br /&gt;class SafeNode : private UnsafeNode {&lt;br /&gt;public:&lt;br /&gt;  SafeNode(SafeNode * next_, T * data_) : UnsafeNode(next_, data_) {}&lt;br /&gt;  virtual ~SafeNode() { delete( (T*)Data() ); }&lt;br /&gt;  SafeNode * Next()   { return( (SafeNode*)UnsafeNode::Next() ); }&lt;br /&gt;  T *  Data()         { return( (T *)UnsafeNode::Data()); } &lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;1) Потомки не видят безобразия в базовом классе, т.к. применяется закрытое наследование&lt;br /&gt;2) Можно применить любой тип, т.к. шаблон&lt;br /&gt;3) Коректно удалится в деструкторе, т.к. задана привязка к типу&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6138617175151906356?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6138617175151906356/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6138617175151906356' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6138617175151906356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6138617175151906356'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/blog-post_2410.html' title='Небезопасные типы в закрытых базовых классах'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-453356076053505871</id><published>2010-08-13T09:33:00.000-07:00</published><updated>2010-08-18T14:21:42.188-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Некомпилируется код применением указателя:</title><content type='html'>Имеется код, приведенный ниже. Почему в случае №1 компилятор не может скомпилировать код, а в случае №2 пусть и громоздко, но все отлично компилируется?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class CUnk {&lt;br /&gt;public:&lt;br /&gt;  void SuperMethod() { std::cout &amp;lt;&amp;lt; "CUnk::SuperMethod()" &amp;lt;&amp;lt; std::endl; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class CUnkPointer {&lt;br /&gt;public:&lt;br /&gt;  CUnkPointer() : m_UnkPtr(0) {}&lt;br /&gt;  CUnkPointer(CUnk * UnkPtr) : m_UnkPtr(UnkPtr) {}&lt;br /&gt;  ~CUnkPointer()     { if(m_UnkPtr) delete(m_UnkPtr); m_UnkPtr=0;  }&lt;br /&gt;  operator CUnk *()  { return(m_UnkPtr); }&lt;br /&gt;private:&lt;br /&gt;  CUnk * m_UnkPtr;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;  CUnkPointer UnkPtr( new CUnk);&lt;br /&gt;  UnkPtr-&amp;gt;SuperMethod();            // (Случай №1)&lt;br /&gt;  ((CUnk*)UnkPtr)-&amp;gt;SuperMethod();   // (Случай №2)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Ответ( http://www.base64.ru/ ):&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;0J/QvtGC0L7QvNGDINGH0YLQviDQsiDRgdC70YPRh9Cw0LUg4oSWMiDRgdGD0YnQtdGB0YLQstGD0LXRgiDQvtC/0LXRgNCw0YLQvtGAINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8sINCwINCyINGB0LvRg9GH0LDQtSDihJYxINC90LXRgiDQv9C10YDQtdCz0YDRg9C30LrQuCDQvtC/0LXRgNCw0YLQvtGA0LAgIi0+Ig==&lt;br /&gt;----&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-453356076053505871?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/453356076053505871/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=453356076053505871' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/453356076053505871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/453356076053505871'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/blog-post_13.html' title='Некомпилируется код применением указателя:'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1603754580420852414</id><published>2010-08-12T04:56:00.000-07:00</published><updated>2011-04-24T01:42:57.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='unpacking'/><title type='text'>Перевод "%UPX_SOURCE%\upx-3.05-src\doc\filter.txt"</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Этот документ поясняет концепцию "фильтрация" в UPX. В основном фильтрация это метод препроцессинга данных, который может улучшить коэффициент сжатия файлов UPX-ом.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В настоящее время фильтры UPX используют основаный на одном очень специфичном алгоритме, который хорошо работает для ix86 исполнимых файлов. Это то, что UPX называет "native" реализацией. Есть также метод "clever" , который работает только для 32-битных форматов исполнимых файлов и был реализован первым реализован в UPX.&lt;br /&gt;&lt;br /&gt;Давайте-ка начнем с примера(это место я ассоциировал как 32-битный файл). Рассмотрим фрагмент кода:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;00025970: E877410600                     calln     FatalError&lt;br /&gt;00025975: 8B414C                         mov       eax,[ecx+4C]&lt;br /&gt;00025978: 85C0                           test      eax,eax&lt;br /&gt;0002597A: 7419                           je        file:00025995&lt;br /&gt;0002597C: 85F6                           test      esi,esi&lt;br /&gt;0002597E: 7504                           jne       file:00025984&lt;br /&gt;00025980: 89C6                           mov       esi,eax&lt;br /&gt;00025982: EB11                           jmps      file:00025995&lt;br /&gt;00025984: 39C6                           cmp       esi,eax&lt;br /&gt;00025986: 740D                           je        file:00025995&lt;br /&gt;00025988: 83C4F4                         add (d)   esp,F4&lt;br /&gt;0002598B: 68A0A91608                     push      0816A9A0&lt;br /&gt;00025990: E857410600                     calln     FatalError&lt;br /&gt;00025995: FF45F4                         inc       [ebp-0C]&lt;/code&gt;&lt;/pre&gt;Здесь ты можешь видеть две инструкции CALL вызывающих "FatalError". Как ты возможно знаешь  коэффициент сжатия будет лучше если "движок" компрессора найдет больше последовательностей повторяющихся строк. В этом случае движок видит следующие два байта последовательностей:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;E877 410600 8B   and&lt;br /&gt;E857 410600 FF.&lt;/code&gt;&lt;/pre&gt;Поэтому он может найти 3-байтовые совпадения.&lt;br /&gt;&lt;br /&gt;Сейчас будет прием. На ix86 ближние вызовы("near calls") закодированы как 0xE8 затем 32-битное относительное смещение на результирующий адерс. Давайте посмотрим что случится, если позицию вызова добавить к смещению:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;0x64177 + 0x25970 = 0x89AE7&lt;br /&gt;0x64157 + 0x25990 = 0x89AE7&lt;br /&gt;&lt;br /&gt;E8 E79A0800 8B&lt;br /&gt;E8 E79A0800 FF&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Как ты можешь видеть сейчас "движок" компрессора нашел 5-байтные совпадения. Это значит, что мы просто сохраняем 2 байта сжимаемых данных. Неплохо.&lt;br /&gt;&lt;br /&gt;Так что это основная идея("native" реализация). Все что мы должны сделать, так это использовать метод "filter" перед сжатием и "unfilter" после декомпрессии. Просто перейдите к памяти, найдя байты 0xE8 и обработайте следующие 4 байта как задано выше.&lt;br /&gt;&lt;br /&gt;Конечно, есть несколько возможностей где эта схема может быть улучшена. Во-первых, не только CALL-ы могут быть обработаны, но и near jmp-ы(0xE9 + 32-битное смещение) работает аналогично.&lt;br /&gt;&lt;br /&gt;Второе улучшение может быть, если мы ограничим это фильтрование только для области занимаемой реальным кодом - нет смысла обрабатывать основные данные.&lt;br /&gt;&lt;br /&gt;Другим улучшением будет, если порядок байт 32-битного смещения реверснуть. Почему? Вот другой CALL который следует в фрагменте выше:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;000261FA: E8C9390600                     calln     ErrorF&lt;br /&gt;&lt;br /&gt;0x639C9 + 0x261FA = 0x89BC3&lt;br /&gt;&lt;br /&gt;E8 C39B 0800     сравним с&lt;br /&gt;&lt;br /&gt;E8 E79A 0800&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Как ты можешь видеть эти эти две функции достаточно близки друг к другу, но компрессор не в состоянии использовать эту информацию (2-байтные совпадения, как правило не используются), если подрядок байт смещений повернуть. В этом случае:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;E8 0008 9AE7&lt;br /&gt;&lt;br /&gt;E8 0008 9BC3&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Таким образом, "движок" компрессора находит 3-батйные совпадения здесь. Это хорошее улучшение, теперь "движок" используются похожесть близлежайших смещений тоже.&lt;br /&gt;&lt;br /&gt;Это хорошо, но что случится когда мы найдем фэйковый CALL, т.е. 0xE8 который является частью другой инструкции? Подобной этой:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;0002A3B1: C745 E8 00000000               mov       [ebp-18],00000000&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;В этом случае те замечательные 0x00 байты перезаписываются неcколько менее сжимаемыми данными. Это невыгодная "naive" реализация.&lt;br /&gt;&lt;br /&gt;Так что давайте будем умнее и попытаемся обнаруживать и обрабатывать только "реальные" CALL-ы. В UPX используется простой метод для поиска этих CALL-ов. Мы просто проверяем адресацию(destination) этих CALL-ов внутри некоторой области как и сами CALL-ы(поэтому указанный код выше ложное срабатыване, но это в целом помогает). Лучшим методом будет это дизассемблирование кода, будем рады помощи :)&lt;br /&gt;&lt;br /&gt;Но это только часть работы. Мы не можем просто обрабатать один CALL, затем поскипать другой, процесс дефильтрации нуждается в некоторой информации, чтобы иметь возможность откатить фильтрацию.&lt;br /&gt;&lt;br /&gt;UPX использует следующую идею, которая работает хорошо. Сначала мы предполагаем, что размер области, который будет фильтроваться менее чем 16 МБ. Затем UPX сканирует эту область и сохраняет байты, которые следуют за 0xE8 байтами. Если нам везет, то найдутся байты, которые не следуют за следующим 0xE8. Эти байты наши кандидаты для использования в качестве маркеров.&lt;br /&gt;&lt;br /&gt;Ты все еще помнишь что мы предполагали размер области сканирования менее чем 16 МБ ? Хорошо, это означает что мы обрабатываем реальный CALL, в результате будет смещение тоже меньше чем 0x00FFFFFF. Поэтому MSB всегда 0xFF. Какое прекрассное место для хранения нашего маркера. Конечно мы реверснем порядок байт в получаемом смещении, так что этот маркер будет появляться только после 0xE8 байта и не в 4-х байтах после него.&lt;br /&gt;&lt;br /&gt;Вот и все! Просто работайте с областью памяти, идентифицируя "реальные" CALL-ы и используйте этот метод для их помечания. После этого работа дефильтрации очень проста, он просто ищет за 0xE8 + последовательность маркера и дефильтрует, если нашел его. Это умно, не так ли? :)&lt;br /&gt;&lt;br /&gt;Говоря по правде это не так просто в UPX. Может использоваться дополнительный параметр("add_value"), что делает вещи немного более сложными(к примеру, может быть найден маркер непригодный к использованию, потому что некоторого переполнения во время сложения).&lt;br /&gt;&lt;br /&gt;И алгоритм в целом оптимизирован для простоты дефильтрации(коротко и быстро ассемблируемо насколько это возможно, смотри  stub/macros.ash), который делает процесс фильтрации менее сложной(fcto_ml.ch, fcto_ml2.ch, filteri.cpp).&lt;br /&gt;&lt;br /&gt;Как это может быть видно в filteri.cpp, есть множество вариантов этих фильтрующих реализаций: - native/clever, calls/jumps/calls&amp;amp;jumps, поворачивая/неповорачивая смещения - в сумме где-то 18 различных фильтров(и 9 других вариантов для 16-битных программ).&lt;br /&gt;&lt;br /&gt;Ты можешь выбрать один из них используя параметр командной строки "--filter=" или испытать большинство из них "--all-filters". Или просто дать UPX использовать один заданных нами по умолчанию для исполнимых форматов.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1603754580420852414?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1603754580420852414/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1603754580420852414' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1603754580420852414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1603754580420852414'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/upxsourceupx-305-srcdocfiltertxt.html' title='Перевод &quot;%UPX_SOURCE%\upx-3.05-src\doc\filter.txt&quot;'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8359194854375843002</id><published>2010-08-11T04:45:00.000-07:00</published><updated>2010-08-11T05:44:34.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cryptanalysis'/><title type='text'>Безопасность TLS\SSL</title><content type='html'>&amp;nbsp;Для тех кто как и я интерисуется безопасностью переписки через gmail.com и подобные им основанные на применении TLS\SSL.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ietf.org/mail-archive/web/tls/current/msg03928.html"&gt;[TLS] MITM attack on delayed TLS-client auth through renegotiation&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.ru/url?sa=t&amp;amp;source=web&amp;amp;cd=7&amp;amp;ved=0CEUQFjAG&amp;amp;url=http%3A%2F%2Fwww.daimi.au.dk%2F~ivan%2Freports2009%2FMITMattacksSSL.pdf&amp;amp;ei=yIJiTMHOFJ-iOM3JvKgK&amp;amp;usg=AFQjCNG67jzymsUPIydyipLVSM0XqrrYMg&amp;amp;sig2=UAbPQbn1_TAoPBWLzWND9g"&gt;MITM attacks on SSL/TLS related to renegotiation&lt;/a&gt; . Документ в гугле "MITMattacksSSL.pdf"&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.educatedguesswork.org/2009/11/understanding_the_tls_renegoti.html"&gt;Understanding the TLS Renegotiation Attack&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.darknet.org.uk/2010/08/microsoft-fixes-ssl-spoofing-renegotiation-bug/"&gt;Microsoft Fixes SSL Spoofing Renegotiation Bug&lt;/a&gt; &amp;lt;&amp;lt;&amp;lt; --- !!!!&lt;/li&gt;&lt;li&gt;&lt;a href="http://crypto.stanford.edu/ssl-mitm/"&gt;SSL Man in the Middle Proxy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://extendedsubset.com/?p=8"&gt;Authentication Gap in TLS Renegotiation&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8359194854375843002?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8359194854375843002/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8359194854375843002' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8359194854375843002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8359194854375843002'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/tlsssl.html' title='Безопасность TLS\SSL'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-425163269307076364</id><published>2010-08-09T23:13:00.000-07:00</published><updated>2010-08-09T23:15:58.861-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hiew'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Моя первая статья</title><content type='html'>На прошлой неделе вышла моя статья с названием "Некоторые приёмы статического анализа кода из арсенала вирусного аналитика" в журнале "No bunkum". Статья посвящена некоторым полезным приемам использования реверс-тулзы Hiew, которые помогают повысить эффективность и качество работы при анализе исполнимых файлов.&lt;br /&gt;Прошу не судить строго и учесть, что это мой первый опыт написания чего-либо на паблику. Хотя нет, вру, &amp;nbsp;второй ))) Но между первым и вторым был слишком большой промежуток и можно считать эту статью условно первым моим опытом )&lt;br /&gt;&lt;br /&gt;Статью можно &amp;nbsp;найти&amp;nbsp;&lt;a href="http://www.nobunkum.ru/issue003/static-analysis/"&gt;тут&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;P.S.:&lt;br /&gt;Для справки, первой была статья "Алгоритм шифрования ГОСТ 28147-89. Метод простой замены." &amp;nbsp;на &amp;nbsp;wasm.ru , по этой&amp;nbsp;&lt;a href="http://wasm.ru/print.php?article=gost29147-89"&gt;ссылке&lt;/a&gt; можно перейти к статье&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-425163269307076364?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/425163269307076364/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=425163269307076364' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/425163269307076364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/425163269307076364'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/blog-post_4054.html' title='Моя первая статья'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2216420400616364475</id><published>2010-08-09T02:28:00.000-07:00</published><updated>2010-08-09T02:28:24.318-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Операторы преобразования</title><content type='html'>Сегодня после прочтения подраздела "Операторы преобразования" на стр. 48 книги Джеффа Элджера "Библиотека программиста. C++" пришел к тому, что тот велосипед, что я сконструировал для работы с параметрами можно упростить, вот его текущий код:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  class CParameter {&lt;br /&gt;  public:&lt;br /&gt;    CParameter() : m_Exist(false) { }&lt;br /&gt;    CParameter(std::string &amp;amp; val, bool exist)&lt;br /&gt;      : m_Exist(exist), m_Value(val) {};&lt;br /&gt;&lt;br /&gt;    bool        Exist()   { return( m_Exist );                            }&lt;br /&gt;    int         AsInt()   { return( atoi(str::Trim(m_Value).c_str()) );   }&lt;br /&gt;    double      AsFloat() { return( atof(str::Trim(m_Value).c_str()) );   }&lt;br /&gt;    std::string AsString(){ return( m_Value.c_str() );                    }&lt;br /&gt;&lt;br /&gt;    bool        AsBool()  {&lt;br /&gt;      std::string s(str::Trim(m_Value));&lt;br /&gt;      if(s.empty())&lt;br /&gt;        return(false);&lt;br /&gt;&lt;br /&gt;      std::transform(s.begin(),s.end(),s.begin(),tolower);&lt;br /&gt;      return(1 == strcmp( s.c_str(), "true"));&lt;br /&gt;    }&lt;br /&gt;  private:&lt;br /&gt;    std::string m_Value;&lt;br /&gt;    bool        m_Exist;&lt;br /&gt;  };&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;его текущее использование выглядит таким:&lt;br /&gt;&lt;br /&gt;std::string driver = m_Ini["driver"]["filepath"].AsString();&lt;br /&gt;&lt;br /&gt;что является не совсем наглядным. После прочтения этого подраздела, пришел к выводу, что куда удобней будет перегрузить:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;operator std::string()&lt;/li&gt;&lt;li&gt;opertator int()&amp;nbsp;&lt;/li&gt;&lt;li&gt;operator double()&lt;/li&gt;&lt;li&gt;operator bool()&lt;/li&gt;&lt;/ul&gt;Тогда работа с параметрами будет уже более наглядной:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;std::string driver ( m_Ini["driver"]["filepath"] );&lt;br /&gt;&lt;br /&gt;т.е. компилятор зная тип, куда присваивается сам определяет нужную версию функции возврата и тем самым избавляет меня от необходимости писать эти громоздкие AsString() , AsInt() , etc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2216420400616364475?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2216420400616364475/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2216420400616364475' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2216420400616364475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2216420400616364475'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/blog-post_09.html' title='Операторы преобразования'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-9062084682812613293</id><published>2010-08-08T05:39:00.000-07:00</published><updated>2010-08-08T09:00:57.287-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Забывая о методах класса создаваемых по умолчанию</title><content type='html'>Весьма забавный феномен, если не знать тонкости ;)&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class CStr {&lt;br /&gt;public:&lt;br /&gt;  CStr(char * str) {&lt;br /&gt;    if(!str) {&lt;br /&gt;      m_Ch  = new char[1];&lt;br /&gt;      *m_Ch = 0x0;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      m_Ch = new char[strlen(str)+1];&lt;br /&gt;      strcpy(m_Ch,str);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  ~CStr() { delete(m_Ch); }&lt;br /&gt;  void dump(std::ostream &amp; strm) {&lt;br /&gt;    strm &lt;&lt; "\"" &lt;&lt; m_Ch &lt;&lt; "\"\n";&lt;br /&gt;  }&lt;br /&gt;private:&lt;br /&gt;  char * m_Ch;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;CStr * s1 = new CStr("First String !!!");&lt;br /&gt;CStr * s2 = new CStr("Second String !!!");&lt;br /&gt;&lt;br /&gt;s1-&gt;dump(std::cout);&lt;br /&gt;s2-&gt;dump(std::cout);&lt;br /&gt;&lt;br /&gt;s2 = s1;&lt;br /&gt;&lt;br /&gt;s1-&gt;dump(std::cout);&lt;br /&gt;s2-&gt;dump(std::cout);&lt;br /&gt;&lt;br /&gt;delete(s1);&lt;br /&gt;&lt;br /&gt;s2-&gt;dump(std::cout);&lt;br /&gt;delete(s2);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Думаю этот пример убедил, что нужно быть внимательней при разработке класса ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-9062084682812613293?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/9062084682812613293/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=9062084682812613293' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/9062084682812613293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/9062084682812613293'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/08/blog-post.html' title='Забывая о методах класса создаваемых по умолчанию'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2915285315162010111</id><published>2010-07-27T22:56:00.000-07:00</published><updated>2010-07-27T23:00:24.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Знакомство с итараторами</title><content type='html'>Одна из важных тем при изучении C++ это тема итераторов. Чем лучше вы владеете ими, лучше и изящней будут вяглядеть ваш код. Нашел страничке, на которой автор пусть кратко,но не теряя в полноте пояснил всю логику использования итераторов.&lt;br /&gt;&lt;br /&gt;Ссылка: http://www.hostmake.ru/articles/c/324/&lt;br /&gt;Название: Итераторы библиотеки STL&lt;br /&gt;Автор: Дмитрий Рамодин&lt;br /&gt;&lt;br /&gt;Рекомендую к прочтению любому, кто осваивает язык&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2915285315162010111?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2915285315162010111/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2915285315162010111' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2915285315162010111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2915285315162010111'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/07/blog-post_27.html' title='Знакомство с итараторами'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3352887651323771239</id><published>2010-07-26T23:38:00.000-07:00</published><updated>2011-04-24T01:44:23.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API hooking'/><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Подмена dll зная CLSID КоСервера</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Исследуя недавно Windows Messenger, задался вопросом: "а как внедрить в его адресное пространство процесса свою dll ?". Именно об этом эта заметка:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1)&lt;br /&gt;Благодаря WinAPIOverride32 получаем лог вызовов функций из ole32.dll, мы&lt;br /&gt;видим создание КоОбъектов на основании GUID-ов, вот они:&lt;br /&gt;&lt;br /&gt;CoCreateInstance(rclsid: 0x7770D17C: 00000323-0000-0000-C000-000000000046&lt;br /&gt;CoCreateInstance(rclsid: 0x0006FAA8: 0C7EFBDE-0303-4C6F-A4F7-31FA2BE5E397&lt;br /&gt;CoCreateInstance(rclsid: 0x6C3513C8: 0E890F83-5F79-11D1-9043-00C04FD9189D&lt;br /&gt;CoCreateInstance(rclsid: 0x6C3512A0: 385A91BC-1E8A-4E4A-A7A6-F4FC1E6CA1BD&lt;br /&gt;CoCreateInstance(rclsid: 0x6C3AA978: 4CB26C03-FF93-11D0-817E-0000F87557DB&lt;br /&gt;&lt;br /&gt;2) &lt;br /&gt;Используя GUID-ы и запустив regedit.exe, начал искать нужную dll-ку, с наименьшим количеством функций в таблице экспорта, но чтобы содержала "DllRegisterServer". Меньшее количество экспортируемых функций, нужно для того что бы не создавать много фэйковых функций:&lt;br /&gt;&lt;br /&gt;0C7EFBDE-0303-4C6F-A4F7-31FA2BE5E397: C:\WINDOWS\system32\dxtmsft.dll&lt;br /&gt;&lt;br /&gt;Теперь заглянем в Hiew и посмотрим на экспортируемые функции:&lt;br /&gt;&lt;br /&gt;1  .6C39552E DllCanUnloadNow&lt;br /&gt;2  .6C3955B1 DllEnumClassObjects&lt;br /&gt;3  .6C39553F DllGetClassObject&lt;br /&gt;4  .6C395561 DllRegisterServer&lt;br /&gt;5  .6C395576 DllUnregisterServer&lt;br /&gt;&lt;br /&gt;Найдем еще одну, вдруг еще меньше экспортов будет:&lt;br /&gt;&lt;br /&gt;0E890F83-5F79-11D1-9043-00C04FD9189D,&lt;br /&gt;4CB26C03-FF93-11D0-817E-0000F87557DB,&lt;br /&gt;385A91BC-1E8A-4E4A-A7A6-F4FC1E6CA1BD: C:\WINDOWS\system32\dxtrans.dll&lt;br /&gt;&lt;br /&gt;1  .6C359312 ?DXConstOverArray@@YGXPAVDXPMSAMPLE@@ABV1@K@Z&lt;br /&gt;2  .6C3593D1 ?DXConstUnderArray@@YGXPAVDXPMSAMPLE@@ABV1@K@Z&lt;br /&gt;3  .6C35946E ?DXDitherArray@@YGXPBUDXDITHERDESC@@@Z&lt;br /&gt;4  .6C35923F ?DXLinearInterpolateArray@@YGXPBVDXBASESAMPLE@&amp;gt;&lt;br /&gt;5  .6C358FF0 ?DXOverArray@@YGXPAVDXPMSAMPLE@@PBV1@K@Z&lt;br /&gt;6  .6C359097 ?DXOverArrayMMX@@YGXPAVDXPMSAMPLE@@PBV1@K@Z&lt;br /&gt;7  .6C3529D0 DllCanUnloadNow&lt;br /&gt;8  .6C352A03 DllEnumClassObjects&lt;br /&gt;9  .6C3529E1 DllGetClassObject&lt;br /&gt;10  .6C353869 DllRegisterServer&lt;br /&gt;11  .6C353889 DllUnregisterServer&lt;br /&gt;&lt;br /&gt;Делаем заключение, что длл-ка с именем "dxtmsft.dll" нам больше подходит. Теперь нужно создать с точно с таким же экспортом нашу длл-ку и прописать в значении InprocServer32 свой путь. После того, как будет работать DllMain нужно определить что мы находимся именно в пространстве Windows Messenger'a и подгрузить оригинальную "dxtmsft.dll". Все, с этого момента можно начинать нашу основную работу, менять логику приложения.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3352887651323771239?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3352887651323771239/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3352887651323771239' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3352887651323771239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3352887651323771239'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/07/dll-clsid.html' title='Подмена dll зная CLSID КоСервера'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6950857705258572415</id><published>2010-07-26T22:54:00.000-07:00</published><updated>2010-07-28T20:58:36.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='ini-файл'/><category scheme='http://www.blogger.com/atom/ns#' term='развивающие задачки'/><title type='text'>Значение параметра в ini-файле</title><content type='html'>В виду того,что иногда программистам хочется размять свой мозг и сделать какие-либо упражнения, то они начинают их искать :). Приведу пример подобной задачки и я.&lt;br /&gt;&lt;br /&gt;Цель задачи: Написать реализацию функции, которая возвращает значение параметра в виде std::string.&lt;br /&gt;&lt;br /&gt;Вот прототип итоговой функции и используемого ею типа итератора:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;typedef&lt;/span&gt; std::string::iterator StrItr_t;&lt;br /&gt;std::string ExtractValue(StrItr_t &amp; p, std::string &amp; s)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Значением считать:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Одну и более строк, с возможным выделением значения в ковычки;&lt;br /&gt;2) Символом переноса на новую строку считать '\', находящийся в конце строки, до привычного нам '\n', т.е. байта 0x0A и предваренный пробелом или табуляцией;&lt;br /&gt;3) Строка начатая ковычкой, при перенесении на новую строку не выделяется повторно в ковычки на новой перенесенной строке;&lt;br /&gt;4) Символами коментария считать ';', '#' и только если значение не выделено в ковычки;&lt;br /&gt;5) Если значение взято в ковычки и встретилось s.end() значит все что успели прочитать считать результатом;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;В результат не попадают:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Ковычки, которые выделяют значение;&lt;br /&gt;2) Символы коментариев;&lt;br /&gt;3) Привычный нам символ новой строк '\n', т.е. байт равный значению 0x0A, который физически делит строки;&lt;br /&gt;4) Символ переноса '\' на следующую строку;&lt;br /&gt;5) Символ вертикальной табуляции '\t'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6950857705258572415?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6950857705258572415/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6950857705258572415' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6950857705258572415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6950857705258572415'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/07/ini_26.html' title='Значение параметра в ini-файле'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8075936222676624286</id><published>2010-07-16T02:25:00.000-07:00</published><updated>2010-07-26T23:09:59.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><category scheme='http://www.blogger.com/atom/ns#' term='ini-файл'/><title type='text'>Понимание устройства INI-файлов</title><content type='html'>Разрабатывая приложения,довольно часто сталкиваюсь с вопросом хранения настроек и конфигурирования работы приложения. Этот вопрос и стал причиной разработки класса по парсингу Ini-файла, пока мне хватает и на чтение.&lt;br /&gt;&lt;br /&gt;При изучении строения ини-файла столкнулся с тем что каждая тулза работает по своему и четкого стандарта нет! Одни программисты привыкли к одним решениям, другие к другим.&lt;br /&gt;&lt;br /&gt;Строение:&lt;br /&gt;1) Могут иметься глобальные параметры, это параметры не  принадлежащие какой-либо секции, т.е. описаны до первой секции&lt;br /&gt;2) Секции определяются названием заключенным в квадратные скобки и их значением, состоящим из параметров и их значений&lt;br /&gt;3) Параметры задаются именем и значением. Значение и имя разделяется символом '='&lt;br /&gt;4) Значения могут быть очень большими и тогда очень удобно внедрить поддержку символа '\' означающего перенос на новую строку&lt;br /&gt;5) Также для удобства сопровождения файлов существуют коментарии, как правило, это символы ';', '#'&lt;br /&gt;6) Может возникнуть ситуация, когда символы относящиеся к специальным ';', '#', '\' нужно включить поддержку ковычек. Другими словами, если значение начинается с ковычек, то считать значением все пока не найдена закрывающая, т.е. самая последняя, после которой только пробелы, табуляци или конец строки, ну или пока не закончилась строка&lt;br /&gt;&lt;br /&gt;Какие могут быть нюансы?&lt;br /&gt;&lt;br /&gt;1) В файле могут быть две секции с одинаковыми названиями?&lt;br /&gt;2) Стоит ли обрамлять в ковычки каждую новую перенесенную строку в ковычки?&lt;br /&gt;&lt;br /&gt;Рекомендуемые ссылки:&lt;br /&gt;1) &lt;a href="http://ru.wikipedia.org/wiki/.ini"&gt;".ini"&lt;/a&gt;&lt;br /&gt;2) &lt;a href="http://www.cloanto.com/specs/ini/"&gt;"Cloanto Implementation of INI File Format"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8075936222676624286?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8075936222676624286/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8075936222676624286' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8075936222676624286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8075936222676624286'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/07/ini.html' title='Понимание устройства INI-файлов'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2552116225183176967</id><published>2010-07-12T21:04:00.000-07:00</published><updated>2011-04-24T01:43:27.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='unpacking'/><title type='text'>Создание заготовки распакованного файла</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Заметка для тех кто по каким-либо причинам заинтересовался разработкой статических распаковщиков.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;После-того когда отработал код по детектированию пакера и далее следует стадия распаковки, то первым же вопросом, как правило, является : "А каким должен быть размер результирующего файла?", ведь если это криптор, то можно один в один и работать на уровне RvaToRaw\RawToRva , а если применялся алгоритм сжатия?&lt;br /&gt;&lt;br /&gt;На этот вопрос можно ответить довольно просто: а как же оно выполняется тогда? Тогда ответ: "Потому что в памяти занимает конечный размер указанный в PE-&amp;gt;OptionalHeader.SizeOfImage" будет подсказкой.&lt;br /&gt;&lt;br /&gt;Действительно, какие бы мы не применяли алгоритмы сжатия в пакере, в памяти все равно не больше SizeOfImage. Как вывод, если мы виделим размер файла в SizeOfImage байт, то этого достаточно. Замечу, что необходимо выравнять значение SizeOfImage в большую сторону на значение PE-&amp;gt;OptionalHeader.SectionAllignment.&lt;br /&gt;&lt;br /&gt;Как правило, результирующий файл принято создавать так:&lt;br /&gt;1) Запомнить смещение до оверлея в оригинальном файле - OverlayOffs&lt;br /&gt;2) Выполнить размапливание - UnmapPEFile()&lt;br /&gt;&lt;br /&gt;Сначала поясню п.2. Результат этого процесса можно сравнить с "дампингом", когда мы открываем виртуальное адресное пространство процесса, находим нужный нам образ и "дампим". Здесь же немного по-другому, но очень похоже, вот последовательность действий:&lt;br /&gt;1) Создать файл размером в SizeOfImage;&lt;br /&gt;2) Скопировать заголовок;&lt;br /&gt;3) Каждую секцию записать в файл иммитируя действия системного загрузчика, но базовым адресом считать смещение 0x0, вместо привычных нам 0x400000, 0x7E000000, etc;&lt;br /&gt;4) Переписывание секции сопровождается обновлением описателя этой секции;&lt;br /&gt;&lt;br /&gt;После выполнения этих действий получим условно названный "дамп". Отличие этого дампа от привычного нам получаемого в результате запуска процесса в том, что здесь не выполняется код, т.е. стаб пакера не отработал и данные секций еще "не попорчены".&lt;br /&gt;&lt;br /&gt;Этот процесс выполняют по двум причинам:&lt;br /&gt;1) Знаем точный окончательный размер&lt;br /&gt;2) Есть вероятность и довольно большая что упакованы не все данные, а только не значительная часть.&lt;br /&gt;&lt;br /&gt;После процесса распаковки(возможно работы декомпрессора, фильтрации, востановления релоков, импортов и т.д.) когда размер может измениться, т.е. в файл чтото добавлено, мы зная смещение оверлея просто его дописываем.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2552116225183176967?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2552116225183176967/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2552116225183176967' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2552116225183176967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2552116225183176967'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/07/blog-post.html' title='Создание заготовки распакованного файла'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6476787220360191004</id><published>2010-06-20T05:12:00.000-07:00</published><updated>2010-06-20T05:55:45.513-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><title type='text'>Организация работы приложения соглассно настройкам</title><content type='html'>Сегодня вывел для себя правило, которое можно сформулировать так:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Если приложение работает соглассно настройкам пользователя, то наиболее удобная работа с настройками может быть достигнута при разработке класса конфигуратора приложения.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Довольно часто мне приходится разрабатывать приложение работающее соглассно заданными пользователями параметрами в различных конфигурационных файлах, реестре, через командную строку, окна GUI-интерфейса. Сегодня пришел, что для того, чтобы упростить работу с настройками мне куда удобней разрабатывать для приложений класс конфигуратор cConfigurator. Этот класс будет знать как прочитать из командной строки, конфигурационных файлов, реестра или еще как сохранить в них настройки выбранные пользователем в GUI интерфейсе.&lt;br /&gt;&lt;br /&gt;Таким образом достигаю следующих целей:&lt;br /&gt;1) Буду знать где читается\сохраняется настройка из реестра;&lt;br /&gt;2) Аналогично для командной строки;&lt;br /&gt;3) Аналогично для конфигурационных файлов;&lt;br /&gt;4) Буду знать как прочитать\сохранить выбор сделанный пользователем через GUI-интерфейс;&lt;br /&gt;&lt;br /&gt;Думаю, даже в случае многопрофильной работы, когда нужно будет задавать каждому профилю свои настройке, куда удобней написать классы умеющие работать с профилями и подчинить их классу конфигуратору, т.е. сделать доступными через интерфейс класса основного приложения.&lt;br /&gt;&lt;br /&gt;ЗЫ:&lt;br /&gt;Меня опять-таки выручает мой любимый вопрос "Чего ты Дима хочешь достигнуть используя это приложение?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6476787220360191004?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6476787220360191004/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6476787220360191004' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6476787220360191004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6476787220360191004'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/blog-post_20.html' title='Организация работы приложения соглассно настройкам'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8926027306037922362</id><published>2010-06-17T14:51:00.000-07:00</published><updated>2010-06-17T15:20:27.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application design'/><title type='text'>Куда приспособить, как опцию командной строки или все же в ini-файл?</title><content type='html'>Перед теми кто разрабатывает довольно серьезный проект приложения консольного типа,  рано или поздно встает вопросы "А куда эту настройку приспобить? Может как аргумент командной строки? А может как параметр конфигурационного файла?"&lt;br /&gt;&lt;br /&gt;Для того чтобы пояснить правило получения ответов на подобные вопросы, поясню вам, что все-таки является консольным приложением на практике?&lt;br /&gt;&lt;br /&gt;Существует две категории пользователей:&lt;br /&gt;1) Одни  пользуются графическим интерфейсом и им удобней пользоваться мышью. Перемещать указатель, выбирать пункт меню на самом верху графического окна в приложении.&lt;br /&gt;2) А есть другая категория людей, которые понимают, что они могут повысить скорость своей работы, если будут набирать команды, а не "возить" туда-сюда мышь по коврику и им куда-быстрее набрать команду плюс пару опций, чем задействовать GUI.&lt;br /&gt;&lt;br /&gt;Именно в п.2. и следует искать ответ на вопрос: "а куда мне это?".&lt;br /&gt;&lt;br /&gt;Есть множество настроечных параметров для работы приложения и делятся они на две категории:&lt;br /&gt;1) Которые быстро и часто меняются&lt;br /&gt;2) И такие которые наверное один раз задал и можно больше не касаться, по крайней мере до следующего билда.&lt;br /&gt;&lt;br /&gt;К первым можно отнести "введите число для перевода его в двоичную", вот число как раз попадает под первую категорию, потому что уже через секунду может понадобиться новый результат. Ко втором можно отнести указание файлового пути к драйверу, с которым работает приложение. Думаю в случае, если разработчики и поменяют чтото в драйвере, то довольно часто оставляют тоже самое место в структуре папок своего продукта и вы можете положить туда же последний билд драйвера.&lt;br /&gt;&lt;br /&gt;Также к первым можно отнести указание URL-а по которому нужно что-то скачать, указание файла который нужно как-то обработать, указать название резултирующего файла куда ложить результат и многие другие.&lt;br /&gt;&lt;br /&gt;Пример из жизни, системная утиллита по исследованию внутренних объектов режима ядра у операционной системы. Для нее нужно написать драйвер, т.к. работая в пользовательском режиме вы врядли чего продуктивного получите, так вот драйвер редко меняет свое место расположение и поэтому его можно задать в ini-файле. Зато запрос на показание объекта, а какого, вот это уже быстро и часто меняющийся параметр к программе! Следовательно это лучше задать как опцию командной строки!&lt;br /&gt;&lt;br /&gt;Правило:&lt;br /&gt;Быстро и часто меняется ? "Да", значит в это кандидат в аргументы командной строки, если нет,то занести в качестве параметра конфигурационного файла.&lt;br /&gt;&lt;br /&gt;Замечу, что, довольно часто приложения консольного типа применяют в командных сценариях, где гибко формируются новые параметры и задаются приложениям в качестве опций. Многие системные администраторы не видят свою жизнь без приложений консольного типа, т.к. их легко прописать в командном сценарии, а последний указать в задании для планировщика операционной системы, которое периодически выполняется.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8926027306037922362?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8926027306037922362/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8926027306037922362' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8926027306037922362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8926027306037922362'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/ini.html' title='Куда приспособить, как опцию командной строки или все же в ini-файл?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6252842093585080612</id><published>2010-06-10T10:08:00.000-07:00</published><updated>2010-06-10T10:17:43.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='UAC'/><title type='text'>Windows 7 UAC whitelist</title><content type='html'>Вчера столкнулся с трудностью установки драйвера под эту систему, выполнив строчку:&lt;br /&gt;&lt;br /&gt;hSCMngr = ::OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);&lt;br /&gt;&lt;br /&gt;получил "Access is denied". Хотя ранее этот код под XP работал на УРА,  оно и не удивительно, там ведь не было UAC. Ввиду того, что пишу драйвер для утиллиты своих собственных нужд, которая будет работать исключительно на моем компе, то мне очень хочется чтобы все работало без спрашивания паролей или UAC-диалога. Начав изучать эту тему столкнулся с интересной информацией. Оказывается есть белый список ;) Насколько сейчас обстоят дела, но это весьма весьма занятная тема для размышления.&lt;br /&gt;&lt;br /&gt;Интерисующимся читать &lt;a href="http://www.pretentiousname.com/misc/win7_uac_whitelist2.html"&gt;белый лист&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Также рекомендовал поглядеть и &lt;a href="http://www.codeproject.com/KB/vista-security/RunNonElevated.aspx"&gt;High elevation can be bad for your application: How to start a non-elevated process at the end of the installation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Кстати, у кого какие мысли есть касательно запуска дров, прошу оставить коменты ниже ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6252842093585080612?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6252842093585080612/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6252842093585080612' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6252842093585080612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6252842093585080612'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/windows-7-uac-whitelist.html' title='Windows 7 UAC whitelist'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5557843784594504146</id><published>2010-06-07T06:06:00.000-07:00</published><updated>2010-06-07T06:22:35.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='polymorphic'/><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Полиморфные объекты от Microsoft</title><content type='html'>Решил сегодня поглядеть внутрь Win32k.sys через Hiew. Этот файл у меня располагается по пути:&lt;br /&gt;c:\Windows\winsxs\amd64_microsoft-windows-win32k_31bf3856ad364e35_6.1.7600.16385_none_14e86b61b437d067\win32k.sys&lt;br /&gt;&lt;br /&gt;Система win7 x64 и увидел:&lt;br /&gt;&lt;br /&gt;.FF0C3761: 666666666666660F1F840000000000 nop         [rax][rax][0]&lt;br /&gt;.FF0C3770: 66666690                       nop&lt;br /&gt;.FF0C3774: 666690                         nop&lt;br /&gt;&lt;br /&gt;Удивлению нет предела )))&lt;br /&gt;&lt;br /&gt;Причем здесь "полиморфизм"? А при том, что если вы детектили полиморфные объекты, то вы должны знать о способе детекта по мусору. Напомню, что суть детекта заключается в подсчете подозрительных(уникальных) инструкций и выдаче статуса "обнаружен", если их количество превысило допустимое значени. Думаю, теперь на лицо "подозрительная" инструкция nop :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5557843784594504146?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5557843784594504146/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5557843784594504146' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5557843784594504146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5557843784594504146'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/microsoft.html' title='Полиморфные объекты от Microsoft'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6540659145429149479</id><published>2010-06-04T11:34:00.000-07:00</published><updated>2010-06-07T03:41:03.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><title type='text'>Lazy IRQL</title><content type='html'>У меня есть эл.версия книги:&lt;br /&gt;М. Руссиновича, Д. Соломона, "Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000", 4 изд.&lt;br /&gt;&lt;br /&gt;Читаю сейчас про очень интересный механизм оптимизации называемый "Lazy IRQL" и описываемый на стр. 100 в самом последнем абзаце.&lt;br /&gt;&lt;br /&gt;Приведу абзац здесь:&lt;br /&gt;"Поскольку доступ к PIC - операция довольно медленная, в HAL, использующих PIC, реализован механизм оптимизации "Отложоенный IRQL"(LazyIRQL), который избегает обращений к PIC. Когда IRQL повышается, HAL - вместо того чтобы изменять маску прерывания - просто отмечает новый IRQL. Если вслед за этим возникает прерываание с более низким приоритетом, HAL устанавливает маску прерывания в соответствии с первым и откладывает обработку прерывания с более низким приоритетом до понижения IRQL. Таким образом, если при повышенном IRQL не повзникает прерываний с более низким проритетом, HAL не потребуется обращаться к PIC."&lt;br /&gt;&lt;br /&gt;Мне даже с n-ой итерации вдумчивого чтения не совсем стало понятны слова авторов. Уж больно туманно как-то все написано. Поэтому обратившись к Four-F получил более понятное пояснение:&lt;br /&gt;&lt;br /&gt;"Если только в общих чертах. Т.к. запись в PIC относительно медленная операция, то ядро пытается избежать её таким образом. Когда IRQL повышается, то все все прерывания с этим и более низким уровнем д.б. замаскированы и обработка их должна быть отложена до понижения IRQL. Для этого раньше тупо прописывали маску в PIC. Но если во время обработки первого прерывания больше не произойдет прерываний того же или более низкого уровня, получается что мы зря писали в PIC. Поэтому современное ядро поступает так. Оно запоминают на IRQL первого прерывания, но в PIC не пишут. Если во время обработки этого прерывания действительно происходит прерывание того же или более низкого уровня, то тогда уже ядро записывает в PIC маску, соответствующую текущему обрабатываемому прерыванию. Т.е. в этом случае работает старая схема. Ну а если другого прерывания не случается, то и вообще в PIC ничего писать не нужно. Примерно так эта хрень работает. Более детально я не знаю, ибо нафиг не нужно :)"&lt;br /&gt;&lt;br /&gt;Казалось бы вроде, слово в слово, но мне почему-то со слов Four-F более понятно стало, что же происходит?! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6540659145429149479?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6540659145429149479/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6540659145429149479' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6540659145429149479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6540659145429149479'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/lazy-irql.html' title='Lazy IRQL'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8052453626775080200</id><published>2010-06-03T06:53:00.000-07:00</published><updated>2010-06-03T07:01:53.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Использование макросов при разработке на С\С++</title><content type='html'>Наверное каждый программист разрабатыващий ПО на С\С++ писал макросы сталкивался с некоторой хитростью, которая приводит к интересному и малопонятному багу, при попытке использовать их как функции. Приведу пример, допустим есть макрос возврата минимального числа из двух:&lt;br /&gt;&lt;br /&gt;#define M_MIN(A,B) ( ((A) &lt; (B)) ? (A) : (B) )&lt;br /&gt;&lt;br /&gt;При попытке исползования в следующем коде:&lt;br /&gt;&lt;br /&gt;int a = 2, b = 4;&lt;br /&gt;int c = M_MIN(a++, b);&lt;br /&gt;&lt;br /&gt;мы почему-то получаем не то что ожидаем! Это связано с тем что подставится в проверку (2++) &lt; 4 , и потом еще раз при подстановке наименьшего ? (3++) , то есть 4 !&lt;br /&gt;&lt;br /&gt;Из этого вытекает только одно правило: не использовать макросы, а если без них никак, то не использовать их как функции!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8052453626775080200?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8052453626775080200/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8052453626775080200' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8052453626775080200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8052453626775080200'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/06/blog-post.html' title='Использование макросов при разработке на С\С++'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-1250034183710219182</id><published>2010-05-27T01:40:00.000-07:00</published><updated>2010-05-27T02:01:18.313-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Дружба VirtualKD и WinXP SP3 внутри VMware</title><content type='html'>Сегодня удалось подружить VirtualKD и WinXP SP3 поставленную в качестве гостевой системы внутри VMware.&lt;br /&gt;&lt;br /&gt;Сначала коротко о том, что же такое VirtualKD ?&lt;br /&gt;Если вы перейдете по &lt;a href="http://virtualkd.sysprogs.org/"&gt;следующей ссылке&lt;/a&gt;, то вы можете прочесть все сами, но приведу слова тут:&lt;br /&gt;&lt;br /&gt;In English:&lt;br /&gt;Welcome to the VirtualKD homepage. This project allows speeding up (up to 45x) Windows kernel module debugging using VMWare and VirtualBox virtual machines. If you have ever noticed that the standard debugging over virtual COM port is irritatingly slow, this software is for you!&lt;br /&gt;&lt;br /&gt;In Russian(от меня)&lt;br /&gt;Добро пожаловать на домашнюю страничку VirtualKD. Это проект позволяет провысить скорость(до 45x) отладки модулей ядра Windows используя виртуальные машины VMware и VirtualBox . Если Вы когда-либо замечали что стандартная отладка через виртуальный COM порт раздражающе медленная, то это программное обеспечение для Вас!&lt;br /&gt;&lt;br /&gt;Думаю теперь вам цель этого проекта понятно и можно приступить к описанию установки, настройки.&lt;br /&gt;&lt;br /&gt;1) Установить собственно Windows внутрь VMware&lt;br /&gt;2) Каким-либо способом передать архив дистрибутива внутрь гостевой системы&lt;br /&gt;3) Запустить "target\vminstall.exe" внутри этой гостевой системы&lt;br /&gt;4) Запустить на хостовой, т.е. там где стоит VMware файл "virtualkd\vmmon.exe"&lt;br /&gt;5) Через кнопку "Debugger path" указать путь к отладчику в проге vmmon.exe&lt;br /&gt;6) Перезагрузить гостевую с выбором варианта отладочной загрузки системы&lt;br /&gt;7) После выбора варианта загрузки, система остановится и не будет грузиться. Это нормально!!!&lt;br /&gt; Для этого в загруженном отладчике нужно сказать "ГОУ", для WinDBG это команда "g" в его командной строке и возможно придется два раза, пока не появится "debugging running"&lt;br /&gt;8) Система загрузилась&lt;br /&gt;&lt;br /&gt;Теперь, предпочитаю "сохраниться" ;))) Для этого надо перейти в WinDBG и выбрать в верхнем меню Debug-&gt;break. После этого гостевая "замрет" и можно нажать кнопку "save snapshot". В комантариях к снэпшоту укажите что хотите не забыть в будущем, чтобы потом не тупить )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-1250034183710219182?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/1250034183710219182/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=1250034183710219182' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1250034183710219182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/1250034183710219182'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/virtualkd-winxp-sp3-vmware.html' title='Дружба VirtualKD и WinXP SP3 внутри VMware'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5605975753892862009</id><published>2010-05-26T06:09:00.000-07:00</published><updated>2010-05-30T04:31:15.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><title type='text'>Выгрузка драйвера, условия работы DriverUnload</title><content type='html'>Выгрузка драйвера, не менее важный процесс как и его корректная инициализация.&lt;br /&gt;&lt;br /&gt;Инициализация драйвера подобна процессу создания объекта класса в С++. Когда вы создаете объект класса, то в случае, если тело конструктора корректно не отработало и некорректно завершен, тогда не следует ждать работы деструктора объекта. Он отработает только, когда корректно создан объект, читай корректно отработал конструктор. Другими словами, если вам, к примеру, нужно сделать 5 действий, а из них корректно выполнены только 4, то вы должны внутри конструктора "откатить" изменения сделанные этими 4 действиями и только тогда вы можете завершать работу конструктора бросанием исключения. Не стоит надеяться на то что в деструкторе все почистится и завершится!&lt;br /&gt;&lt;br /&gt;В модели драйверов WDM точно также, есле не отработана функция DriverEntry, т.е. не завершена кодом возврата STATUS_SUCCESS, то зарегистрированная функция DriverUnload не отработает!&lt;br /&gt;&lt;br /&gt;Еще раз подчеркну важность освобождения ресурсов на случай, если что-то пошло не так в конструкторе объекта, если это С++ или в функции инициализации драйвера!&lt;br /&gt;&lt;br /&gt;Кстати вот слова взятые &lt;a href="http://www.osronline.com/ddkx/kmarch/drvcomps_0fxj.htm"&gt;тут&lt;/a&gt;:&lt;br /&gt;"Note that a driver's Unload routine is not called if a driver's DriverEntry routine returns a failure status."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5605975753892862009?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5605975753892862009/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5605975753892862009' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5605975753892862009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5605975753892862009'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/driverunload.html' title='Выгрузка драйвера, условия работы DriverUnload'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4392225635778749612</id><published>2010-05-16T21:59:00.001-07:00</published><updated>2010-05-17T00:03:17.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hiew'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Развивая Hiew</title><content type='html'>Сбылась, мечта идиота! :))) Это я о том, что и у меня есть проект, в который можно вкладывать душу! ;) Ну а теперь все по порядку.&lt;br /&gt;&lt;br /&gt;Давным-давно, у меня была мечта учавствовать в проекте развития программного средства или системы, которое используют очень множество людей. Очень долго зрела идея помогать множеству людей, быть действительно полезным и нужным, чтобы мой труд приносил пользу как можно большему количеству народу. Шло время, а возможности реализации этой идеи все не представлялось. Буквально недавно до меня дошло как же осуществить мою затею :)&lt;br /&gt;&lt;br /&gt;До устройства на постоянную работу в ЗАО "Лабораторию Касперского"(далее ЛК) вирусным аналитиком, мне приходилось сталкиваться с анализом исполнимых файлов формата PE исключительно в личных целях, мне было интересно как устроены защиты ПО, как работают вирусы. В то время анализировал файлы только в основном с помощью небольшого множества инструментов, туда входили Hiew, OllyDebugger, PE-Tools, WinHex. Думаю, вы заметили что я не упомянул IDA Pro, потому что в то время ее не использовал, в силу сложности ее освоения, также не использовал и WinDbg. С течением времени, будучу сотрудником ЛК освоил множество других инструментов, поменялось почти полностью точка зрения на техники исследования. Страшно представить, какое количество файлов пересмотрел, проанализировал, сколько всего узнал работая вирусным аналитиком. Среди большого количества нового, интересного и полезного выделяется одна маленькая утиллита, весом не больше 200 КБ и называется она "Hiew". Именно о ней говорит множество системных программистов и реверсеров, потому что она имеет довольно простой интерфейс и множество весьма полезных возможностей.&lt;br /&gt;&lt;br /&gt;Идея заключается в том, что не только я выделяю Hiew, но и множество других вирусных аналитиков. Принимать участие в разработке плагинов, а также написание документирущих возможности инструмента.&lt;br /&gt;Именно этим и буду заниматься в ближайшее время, писать статьи и разрабатывать плагины.&lt;br /&gt;&lt;br /&gt;Приведу, пиар-инфу ;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hiew.ru/indexr.html"&gt;Ссылка на домашнюю страницу на русском&lt;/a&gt;&lt;br /&gt;&lt;a href="http://allsoft.ru/referal_reg.php?id=290"&gt;Ссылка на интернет-магазин&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;На данный, момент разработал плагин "mbytes2csrc", цель которого выделенные байты в режимах Hex, Code скопировать в буфер обмена оформленых в виде исходников на Си.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4392225635778749612?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4392225635778749612/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4392225635778749612' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4392225635778749612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4392225635778749612'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/hiew_16.html' title='Развивая Hiew'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-4499178997850689539</id><published>2010-05-08T01:42:00.000-07:00</published><updated>2010-08-08T06:11:47.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Выдираем из Hiew-листинга байты инструкций</title><content type='html'>Получил тут листинг, который ребята получили в результате копирования в режиме Code из Hiew. Чтобы удобней было анализить, т.е. юзать IDA pro и ставить коменты в ходе анализа, то написал небольшой скрипт на Perl:&lt;br /&gt;&lt;br /&gt;extract_code.pl:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;sub ParseFile&lt;br /&gt;{&lt;br /&gt;    open (SRCFILE,  $_[0])      or die "Can't open source file";&lt;br /&gt;    open (DESTFILE, "&gt;$_[1]")   or die "Can't create destination file";&lt;br /&gt;&lt;br /&gt;    while(&lt;SRCFILE&gt;)&lt;br /&gt;    {&lt;br /&gt;        chomp;&lt;br /&gt;        if(/(\.[A-F0-9]{8}: )([A-F0-9]+)(.*)/)&lt;br /&gt;        {&lt;br /&gt;            my $bin = pack('H*', $2);&lt;br /&gt;            syswrite DESTFILE, $bin;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    close(DESTFILE);&lt;br /&gt;    close(SRCFILE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ParseFile($ARGV[0],$ARGV[1]);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;extract_code.pl usage:&lt;br /&gt;  extract_code.pl &lt;source file&gt; &lt;result file&gt;&lt;br /&gt;&lt;br /&gt;Хавает листинг вида:&lt;br /&gt;.0043F3A5: 74F4                         jz          00043F39B -- 1&lt;br /&gt;.0043F3A7: 8D441812                     lea         eax,[eax][ebx][012]&lt;br /&gt;.0043F3AB: EB12                         jmps        00043F3BF -- 2&lt;br /&gt;.0043F3AD: 8D742600                     lea         esi,[esi][0]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-4499178997850689539?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/4499178997850689539/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=4499178997850689539' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4499178997850689539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/4499178997850689539'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/hiew.html' title='Выдираем из Hiew-листинга байты инструкций'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2632888371293802263</id><published>2010-05-04T00:53:00.000-07:00</published><updated>2010-05-04T00:59:15.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><title type='text'>Проверочный ли выпуск у вашей системы ?</title><content type='html'>В виду того нет тулзы, которая бы ответила бы вам на вопрос в сабже, то предлагаю применить vbs-скрипт для этой цели:&lt;br /&gt;&lt;br /&gt;1) сохраните следующее в osversion.vbs:&lt;br /&gt;&lt;начало вырезания&gt;&lt;br /&gt;strComputer = "."&lt;br /&gt;&lt;br /&gt;' WMI Connection to the object in the CIM namespace&lt;br /&gt;Set objWMIService = GetObject("winmgmts:\\" &amp; strComputer &amp; "\root\cimv2")&lt;br /&gt;&lt;br /&gt;' WMI Query to the Win32_OperatingSystem&lt;br /&gt;Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")&lt;br /&gt;&lt;br /&gt;' For Each... In Loop (Next at the very end)&lt;br /&gt;For Each objItem in colItems&lt;br /&gt;  Wscript.Echo "Caption: " &amp; objItem.Caption&lt;br /&gt;  Wscript.Echo "Debug: " &amp; objItem.Debug&lt;br /&gt;  Wscript.Echo "Version: " &amp; objItem.Version&lt;br /&gt;Next&lt;br /&gt;WSCript.Quit&lt;br /&gt;&lt;конец вырезания&gt;&lt;br /&gt;&lt;br /&gt;2) выполните в командной строке:&lt;br /&gt;cscript osversion.vbs&lt;br /&gt;&lt;br /&gt;3) Результат будет примерено таким:&lt;br /&gt;Caption: Microsoft Windows 7 Ultimate &lt;br /&gt;Debug: False&lt;br /&gt;Version: 6.1.7600&lt;br /&gt;&lt;br /&gt;4) Где "False" говорит о том, что выпуск не проверочный.&lt;br /&gt;&lt;br /&gt;Изначально о таком способе прочитал в книге Марка Руссиновича, но почему-то его скрипт не сработал на моей системе. ;( Пришлось немного видоизменить ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2632888371293802263?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2632888371293802263/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2632888371293802263' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2632888371293802263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2632888371293802263'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/blog-post.html' title='Проверочный ли выпуск у вашей системы ?'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-3449790517502638833</id><published>2010-05-02T12:50:00.000-07:00</published><updated>2010-05-02T13:03:48.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSVC2008'/><category scheme='http://www.blogger.com/atom/ns#' term='drivers development'/><title type='text'>WDK(7600.16385.1) в одной упряжке с MS Visual Studio 2008 Team Suite</title><content type='html'>&lt;p&gt;Ринг нуль!&lt;/p&gt;&lt;p&gt;Это два слова манили меня к себе как магнит притягивает к себе метал. Как влюбленный юноша по мимо воли тянется к возлюбленной. Не смог сопротивляться власти этого мира больших возможностей и я, а возможностей у кода работающего на самом низком кольце хоть убавляй. По сути твой код может кланяться только немаскируемому прерыванию, но оно так быстро отрабатывает, что это никак не мешает твоей работе.&lt;/p&gt;&lt;p&gt;Какой же вопрос встал передо мной в первую очередь? Правильно: "Как разрабатывать и  в чем?". Почитав в этой области и увидел множество разнообразных слов в виде "ddkbuild.cmd" или более старый "ddkbuild.bat" , позже натолкнулся на "ddkwizard", но только "VisualDDK" преподнесло мне те возможности какие я искал:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Создание проекта на основе шаблонов;&lt;/li&gt;&lt;li&gt;В проекте уже вставлены и добавлены нужные инклуды и либы;&lt;/li&gt;&lt;li&gt;При создании проекта создаются привычные debug , release папки;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Поэтому я рекомендую всем начинающим посетить &lt;a href="http://visualddk.sysprogs.org/"&gt;VisualDDK&lt;/a&gt; . Думаю, после установки этого продукта вам не захочется ставить что-либо другое! ;)&lt;/p&gt;&lt;p&gt;При установке меня всего-лишь спросили папку, где установлен WDK("c:\WinDDK\7600.16385.1\") и ВСЕ! Ну да и во время создания проекта указал, что нужен драйвер под Win XP ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-3449790517502638833?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/3449790517502638833/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=3449790517502638833' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3449790517502638833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/3449790517502638833'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/05/wdk7600163851-ms-visual-studio-2008.html' title='WDK(7600.16385.1) в одной упряжке с MS Visual Studio 2008 Team Suite'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-5132952181870615527</id><published>2010-04-28T04:06:00.000-07:00</published><updated>2010-04-28T04:32:22.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cryptanalysis'/><title type='text'>Надежность текстового сообщения, где каждой букве соответствует свой уникальный символ</title><content type='html'>&lt;p&gt;&lt;strong&gt;I. Введение.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Когда-то давным давно в детстве в моей школе, а если быть точным моем классе пошла мода писать шифрограммы ;) Причем каждой буковке русского алфавита ставили свой уникальный символ и далее, используя этим символы писали сообщение тем кому доверяли.&lt;/p&gt;&lt;p&gt;Нет, школа была не с каким-нить "перенаклоном", а обычного типа, с обычными детьми. Сказал бы, что была "гоп"-типа, где сущестовали "ты с какого района пацанчик?", но  это уже тема другого общения.&lt;/p&gt;&lt;p&gt;Использовали подобное написание писем, когда передавали записки друг другу. Но по причине того, что иногда мы сидели на разных рядах, приходилось передавать через посредников , скажем второй ряд, когда сам сидишь на первом, а адресат на третьем ряду.&lt;/p&gt;&lt;p&gt;Мы тогда думали, что верх надежности... Но так ли это ? ;)&lt;/p&gt;&lt;p&gt;Эта запись, покажет насколько это надежно и где это можно применять.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;П. Анализ.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Приведу еще раз метод шифрования. Если зашифровать текстовое сообщение, скажем на русском языке, где каждой букве из алфавита сопоставить уникальный символ и создать таким образом "словарь замены", а после уже все сообщении поменять на уникальные символы из алфавита,  то эта шифрование будет надежным, как правило!&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Слова применяемые в языке имеют &lt;em&gt;избыточность&lt;/em&gt; и особенность.&lt;/li&gt;&lt;li&gt;Каждая буква может &lt;em&gt;встречаться&lt;/em&gt; больше\меньше чем какая-либо другая&lt;/li&gt;&lt;li&gt;Как правило при написании предложения используются &lt;em&gt;пробелы&lt;/em&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Поясню п.1. возьмем слова "масса", "касса", как видим есть особеность "сс". Так что видя шифровки вида 1112131312 мы можем предполагать о том что "13" это возможно "с" или "н", а ведь есть слова где встречаются и "нн" ;) Замечу, что это не одна особенность русского языка, есть и другие.&lt;/p&gt;&lt;p&gt;Поясню п.2 можно взять самую большую книгу на русском языке, к примеру "Война и Мир" и подсчитать частоты встречаемости каждой буквы, в век ЭВМ и Интернет эту задачу не очень долго осуществить. Далее взяв шифро-текст, подсчитать частоты встречаемости каждого символа и можно строить предположения о каких-либо сопоставлениях символов с буквами, а учитывая при этом п.1 это еще и помогает ;)&lt;/p&gt;&lt;p&gt;Поясню п.3 при проделаных п.2 и п.1 моно выявить предлоги, можно также выделить, где начинаются слова и где они заканчиваются.&lt;/p&gt;&lt;p&gt;Дальше дело техники.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;III. Че ваще никогда не юзать что-ли ?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Этот вид шифрования надежен только тогда, когда встречается мало нюансов и текст шифруемого сообщения не имеет большой длины.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-5132952181870615527?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/5132952181870615527/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=5132952181870615527' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5132952181870615527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/5132952181870615527'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/04/blog-post.html' title='Надежность текстового сообщения, где каждой букве соответствует свой уникальный символ'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-2480258347496803597</id><published>2010-04-17T08:32:00.000-07:00</published><updated>2010-06-07T03:42:41.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PEB'/><category scheme='http://www.blogger.com/atom/ns#' term='kernelbase.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel32.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='Внутренности Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='System loader'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows7'/><title type='text'>Получение адреса загрузки Kernel32 через PEB</title><content type='html'>&lt;p&gt;Всем до боли знакомый способ получения адреса загрузки динамической kernel32.dll посредством доступа к PEB:&lt;/p&gt;&lt;p&gt;.code:0040100A 64 A1 30 00 00+ mov eax, large fs:30h&lt;br /&gt;.code:00401010 8B 40 0C mov eax, [eax+0Ch]&lt;br /&gt;.code:00401013 8B 40 1C mov eax, [eax+1Ch]&lt;br /&gt;.code:00401016 8B 00 mov eax, [eax]&lt;br /&gt;.code:00401018 8B 40 08 mov eax, [eax+8]&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;После свой работы на Windows 7 x64, поверг меня немного в изумление ;) по найденому адресу распологается совсем другая динамическая библеотека, это kernelbase।dll. Нет, я конечно слышал об отличиях, но столкнулся на практике только сегодня )))&lt;/p&gt;&lt;p&gt;Об этом можно почитать &lt;a href="http://blog.harmonysecurity.com/2009/06/retrieving-kernel32s-base-address.html"&gt;тут&lt;/a&gt; и &lt;a href="http://skypher.com/wiki/index.php/Hacking/Shellcode/kernel32"&gt;здесь&lt;/a&gt; . Весьма ясно и не противоречиво написанно чего и где находится и как искать нужное ! ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-2480258347496803597?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/2480258347496803597/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=2480258347496803597' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2480258347496803597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/2480258347496803597'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2010/04/kernel32-peb.html' title='Получение адреса загрузки Kernel32 через PEB'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-7844591315908516985</id><published>2009-10-07T02:44:00.000-07:00</published><updated>2010-05-03T03:35:04.754-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='polymorphic'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Obfuscated objects. Names for and URLs to Articles only</title><content type='html'>Тут будут публиковать ссылки на источники для тех, кто интересуется устройством вредоносных объектов содержащих полиморфный и метоморфный код, а также методами борьбы с подобными исчадиями ада.&lt;br /&gt;&lt;br /&gt;[!!!]Будьте осторожны, по ссылкам может оказаться вредоносная программа, поэтому лучше скачайте wget'ом и посмотрите что залилось в Hiew и только потом уже юзайте.&lt;br /&gt;&lt;br /&gt;На английском:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Stephen Pearce. "Viral Polymorphism" . &lt;a href="http://vx.netlux.org/lib/asp00.html"&gt;vx.netlux.org/lib/asp00.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Quazah. "Do polymorphism". &lt;a href="http://vx.netlux.org/lib/static/vdat/tumisc76.htm"&gt;http://vx.netlux.org/lib/static/vdat/tumisc76.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Quazah. "Polymorphism and grammars" . &lt;a href="http://vx.netlux.org/lib/static/vdat/tupolgra.htm"&gt;vx.netlux.org/lib/static/vdat/tupolgra.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Lord Julus. "Polymorphism - analysys on the decryptor generator" . &lt;a href="http://vx.netlux.org/lib/static/vdat/tupolydg.htm"&gt;vx.netlux.org/lib/static/vdat/tupolydg.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Arun Lakhotia, Moinuddin Mohammed . "Improsing Order on Program Statements to Assist Anti-Virus scanners" . &lt;a href="http://vx.netlux.org/lib/aal01.html"&gt;vx.netlux.org/lib/aal01.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;"Understanding and Managing Polymorphic Viruses" . &lt;a href="http://www.symantec.com/avcenter/reference/striker.pdf"&gt;www.symantec.com/avcenter/reference/striker.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rou Ando. "Paralell analysis of polymorphic viral code using automated deduction system" . &lt;a href="http://www2.nict.go.jp/y/y212/ruo/pdfs/SNPD07_RuoAndo.pdf"&gt;www2.nict.go.jp/y/y212/ruo/pdfs/SNPD07_RuoAndo.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Peter Szor, Peter Ferrie . "Hunting for metamorphic" . &lt;a href="http://www.symantec.com/avcenter/reference/hunting.for.metamorphic.pdf"&gt;http://www.symantec.com/avcenter/reference/hunting.for.metamorphic.pdf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Evgenios Konstaninou . "Metamorphic virus: Analysis and detection" . &lt;a href="http://www.ma.rhul.ac.uk/static/techrep/2008/RHUL-MA-2008-02.pdf"&gt;http://www.ma.rhul.ac.uk/static/techrep/2008/RHUL-MA-2008-02.pdf&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;На русском:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Billy Bolcebu. "Путеводитель по написанию вирусов: 7. Полиморфизм" . &lt;a href="http://www.wasm.ru/print.php?article=1006009"&gt;www.wasm.ru/print.php?article=1006009&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Billy Bolcebu. "Путеводитель по написанию вирусов под Win32: 9. Win32-Полиморфизм" . &lt;a href="http://www.wasm.ru/print.php?article=vgw09"&gt;www.wasm.ru/print.php?article=vgw09&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Trigger/SLAM. "Путеводитель идиота по написанию полиморфных движков" . &lt;a href="http://www.wasm.ru/print.php?article=1006100"&gt;www.wasm.ru/print.php?article=1006100&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slon . "Полиморфизм. Новые техники" . &lt;a href="http://www.wasm.ru/print.php?article=polimorf"&gt;www.wasm.ru/print.php?article=polimorf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;slon . "Построение простого EPO-мотора" . &lt;a href="http://www.wasm.ru/print.php?article=epoengine"&gt;www.wasm.ru/print.php?article=epoengine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Billy Bolcebu . "Метаморфизм (часть1)" . &lt;a href="http://www.wasm.ru/print.php?article=mmei"&gt;www.wasm.ru/print.php?article=mmei&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Billy Bolcebu ."Метаморфизм (часть2)" . &lt;a href="http://www.wasm.ru/print.php?article=mmeii"&gt;www.wasm.ru/print.php?article=mmeii&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mentall Driller. "Создание продвинутых полиморфных движков" . &lt;a href="http://www.wasm.ru/print.php?article=advpoly"&gt;www.wasm.ru/print.php?article=advpoly&lt;/a&gt;&lt;/li&gt;&lt;li&gt;zOmbie . "Метаморфизм. Часть 1" . &lt;a href="http://z0mbie.daemonlab.org/meta1.html"&gt;z0mbie.daemonlab.org/meta1.html &lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-7844591315908516985?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/7844591315908516985/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=7844591315908516985' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7844591315908516985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/7844591315908516985'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2009/10/obfuscated-objects-only-name-and-urls.html' title='Obfuscated objects. Names for and URLs to Articles only'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-946050644164610425</id><published>2009-08-12T11:23:00.000-07:00</published><updated>2011-04-24T01:45:27.087-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='API hooking'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Перехват Win32 API функций в привязанных PE-файлах</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;Цель:&lt;/b&gt;&lt;br /&gt;Показать два вида хука в привзязанных по импорту PE32-файлах.&lt;br /&gt;&lt;b&gt;Задачи:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Пояснить что такое привязанный файл;&lt;/li&gt;&lt;li&gt;Показать способ создания привязанного файла;&lt;/li&gt;&lt;li&gt;Описать установку хука функций в привязанных файлах;&lt;/li&gt;&lt;li&gt;Перечислить условия срабатывания Хук-функции;&lt;/li&gt;&lt;li&gt;Указать на важность обнаружения таких хуков в файлах;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div align="justify"&gt;&lt;b&gt;&lt;a name='more'&gt;&lt;/a&gt;Работа системного загрузчика:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Прежде чем приступить к описанию сути, приведу упрощенную схему загрузки исполнимого модуля в адресное пространство процесса:&lt;br /&gt;&lt;ol align="justify"&gt;&lt;li&gt;Выделяет память размером в PE-&amp;gt;OptionalHeader.SizeOfImage байт. Загручик пытается выделить память по предполагаемому адресу указанному в PE-&amp;gt;OptionalHeader.ImageBase (далее по тексту IB); &lt;/li&gt;&lt;li&gt;В выделенную память проецируются данные секций из файлового образа;&lt;/li&gt;&lt;li&gt;Затем происходит проверка значений IB и адреса выделенной памяти(далее hInstance);&lt;/li&gt;&lt;li&gt;Настройка адресов импортируемых функций из других модулей;&lt;/li&gt;&lt;li&gt;При наличии разницы меж адресами в п.3 происходит фиксание кода используя таблицу перемещаемых элементов, при ее отсуствии приложение не загружается;&lt;/li&gt;&lt;/ol&gt;&lt;div align="justify"&gt;Следует заметить, что первым в пространство процесса сначала процеруется не сам исполнимый модуль, который запущен на выполнение, а все его импортируемые модули. А перед этими импортируемыми молудулями, загрузчик просаматривает зависимости на наличие у них своих импортируемых модулей. В случае нахождения грузятся первыми их импортируемые модули и т.д. до первого модуля, который ничего не импортирует!&lt;/div&gt;&lt;div align="justify"&gt;&lt;b&gt;Привязки:&lt;/b&gt;&lt;/div&gt;&lt;div align="justify"&gt;В целях оптимизации при запуске файла был разработан механизм "привязывания"(англ. binding). Этот механизм позволяет исключить настройку адресов импортируемых функций из других модулей при соблюдении некоторых условий загрузки.&lt;/div&gt;&lt;div align="justify"&gt;Эти условия таковы:&lt;/div&gt;&lt;ul&gt;&lt;li align="justify"&gt;hInstance и IB импортируемого модуля одинаковы;&lt;/li&gt;&lt;li align="justify"&gt;&lt;i&gt;TimedateStamp&lt;/i&gt; в описателе IMAGE_BOUND_DESCRIPTOR-е совпадает с &lt;i&gt;TimedateStamp&lt;/i&gt;&lt;b&gt; &lt;/b&gt;импортируемого модуля;&lt;/li&gt;&lt;/ul&gt;&lt;div align="justify"&gt;Когда эти условия выполнены процесса настройки адресов импортирумых функций не происходит.&lt;/div&gt;&lt;div align="justify"&gt;Да и зачем настраивать, если все лежит по тем местам, где и предполагалось?&lt;/div&gt;&lt;div align="justify"&gt;Ошибочно полагать, что если эти условия не соблюдены, то файл не загрузится.  Нет. Это не так, файл будет загружен, потому что произойдет процесс настройки адресов.&lt;/div&gt;&lt;div align="justify"&gt;Виды привязок:&lt;/div&gt;&lt;ol&gt;&lt;li align="justify"&gt;Старый(англ. old binding);&lt;/li&gt;&lt;li align="justify"&gt;Новый(англ. new binding, bound);&lt;/li&gt;&lt;/ol&gt;&lt;div align="justify"&gt;&lt;b&gt;Получение привязанных файлов:&lt;/b&gt;&lt;/div&gt;&lt;div align="justify"&gt;Оба типа привязок можно получить с помощью утиллиты &lt;i&gt;&lt;b&gt;bind.exe&lt;/b&gt;&lt;/i&gt; входящей в MS Platform SDK, MSDN. Применяя эту тулзу к файлу без указания каких-либо ключей вообще мы можем получить второй вид привязки - новый. Применив ключ "-o" к файлу, мы получим первый вид привязки - старый.&lt;/div&gt;&lt;div align="justify"&gt;&lt;b&gt;Определение привязки:&lt;/b&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Для новой привязки это наличие директории Bound, расположенной по адресу PE-&amp;gt;OptionalHeader.DataDirectory[11].VirtualAdress и наличию значения 0xFFFFFFFF в IMAGE_IMPORT_DESCRIPTOR.TimedateStamp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Для старой значение IMAGE_IMPORT_DESCRIPTOR.TimedateStamp отличного от 0x0 и 0xFFFFFFFF;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="justify"&gt;&lt;b&gt;Установка хука:&lt;/b&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div align="justify"&gt;Привязать файл с помощью &lt;b&gt;&lt;i&gt;bind.exe&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Найти адрес импортируемой фукнции в IAT (IMAGE_IMPORT_DESCRIPTOR-&amp;gt;FirstThunk), на которую требуется установить хук;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Поставить в найденном элементе IAT свой адрес;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;В коде по своему адресу, по окончании работы выполнить переход по оригинальному адресу;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div align="justify"&gt;&lt;b&gt;Поиск хука:&lt;/b&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Определить наличие привязки;&lt;/li&gt;&lt;li&gt;Каждый адрес в IAT проверять на попадание в диапазон адресов от IB до IB+PE-&amp;gt;OptionalHeader.SizeOfImage;&lt;/li&gt;&lt;li&gt;В случае обнаружения такого адреса мы получаем адрес перехваченной функции;&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Важность:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Прежде всего следует отметить что зловреды современности не толко стараются применять разнообразные полиморфные генераторы, для усложнения анализа и обнаружения продуктами ИБ, но и спрятать факт перехода на код инжектируемых данных. Тот факт, что настройка адресов импортируемых функций может произойти, а может и нет говорит о том, что воспроизвести ситуацию, какая была у пользователя весьма не тривиальна. Выход один, добавить функционал обнаружения перехваченных АПИ-шек в свои тулзы, как флажок ;)&lt;/li&gt;&lt;li&gt;Не могу утверждать, что все продукты современных антивирусов знают о старом и новом способах привязки и следовательно перехвате.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-946050644164610425?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/946050644164610425/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=946050644164610425' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/946050644164610425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/946050644164610425'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2009/08/win32api.html' title='Перехват Win32 API функций в привязанных PE-файлах'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-8483247569698365587</id><published>2009-07-26T21:03:00.000-07:00</published><updated>2009-10-07T08:13:23.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Виртуальная машина в keygenme от Ms-Rem</title><content type='html'>&lt;p&gt;&lt;strong&gt;Введение:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Те кто в теме, кто знает и слышал никнэйм Ms-Rem думаю слышали и о его детище-головоломке игрушке кейгенми цель, которого предоставить реверсеру офигенный навык по работе с виртуальными машинами. Итак все по порядку:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;Цель кейгенми:&lt;/strong&gt;&lt;br /&gt;Разработать приложение которое на заданное имя пользователя сгенерирует последовательность цифр,называемую серийным номером. Введя эти данные в Edit'ы кейгенми получить "Congratiolations"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Уровни защиты:&lt;/strong&gt;&lt;br /&gt;1. Уровень защиты это небольшая и не сложная полиморфная паковка, снимаемая на глаз.&lt;br /&gt;2. Алгоритм работы скрыт в командах придуманого разработаного интерпретатора этих команд, т.е.виртуальной машины.Именно в логике этих команд и скрыт механизм генерации фраз поздравления или посыла крякера, а также проверке введенных данных.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Краткое описание виртуальной машины:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Машина очень напоминает математический абстрактный аппарат Машина Тьюринга, а также язык так называемый "брайнфак". В логике ВМ всего 8 команд и своя виртуальная память.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Обозначения:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;eax - выступает в роли указателя на команду&lt;br /&gt;lpVMMem - указатель на виртуальную память&lt;br /&gt;lpInput - указатель на введенные пользователем данные&lt;br /&gt;lpOutput - указатель на то куда будет ложиться результирующая строка, о результате сверки, затем толи вас пошлют, либо поздравят )&lt;br /&gt;&lt;br /&gt;Описание:&lt;br /&gt;&lt;br /&gt;Размер виртуальной программы - 0x3DA2 байт!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;0 - увеличение на 1 численного значения указателя на виртуальную память&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1 - уменьшение на 1 численного значения указателя на виртуальную память&lt;br /&gt;&lt;/li&gt;&lt;li&gt;2 - увеличение на 1 численного значения байта по указателю на виртуальную память&lt;br /&gt;&lt;/li&gt;&lt;li&gt;3 - уменьшение на 1 численного значения байта по указателю на виртуальную память&lt;br /&gt;&lt;/li&gt;&lt;li&gt;4 - копирование одного байти из входной последовательности в позицию виртуальной памяти куда указывает указатель на вирт. память. После увеличиваем на 1 указатель входных данных&lt;br /&gt;&lt;/li&gt;&lt;li&gt;5 - копирование одного байта из вирт.памяти в память по указателю выходных данных. Затем увеличение на 1 указателя выходных данных&lt;br /&gt;&lt;/li&gt;&lt;li&gt;6 - В случае если по указателю вирт. памяти хроанится 0, то вычисляется новое смещение и осуществляется переход&lt;br /&gt;&lt;/li&gt;&lt;li&gt;7- В случае если по указателю вирт. памяти байт не равен 0, то вычисляется новое смещение и осуществляется переход&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;Выводы:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;При просмотре кода вирт программы можно сделать выводы:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Существует одна инструкция "5" значит и выполняется несколько роза, т.е. ЦИКЛ. Тоже самое с "4" !&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Из-за обилия инструкций "2" и двух "0" можно сделать вывод что это генерация юникод-строк с фразами результата в вирт. памяти.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Нет проверки аналогично cmp в привычной нам хакерам свято верящих в x86-64 архитектуру и следовательно защита может только проверить какие-то байты введенных байт, командами "6" или "7"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;В силу. п3 защита может вычислеть такое значение значение указателя на вирт. память, где хранится строка с результатом!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Все! ;) Остается пожелать удачи тем, кто хочет попробовать силы и найти ответ на вопрос : "Как именно защита вычесляет значение указателя на строку с правильным результатом ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-8483247569698365587?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/8483247569698365587/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=8483247569698365587' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8483247569698365587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/8483247569698365587'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2009/07/keygenme-by-ms-rem.html' title='Виртуальная машина в keygenme от Ms-Rem'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5566599040270542169.post-6081555696664143224</id><published>2009-07-25T12:00:00.000-07:00</published><updated>2009-10-07T08:16:22.423-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Virtual Machine of RLPack v1.20.1full</title><content type='html'>&lt;strong&gt;Цель:&lt;/strong&gt;&lt;br /&gt;Показать устройство виртуального процессора , который используется в опции "Виртуализация кода" RLPack v1.20.1f&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Описание:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Одна виртуальная машинная инструкция описывается структурой из трех DWORD-ов,где 1-й это код операции, а два втоорых дополнительных, которые могут иметь коды регистров, значения смещений, константы. В программном представлении можно воспользоваться следующей структурой:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;typedef&lt;/strong&gt; &lt;strong&gt;struct&lt;/strong&gt; _RLPK_VM_INSTR {&lt;br /&gt;DWORD Type;&lt;br /&gt;DWORD Field_4;&lt;br /&gt;DWORD Field_8;&lt;br /&gt;} RLPK_VM_INSTR, *PRLPK_VM_INSTR;&lt;br /&gt;&lt;br /&gt;Условием завершения потока виртуальных иструкций является значение 0 в очередном экземпляре RLPK_VM_INSTR.&lt;br /&gt;&lt;br /&gt;Всего имеется 27 различных видов инструкций и 24 кода для регистров.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Кодировка регистров и их соответствие в нашей "родной" x86-архитектуре:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ESI - 0x06, 0x15&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EDI - 0x05, 0x16&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EBP - 0x07, 0x17&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ESP - 0x08, 0x18&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EAX - 0x01, 0x09, 0x0A, 0x0B&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EBX - 0x02, 0x0C, 0x0D, 0x0E&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ECX - 0x03, 0x0F, 0x10, 0x11&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EDX - 0x04, 0x12, 0x13, 0x14&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Кодировка инструкций и их соотвествие в нашей привычной и родной нам x86-архитектуре:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;0x1 - MOV EBP,ESP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x2 - PUSH NUM // NUM - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x3 - PUSH REG // REG - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x4, 0x5 - ADD REG, NUMBER // REG - Field_4, NUM - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x6 - MOV REG,NUM // REG - Feld_4, NUM - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x8 - MOV REG,FS:[0] // REG - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x9 - MOV FS:[0],REG // REG - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0xA - MOV REG2,[REG] // REG - Field_4, REG2 - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0xB - MOV [ADDR],REG // REG - Field_8, ADDR - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0xC - CALL ADDR // ADDR - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0xD - MOV REG,[ADDR] // REG - Field_4, ADDR - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x10 - MOV REG2, REG1 // REG1 - Field_4, REG2 - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x11 - CALL [ADDR] // Address - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x12 - PUSH DWORD[FS:0] // no comments :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x14 - POP REG // REG - Field_4&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x17 - MOV [REG2],REG // REG - Field_4, REG2 - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x18 - VM_RET // Детализация будет позже ;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x19, 0x1A - MOV [ADDR],NUM // ADDR - Field_4 ,NUM - Field_8&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x1B - MOV REG,[REG2+NUM] // REG - Field_4, REG2 = Field_8 &gt;&gt; 2, NUM = Field_8 &amp;amp; 0xFFFF&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;--- Есть еще команды, опишу в следующий раз, ждите продолжения )))&lt;br /&gt;&lt;br /&gt;Виртуализация:&lt;br /&gt;&lt;p&gt;Работа пакера делится:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;виртуализация вызова функций напрямую&lt;br /&gt;&lt;/li&gt;&lt;li&gt;виртуализация подряд идущего, т.е. аналогично INLINE применяемого компиляторами.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Если встречается функция в которой пакер не может какую-нить инструкцияю обработать, то он вызывает эту функцию полностью. К примеру такой фунцией может быть Win32 API.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Если встречается инструкция которую не может обработать и это не в функции, то на этом месте виртуализация завершается и пакер просто в конечном итоге ставит сюда прыжок после работы виртуализатора в стабе&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5566599040270542169-6081555696664143224?l=ntvisigoth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ntvisigoth.blogspot.com/feeds/6081555696664143224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5566599040270542169&amp;postID=6081555696664143224' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6081555696664143224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5566599040270542169/posts/default/6081555696664143224'/><link rel='alternate' type='text/html' href='http://ntvisigoth.blogspot.com/2009/07/virtual-machine-of-rlpack-v1201full.html' title='Virtual Machine of RLPack v1.20.1full'/><author><name>The NT Visigoth</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-kCf2ILtRB-8/TXeAjlo7GuI/AAAAAAAAADI/rfdCEo0qwz8/s220/beastea.png'/></author><thr:total>0</thr:total></entry></feed>
