Низкоуровневое программирование для Дzenствующих

Вид материалаДокументы

Содержание


PE-файла, уметь играться с Perl
Volodya. Хотелось бы выразить искреннюю благодарность и признательность Евгению Сусликову
NEOx. Хотелось бы выразить особую благодарность Доктору Голове
OEP, распаковке ручками Aspack/UPX/telock/pelock/crunch и т.п. Будет упомянут механизм SEH
Руководство по проектированию макросов в MASM32(часть 1.1)
I. От автора
II. Лень – двигатель Макро III. Макромир MASM
I. От автора
ЯВУ легче писать качественно оформленные программы, хотя бы, потому что ЯВУ
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   ...   42

* * *


Ну вот, вроде и все. По идее, теперь вы должны представлять строение PE-файла, уметь играться с Perl и Java, а также приблизительно понимать XML, и уметь применять XSLT. Также, наверняка, вам очень хочется сказать нам что-то теплое, ласковое, домашнее за ваши муки при чтении.
Хотелось бы заметить, что сам характер материала, излагаемого здесь, должен подтолкнуть вас к самостоятельным исследованиям. Нельзя верить тому, что пишут, проверяйте сами! Наверняка большая часть алгоритмов, здесь описанных, в скором времени работать перестанет! Поэтому скажем еще раз - нечего плеваться, если нашли оговорку или опечатку, они неизбежны, несмотря на все наши старания. Все надо проверять!

Теперь самое время расстаться с нашими игрушками и рассмотреть реальные случаи.


5. Благодарности


Ну, традиционный пункт, который все авторы старательно пишут, а все читатели старательно игнорируют. Можете игнорировать и вы, кусать никто не будет.

Первым пишу я, Volodya.

Хотелось бы выразить искреннюю благодарность и признательность Евгению Сусликову за данные консультации по RVA/VA и файловым оффсетам. Я также горжусь знакомством со sla-md, который дал мне очень подробные объяснения о преобразовании флагов секций PE-файла в соответствующие атрибуты, объяснил некоторые сетевые трюки и вообще, просто является гениальным человеком. Щiре дякую Quantum'у за успешную попытку статической линковки API-forward-функций. Так же обязательно стоит поблагодарить Russell Osterlund за некоторые пояснения по работе лоадера. Самые теплые слова (эх, как звучит!) надо сказать моей любимой команде - HI-TECH (wasm.ru) - Edmond, Aquila, Broken Sword, Four-F - спасибо за ценные замечания, указания, пожелания, вылавливание мелких и крупных блох в моих рассуждениях. Спасибо!

Вторым пишу я, NEOx.

Хотелось бы выразить особую благодарность Доктору Голове за его консультацию по поводу восстановления директории ресурсов, а так же всей команде uinC.



Итак, что дальше.

Вторая часть статьи будет рассказывать об алгоритмах работы элементарного пакера, самых легких случаях нахождения OEP, распаковке ручками Aspack/UPX/telock/pelock/crunch и т.п. Будет упомянут механизм SEH и некоторые антиотладочные приемы.

Третья часть посвящена очень сложным защитным системам – Armadillo, Obsidium, Asprotect.

Засим разрешите распрощаться до следующей части. Ave.



...ночь была теплой. Запахи пьянили. Гарри привлек к себе Гермиону и их губы встретились. Открыв глаза, Гарри увидел за спиной Гермионы две красных звездочки. Они были похожи на ... были похожи на... ! "Герми...", прошептал Поттер, чувствуя озноб. "М-м?" - отозвалась она, прижимаясь к нему. Красные точки начали приближаться. Гарри сбросил оцепенение и отодвинул Гермиону в сторону, закрывая собой. Из темноты показалось невероятное существо. - Да это же тот самый "электронный философ", - хрипло сказал Гарри. - Помнишь, мы искали, кто такой Эвклид?
Существо сделало большой шаг и сжало металлической рукой плечо Гермионы. Та завизжала. Гарри непослушными пальцами пытался вытащить палочку, запутавшуюся в складках мантии. Существо произнесло медным голосом всего два слова. В словах чувствовался вопрос:
- Са-ра--Кон-нор?


(окончание следует...)

Руководство по проектированию макросов в MASM32
(часть 1.1)


Пойми в Хаосе Разное, и стань человеком.
Осознай Единое в Различном – и будь Богом.

Автор
I. От автора
      I.1. Для тех, кто впервые...
      I.2. Примечания (обо всём понемногу)
      I.3. Особенности терминологии
      I.4. Благодарности
II. Лень – двигатель Макро
III. Макромир MASM
       III.1. Функционирование макросов
       III.2. Определение макро переменных и строк
       III.3. Обработка выражения в MASM
       III.4. Вычисление рекурсивных выражений
       III.5. Встроенные макрофункции и директивы
       III.6. Символ макроподстановки
       III.7. Макроблоки
       III.8. Отладка макроопределений и заключение
       III.9. Абстрактный алгоритм анализа строки MASM (Дополнение)

I. От автора


В этом руководстве раскрывается тема создания, использования (а главное – проектирования) макросов и макрофункций в проектах на MASM32.

Что не так важно в ЯВУ, то очень важно в программировании на ассемблере. Если выстроить по приоритетам недостатки программирования на ассемблере, то первым недостатком будет не объём строк написанного кода (как нестранно), а отсутствие средств, обеспечивающих хороший стиль написания кода.

Что значит стиль? А что значит плохой или хороший? Это можно быстро понять на простом примере.

Допустим, у вас есть процедура объёмом на несколько экранов. Вы её написали месяц назад, а теперь вам нужно несколько изменить её поведение. Для того, чтобы сделать это, вам необходимо:
  1. Вспомнить её алгоритм (если забыли)
  2. Вспомнить особенности реализации (у вас должны быть комментарии)
  3. Вспомнить какой участок кода, чем занимается.

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

А это не так то просто, даже если исходник написан вами, в вашем неповторимом стиле.

Если этот стиль будет хорошим, вы потратите меньшее время, если бы стиль был бы плохим.

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

Конечно же, на ЯВУ легче писать качественно оформленные программы, хотя бы, потому что ЯВУ уже имеет готовые средства выражения, и шаблоны мышления.

Что такое шаблоны мышления? Всё чем вы так активно пользуетесь:
- типы
- функции
- классы
- массивы
- указатели на типы
- пространства имён
- шаблоны (С++)
Всё это направляет ваше понимание программирования как пространства сотканного из таких абстракций.

Недавно я прочёл следующую мысль на форуме ссылка скрыта:

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

Такое заявление говорит, что программист не желает писать проекты более чем на 6 000 строк (или 3 000 :)). Вместо того чтобы извлечь великую выгоду из единообразия кода, мы ругаем его. А ведь это первый звонок к автоматизации программирования.

Неужели программирование asm может быть похоже на Delphi (ох как его не любят некоторые)? Снова интегрированная среда? Конечно!!! (Жаль, её всё-таки нет!) Но это не значит, что она играет отрицательную роль. Хотя о средствах автоматизации и их создании мы поговорим в другой работе.

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

Очень сложно назвать директиву proc средством выражение процедурной модели программирования.

Однако я могу ручаться, если вы научитесь писать качественно стилизированные программы на ассемблере, то на ЯВУ… ?.

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