четверг, 19 мая 2011 г.

Для самых маленьких. Точка входа


Продолжая переводить пост Марка Руссиновича, столкнулся с еще одним термином – Точка Входа. Заостряю Ваше внимание на терминологии. Если есть желание стать профессионалом в той или иной области, то надо начинать с грамотного и точного употребления терминологии – ну путайте, пожалуйста, терминологию со сленгом. Употребления сленга (профессионализмов – как принято говорить) не показывает, что человек профессионал в этой области, это быстрее показывает на то, что человек не владеет терминологией. Имейте это ввиду. Итак,

Точка входа — адрес в оперативной памяти, с которого начинается выполнение программы. Другими словами — адрес, по которому хранится первая команда программы. Однако не надо путать ее с «первыми командами» программы на языке высокого уровня. Например программа на C++ начинает выполнение с функции «main()», на самом деле, программа в памяти начинается далеко не с первой команды функции «main()».

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

Это все, что надо знать про точку входа, для чтения поста Марка Руссинович. Да прибудет с Вами сила!

воскресенье, 8 мая 2011 г.

Для самых маленьких. Реверс-инжиниринг


Работа над очередным переводом поста Марка Руссиновича обозначила необходимость создания нового поста в рубрику «Для самых маленьких». Лично я очень люблю эту рубрику: зачастую мы мало времени уделяем основам, а потом, как результат, говорим на разных языках, вкладывая в одни и те же термины совершенно разные значения. А знание терминов, я отношу к базовым знаниям предметной области.

Часто, принимая экзамен, хочется для себя уяснить, а что же этот человек знает или он вообще хоть что-то знает, и спрашиваешь терминологию…

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

Итак, сегодня у нас на повестке дне вопросы, связанные с обратной инженерией. Интересно? Тогда – поехали:

Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.

Вопрос плагиата оставляем за кадром. Как говорит одни из моих учителей: «Если ты скопировал и вставил, не читая, - это плагиат, а если прочитал, осмыслил, изложил своими словами – это уже уровень курсовой работы».

Суть реверс-инжиниринг в программировании – взять готовую программу и получить ее исходный код - так называемый листинг.

Задача классического программирования, того, которое мы проходим в школах, институтах – написать код, получить из него работающую программу. Для чего решать обратную задачу, ну тут уже у каждого свои цели: не в далеком прошлом обратный инжиниринг применяли для взлома лицензионных программ. Я же призываю использовать его исключительно в светлых целях.

Поехали дальше: надеюсь, все знают, какой путь проходит код прежде чем стать рабочей программой. В общих чертах такой: код на языке высокого уровня – код на языке низкого уровня - машинный код – готовая программа. Здесь меня можно поправлять и уточнять, но у нас другая цель. Понять что программа – набор команд на понятном данному процессору языке. Едем дальше: понятный процессору язык – ассемблер. То есть, имея на руках экземпляр рабочей программы можно добыть код этой программы на ассемблере. Как?


Дизассемблер
— транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.

Что делать с листингом на ассемблере? – изучать, и понимать, что делает каждый программный модуль. Страшно? А кто говорил, что будет легко.




  • Автоматические
  • Интерактивные

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

Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ.

Прозвучал термин «транслятор». В данном посте определим его просто: транслятор – программное средство, позволяющее переводить код программы, написанной на более высоком уровне, в код более низкого уровня. И так по цепочке, до машинного кода.

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

понедельник, 2 мая 2011 г.

Zero Day. К публикации


Продолжаю переводить блог Марка Руссиновича, посвященный Zero Day. На этот раз это будет The Road to Zero Day: Publisher to Publication. Рассказ о публикации романа.

Меня обнадежили в том плане, что, возможно, Zero Day опубликуют в 2009 году, но до марта не был закончен и подписан контракт с Thomas Dunne Books, а, если верить людям, то с момента подписания контракта до выхода книги проходит год. Мой редактор сказал, что книгу собираются публиковать в каталоге весны 2010 года. Я сделал еще одну переработку, на что потребовалось чуть больше времени, чем на предыдущую. Редактор так же посоветовал сделать несколько аннотаций на обложку. К счастью, почти сразу после этого разговора я встретился с Биллом Гейтцем и попросил его написать мне такую аннотацию. С Б.Гейтцем я встречаюсь регулярно с тех пор, как стал работать в Microsoft, и в разговорах мы часто затрагиваем тему информационной безопасности. Я уже рассказывал ему про книгу, поэтому он уже знал про нее. К моему великому изумлению, он согласился написать такую аннотацию. Каждая моя встреча с Биллом кажется немного сюрреалистичный, и, выходя из офиса тем днем, я думал, а было ли этот разговор в действительности. Практически сразу я отослал Биллу рукопись, и, спустя несколько недель, он прислал мне аннотацию, которую Вы все видите на главной страничке сайта.

Следующая рецензия пришла от Говарда Шмидта, сейчас координатора президента Обамы в вопросах информационной безопасности, с которым меня познакомил друг из Microsoft’а. Говард начал проявлять инициативу по созданию защитных систем в Microsoft в 2000 году, когда информационная безопасность стала одним из приоритетов Microsoft, прежде чем он ушел в администрацию Буша советником президента по информационной безопасности. Он бежал в консалтинговую компанию по информационной безопасности, базирующуюся в Лондоне, но оказался поблизости, и мы вместе пообедали. Zero Day отражал некоторые из серьезных его опасения по поводу информационной безопасности, и он согласился прочитать книгу. Через пару недель он прислал не только обещанную аннотацию, но и написал предисловие к книге, что оказалось неожиданным, но очень приятным бонусом. Но еще более неожиданным и головокружительным оказалось то, что вскоре после того, как он направил мне предисловие с аннотацией моей книги, я прочел новость, что он назначен в администрацию Обамы. Его полномочия впечатляли тогда, сейчас же он получил еще больше возможностей.

В декабре 2009 года мой редактор предложил мне лететь в Нью-Йорк на ланч с ним, Томасом Данном, и Анной, которая обещала приехать из Бостона. Возможность встретиться с Томом находилась в разряде тех вещей, которые я никак не мог пропустить, а Нью-Йорк в канун рождества – великолепен, поэтому я организовал семейную поездку. Я взял такси до ресторана, в котором через несколько часов должна была состояться важная беседа. Несмотря на то, что Том важная фигура в издательском мире, он, кажется, совсем не торопился и не смотрел на часы. Он рассказал, как сильно его зацепила книга, и то, что он с нетерпением ждет продолжения. Затем он спросил, какие цели у меня на книгу. Я часто путешествую, поэтому, когда писал роман, главным его успехом казалась продажа в книжных магазинах аэропортов. Тому понравился мой ответ, и он сказал, что сделает это целью для отдела маркетинга.

После ланча, мы поехали в Флэтайрон-билдинг, Нью-Йоркскую достопримечательность, где располагаются St.Martins Press и офис Тома. Я быстро прошел по редакции и пообщался с сотрудниками. Было здорово, окунуться в мир издательства и провести обед, обсуждая романы и технику их написания с профессионалом в этом деле.

Я уже думал, что книга готовиться к весенней публикации, которую они называют «Запуском». Однако же, ближе к февралю мой редактор сказал, что Тому кажется необходимым внести некоторые изменения, чтобы сделать книгу более привлекательной, и очень настойчиво предложил мне их сделать. Я согласился последовать совету и снова пересмотреть книгу в самые кратчайшие сроки, но это означало, что книга не будет готова к весеннему запуску. Тому нравятся изменения, и он установил новую дату начала публикации – осень 2010 года. Я был не сильно разочарован несколькими месяцами просрочки, но позже оказалось, что осенний «запуск» означает – февраль или март следующего года. Казалось, что книга никогда не увидит свет.

Затем, уже летом, Джон сказал мне, что оставляет Томаса Дана, чтобы возглавить Mulholland Books, Little. Смена работы редактора в середине работы надо проектом книги может означать конец книги. К счастью, другой редактор, Питер Джозеф, включился в работу и возглавил проект. Я не могу сказать, что после всех своих опытов я стал больше понимать в книгопечатном бизнесе, но мне приятно, что есть люди, достаточно сильно верящие в мою книгу, и готовые помочь в публикации.

За осень 2010 года мы собрали большое количество аннотаций. Отозвался Вильям Ландай, автор отмеченной наградами книги «Душитель» (The Strangler), про мафию коррупционеров Бостона в 1960ых годах, во время активности бостонского душителя. Мне было приятно получить отзыв от признанного мастера триллеров. Затем мой агент сказала мне, что получила отзыв от автора бестселлера по признанию «New York Times» - Нельсона Де Миля. Я был в восторге. Я чувствовал, что Zero Day – достойная книга, но не знал, как она будет принята особенно читателями не знакомыми с технической литературой. Наличие желания таких громких писателей поручиться за мою книгу было крайне необходимым. Я отослал Нельсону благодарственное сообщение и в ответ получил, что книга ему, действительно, понравилась. К этому времени я получило больше отзывов от технических и публицистических писателей, чем рассчитывал, когда писал книгу.

Кроме того, осенью я подыскивал PR агентства, чтобы они содействовали в продвижении книги на рынке. После собеседований с несколькими компаниями я остановился на Phenix and Phenix. Компания специализировалась на книгах и продвигала нескольких моих любимых авторов, включая Бэна Бова, которые Вам знакомы, если Вы увлекаетесь научной фантастикой. Я читал много его книг в юношестве, а «Машина дуэли» (The Dueling Machine) произвела на меня впечатление, под которым я нахожусь и по сей день.

Так, путешествуя по созданию книги, мы подошли к нашим дням. Путешествие оказалось долгим, гораздо более долгим, чем я ожидал, но я рад, что слушался Анн и работал с ней. Отзывы от предварительной публикации превысили все, которые я ожидал, и я очень надеюсь, что Zero Day будет интересным и для Вас кибер-триллером.