Вчера вопрос «Как выйти из редактора Vim?», опубликованный в 2012 году, достиг рекордного количества просмотров: 1 000 000. В честь этого события на Stack Overflow провели исследование и выложили статистику, которая иллюстрирует популярную проблему.

Почему не получается выйти?

Причины обычно две: человек попадает в Vim неожиданно для себя (его туда забрасывает консоль или стороннее приложение) и / или он заходит туда настолько редко, что каждый раз забывает, как закрыть программу. Читать

Взлом PS4

Практически с самого появления этой приставки, слежу за успехами хацкеров в исследовании ее защиты. Надо сказать, что слежу я не один. Т.к. игры стоят не дешево, а с ростом курса доллара …. так вообще полный $#$#ец.

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

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

Например, т.к. на данный момент нет возможности записать код в память и выполнить его, то для выполнения своего кода используют технику ROP (Return oriented programming), вот как это можно описать простыми словами:

Понять ROP вам поможет следующая метафора.

Представьте, что вы пишете новую главу в книге, при этом пользуясь исключительно теми словами, которые стояли в концах предложений предыдущих глав. Очевидно, что в силу принципов конструкции фраз вы едва ли встретите слова «and» или «or» в конце одного из предложений — но нам потребуются эти соединительные элементы, если мы хотим написать что-нибудь осмысленное.

Вполне возможно, однако, что одно из предложений завершилось на слове «sand». И, хоть по авторскому замыслу мы и должны прочитать это слово целиком начиная с буквы «s», если мы начнем свое чтение с «a», то по чистой случайности получим совсем другое слово — «and», что нам и требовалось.

 

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

На днях была новость, что в skype скоро появится функция синхронного перевода, т.е. при разговоре с иностранцем его речь будет автоматом переводиться на ваш родной язык.

Мне попутно такая мысль пришла, что в недалеком будущем, будет, например в watsapp можно будет включить озвучку сообщений от контактов голосом, и не простым, а например для каждого контакта можно будет выбрать голос. Один кореш тебе голосом Джигурды вещает, и другой голосом Жирика, или Горбачева.

Мало того, если учитывать, что скайп преобразовывает речь в текст, затем его переводит, а затем озвучивает, то что мешает каждому контакту назначить «скин»? Например присоеденить контакту корефана «скин» того же Жирика, и когда он тебе звонит, его голос будет преобразовываться в текст, затем обрабатываться с учетом «скина», например добавляя характерные для Жирика фразы и обороты, и затем озвучивать его речь. Т.е. в результате ты будешь говорить с жириком?!! Или наоборот, он будет с ним пиздеть )))

 

Думаю лет через 10, а может и раньше это будет реально.

Занимательная археоелогия

Прочитал на хабре статью, автор которой проанализировал исходники DOS 1.1 и WORD 1.1a.  Много интересного для себя открыл. Пересказывать не буду, оригинал можно почитать тут: http://habrahabr.ru/company/pvs-studio/blog/217921/

В книге «Хакеры: Герои компьютерной революции», объясняется, что основное занятие хакеров — это написание инструментов для написания инструментов, для того чтобы делать «правильные вещи». И тут я не опечатался. Прикол в том, что ни один смертный этой работы не ощущает. Далеко не каждый программист способен ощутить, как много эти люди делают для индустрии программного обеспечения. Почему я так подумал? Да элементарно! С какой легкостью СЕГОДНЯ с помощью современного ИНСТРУМЕНТА человек сумел оперативно найти кучу недоработок в немаленькой программе, которую писал не один человек, и не два…

А ведь и сейчас есть такие же хакеры (слово заезженное, поэтому, в современных реалиях имеет несколько искаженный смысл), которые делают инструменты, что бы делать инструменты… Двигающие ту самую Computer Scienсe, но результат работы которых мы сможем ощутить не скоро…

Для того, что бы понять это, почувствовать, нужно много лет. В общем занятие не для любителей славы и известности.

JSP и include

В jsp есть два вида include.
Первый — <jsp:include page=»uri»/>
Второй — <%@include file=»uri»%>

В книгах и в документации много разного понаписано по этому поводу, чаще всего пишут, что тегом подключается статическая страница, а директивой — страница с jsp. Но это фигня.

Вот самое лучшее объяснение, которое я нашел:

Перед выполнением, jsp страницы компилируются контейнером. После компиляции директивы вида:

<@include file="reuse.html">

при дезассемблировании, получим:

out.write("<html>\r\n");
out.write("    <head>\r\n");
out.write("        <title>reusable</title>\r\n");
out.write("        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write("    </head>\r\n");
out.write("    <body>\r\n");
out.write("        <img src=\"candle.gif\" height=\"100\" width=\"50\"/> <br />\r\n");
out.write("        <p><b>As the candle burns,so do I</b></p>\r\n");
out.write("    </body>\r\n");
out.write("</html>\r\n");

Читать

Рекурсивные папки FAT32

Ниже приведены два интересных и в тоже время простых опыта с Fat’ом и WinHex’ом.
Сам материал, возможно, не имеет большого практического значения, интересен сам подход,
познания скрытых возможностей системы путём бесшабашного экспериментирования с ней. Собственно, я полагаю,
именно такие вот детские опыты и разжигают у людей интерес к более глубокому изучению работы системы.

Нестандартные имена

Итак, мы имеем флешку, размером 8Гб:
image Читать

Как уронить Windows шестью строчками кода

Однажды один знакомый рассказал мне про одну уязвимость в Windows. А именно из-за нее можно легко вызвать синий экран смерти шестью строчками кода на Си. Причем программа не требует никаких прав администратора и вызывает только одну функцию масштабирования окна.



Читать

Путешествия во времени и программирование

Сейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы.

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

NAT: Ничего не бывает столь постояным, как временное.

Эпиграф

Хорошее резюме проблемы NAT сделали Google: «NAT devices, increasingly popular in homes and offices, allow multiple machines to share a single Internet address. Consequently, it becomes more and more difficult for applications such as voice chat, which require peers to directly address each other, to make a peer-to-peer connection reliably.» (NAT-устройства, популярность которых растет в домах и офисах, позволяют нескольким машинам совместно использовать один интернет-адрес. В результате таким приложениям как голосовой чат, требующим прямой адресации сторон, все сложнее и сложнее создавать надежные соединения точка-точка.)

История NAT

Сначала несколько слов об истории появления необходимости в проксировании / гейтировании / туннелировании в интернете, тогда яснее станут возможности разных подходов и их «иерархия». Как известно, нехватка IP-адресов в 4-байтовом адресном пространстве прогнозировалась еще в начале 90х годов (плюс нехватка денег на аренду адресных блоков в некоторых компаниях). Поэтому уже в марте 1994 г договорились об адресном «сегментировании» общего пространства — выделении для локальных сетей отдельных диапазонов IP-адресов и исключение этих IP-адресов из использования в интернете (http://www.ietf.org/rfc/rfc1597.txt March 1994 Address Allocation for Private Internets; цитата о назначении этого документа «Авторы надеются, что использование этих методов приведет к значительной экономии при выделении IP адресов»). Это решение позволило выделять компаниям небольшие блоки IP-адресов — для их интернет-серверов, а внутри ЛС IP-адреса для собственных нужд выделялись самими компаниями из диапазонов для локальных сетей. В результате интернет-серверы компаний (почтовые и www/ftp) были легко доступны как из интернета, так и из ЛС, и внутри ЛС компьютеры без проблем связывались по таким же IP-протоколам. Но это решение воздвигло барьер между локальными сетями и интернетом: т.к. один и тот же IP-адрес мог использоваться в разных ЛС, и т.к. по этой причине в интернете перестали маршрутизировать пакеты на адресные блоки, выделенные для ЛС. Т.е. фактически «физический барьер» (без перерубаний проводов, чем развлекались в российских банках после первых взломов, и без установки FireWall, чем увлекаются сейчас). Сети стали изолированными, как изолированы задачи в современных операционных системах — у каждой своё адресное пространство. Этот барьер не представлял проблемы для почты, т.к. почтовые серверы предприятий ставились на границе сетей и были видимы и из интернета, и из ЛС. А вот с доступом из ЛС к внешним ресурсам — к ftp и еще только набирающим в те годы популярность http-серверам начались проблемы. Если раньше с любого компьютера можно было напрямую взаимодействовать с сервером, то теперь эта возможность осталась у компьютеров только с реальными интернет-адресами, т.к. в какую ЛС слать ответ на IP-пакет, у которого в обратном адресе стоит локальный IP — роутер определить не сможет.
Читать

Профилактика SQL-инъекций

SQL-инъекции (также известные как «Нарушение в целостности структуры SQL-запроса») являются одними из самых распространённых и наиболее опасных уязвимостей в вопросе безопасности. SQL-инъекции очень опасны, потому что они открывают двери хакерам в вашу систему через веб-интерфейс, и позволяют получить неограниченный доступ: например удалять таблицы, изменять базу данных, и даже получить доступ к внутренней корпоративной сети. SQL-инъекции это чисто программная ошибка, и не имеет ничего общего с хост-провайдером. Итак, вы занимались поисками безопасного JSP хостинга, PHP хостинга, или любого другого, вы должны знать, что за профилактику SQL-инъекций несут ответственность только разработчики, а не хост провайдер.

Читать