рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Ассемблер

Ассемблер - раздел Информатика, NAG SCREEN "убийство Острием Лишено Артистизма. Но Пусть Тебя Это Не Останавлива...

"Убийство острием лишено артистизма. Но пусть тебя это не останавливает, если плоть, раскрываясь, сама себя предлагает."

Ф. Херберт. "Дюна".

Перейдем к непосредственному описанию возможностей HIEW-a. Автор этой книги долго колебался, что писать: "руководство по ключам" или "описание возможностей". В конце концов выбор остановился на последнем. По моему глубокому убеждению, описание на уровне клавиатуры не нужно тем пользовате­лям, которые читают это руководство. HIEW все же хакерский продукт. "А зачем хакеру хелп?" — улыбается Сусликов. Но о возможностях, приемах работы и маленьких секретах читатель узнает с большим удовольствием. И может быть,

тогда начинающие прекратят задавать глупые вопросы: "я знаю, какие байтики подправить, а в HIEW-e их найти никак не могу",

Встроенный ассемблер может быть полезен для многих вещей. Так, например, небольшие файлы удобно набивать сразу в HIEW-e, а не пользоваться masm/tasm-om, которые работают на порядок медленнее. И не понимают многих "извратов". Так, например, когда потребовалось для хитрой защиты ассемблировать смесь шестнадцати- и тридцатидвухразрядного кода со множест­вом команд Pentuinn Pro, никто кроме HIEW-a и собственных ручек не смог этого сделать.

Кроме того, все команды сразу показываются и в hex-кодах, а не после редактирования/ассемблирования/линковки/дизассемблирования (при работе со стандарными средствами), что открывает свободу для экспериментирования и страхует от ошибок. Так, например, тот же TASM частенько даже при задании директивы USE32 почему-то вставляет в непредсказуемых местах ненужные префиксы или (что не лучше) опускает с целью оптимизации расставленные мной. Хотите пример? Попробуйте указать префикс DS для данных. TASM его проиг­норирует (разве что пальцем у виска не покрутит). А теперь представим, что будет, если в самомодифицирующемся коде попытаться изменить префикс, кото­рый был опущен.

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

К сожалению, встроенный ассемблер содержит много ограничений, о которых будет рассказано ниже. Самое обидное, что в этом режиме HIEW еще не поддерживает локальных смещений и все вычисления адресов приходится прово­дить вручную. К моему удивлению, не все знают, как это делается. На самом деле все очень просто, достаточно знать формат редактируемого файла. Покажем это на примере самого, по-видимому, распространенного РЕ-формата файлов, поддер­живаемых платформой Win32 (все же это руководство по HIEW, а не по взлому).

Сначала рассмотрим, как происходит загрузка РЕ-файлов. MicroSoft неплохо оптимизировала этот процесс, и РЕ целиком проецируются в память, включая и DOS-секцию. При этом один селектор выделяется для кода и данных. А это означает, что перевод глобальных смещений в локальные осуществляется триви­альным добавлением адреса загрузки, который можно узнать из заголовка РЕ-фай-ла. Поскольку HIEW отображает последний в удобочитаемом виде, то наша задача упрощается еще больше, — достаточно заглянуть в поле Image base. В большинстве случаев там содержатся круглые значения, например 0х400000, 0х010000. Не сложно выполнить все вычисления и в уме, однако к чему напрягаться?Перейдем в начало файла и нажмем Ctrl-F5, после чего введем значение Image base (в нашем случае 400000). Посмотрим, что получилось:

  Дизассемблер Ассемблер
Без базирования: .0040119А: call .000401298 0000119А: call 000001298
С базированием: .0040119A: call .000401298 0040119А: call 000401298

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

Очень удобно, что HIEW при ассемблировании не пытается оптимизировать то, что его не просят. Например, если вы укажете адресацию через DS, то перед командой появится соответствующий префикс ОхЗЕ. Сравните:

00000000: ЗЕД16606 mov ax,ds: [00666]

00000004; A16606 mov ax, [00666]

Любой другой привычный нам ассемблер (tasm, masm) выдал бы идентичные результаты, что не вызывает у меня восторга. За это и любим HIEW: он послушно делает то, что ему говорят.

Ассемблирование вообще процесс довольно творческий. Одна и та же мнемо­ническая инструкция может быть ассемблирована по-разному. Такова уж специ­фика архитектуры линейки 80х86 микропроцессоров от Intel. Микрокод первых процессоров разрабатывался в то далекое время, когда экономить приходилось каждый байт, и поэтому инженеры Intel обратили внимание на ситуацию, когда регистр размером в слово манипулирует непосредственным значением меньшим 0х100. При этом старший байт равен нулю, т.е. теоретически может быть ужат до одного бита, а этот самый бит можно разместить в пустующем поле приемника (ясно, что приемником непосредственный операнд быть никак не может). В результате этих ухищрений экономится один байт. Итак, такую команду можно записать двумя способами:

00000007; 83С266 add dx,066 "f"

0000000A: 81C26600 add dx, 00066 ;" f"

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

Диаметрально противоположна ситуация при генерации переходов. По умол­чанию HIEW всегда генерирует близкий (near) переход ОхЕ9. Если необходимо задать близкий переход, то заставить HIEW это сделать поможет команда jmps (jmp short действует аналогично). Позволяя себе слегка покритиковать автора, замечу, что кракеры чаще всего заменяют условный переход на безусловный. При этом jmp near откровенно портит код. Обидно.

Продолжая критику, заметим, что ассемблер также не понимает ни ордина­лов, ни символьных имен, что совсем не радует. Очень хотелось бы в следующих версиях получить полноценную поддержку перечисленных выше форматов.

Б остальном же ассемблер ведет себя корректно и безглючно. При этом имеет встроенный калькулятор. Т.е. он прекрасно переваривает конструкции типа mov ах,[66+11] и даже mov ах,[—77]. Последнее, правда, без учета режима (еще один баг — в копилку'). Отрицательные числа адреса всегда дополняются до слова. При этом в 32-разрядном режиме забавно выглядит попытка ассемблировать •jmp -Г

00000003: E9F7FFFFFF jmp

Заметим, что только извращенцу придет в голову пользоваться последним, однако в защитах это встречается и работает следующим образом. Пусть, например, есть код:

00000000: E9FAFFFFFF jmp -I

00000005: 90 пор

00000006: 90 пор

При этом jmp смещает указатель команд на единицу, и получается:

00000000: FF9090909090 call d,[eax] [090909090]

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

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

Еще одним недостатком, приходящим на ум, является упорное нежелание HIEW-a 'переваривать' директиву <ptr>, поэтому выражение

mov Word ptr CS: [077] ,66

не может быть обработано синтаксическим анализатором. Приходится его сокращать до

mov Word CS: [077] , 66

Ужасно неудобно менять свои привычки, но что поделаешь — приходится. Последнее частично скрашивается приятной возможностью сокращать byte/word/dword/pword/qword/tbyte до b/w/d/p/q/t, как показано ниже:

 

Все числа считаются шестнадцатиричными по умолчанию, но никто не будет против постфикса 'h'. А вот с 'х' анализатор не знает что делать и незамедлитель­но начинает ругаться. Это выглядит особенно странно на фоне калькулятора, который такую нотацию как раз понимает, но в свою очередь не переваривает 'h'.

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

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

 

– Конец работы –

Эта тема принадлежит разделу:

NAG SCREEN

Каждому предоставлена полная свобода выбора — или терпи Nag Screen...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Ассемблер

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

NAG SCREEN
Вероятно, до разработчиков защит наконец-то дошел тот малоприятный факт, что на языке высокого уровня чрезвычайно трудно создать что-нибудь устойчивое даже против кракера средней квалификации. Наве

SetTimer
18C Is Iconic 195 KillTimer B7 EnableWindow 146 GetSystemMetrics 19E LoadIconA Попробуем найти код, который вызывает SetTimer, для чего установим на пос

Ограничение возможностей
Многие незарегистрированные версии отличаются тем, что часть их возмож­ностей заблокирована. Если программа предусматривает регистрацию, то обычно больших проблем при взломе не возникает. Совсем др

Text;004015CFp
jmp ds: ?EnableWindow@cwnd@@QREHH@z j_?EnableWindow@cwnd@@QAEHH@z endp Их всего два. Как раз по числу элементов управления. Пока защита не предвещает ничего необычного и ее код вы

Mov dwordptr [esi], offset off_0_4035C8
40139E mov eax, esi 4013A0 pop esi 4013AI retn 4013AI sub_0_401390 endp Становится ясно, что sub_0_401440 — это виртуальная функция CDocu-ment::On3aveDocument()!

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

Способы затруднения анализа программ
Все методы взлома защитных механизмов (за исключением, возможно, крип­тографических) сводятся практически к двум моментам — локализации кода защиты в сотнях килобайт (мегабайт) кода приложения и ан

Приемы против отладчиков
Самым первым отладчиком под MS-DOS был Debug.com фирмы MicroSoft. Совершенно очевидно, что этот инструмент годился разве что для забавы и изучения ассемблера. Но рынок не терпит пустого ме

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

J E9 EC EF JMP F125
2298;0139j F2 REPNE Полученный мусор может привести систему к краху, но едва ли будет нормально выполняться. При этом защитный механизм настолько "размазан" по коду, что обнаружи

Приемы против отладчиков защищенного режима
Позже появился 80286 (с точки зрения хакера мало чем отличавшийся от своего предшественника), а вслед за ним и 80386, принесший принципиально новые возможности отладки. Точнее, "принципиально

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

Дизассемблирование в уме
"— Мне известны политические аргументы. — Но меня интересуют человеческие доводы." Ф. Херберт. "Мессия Дюны". Очень часто под рукой не оказывается ни отладчика,

Структура команд INTEL 80х86
"— Потому ты и опасен, что ояладел своими страстями." Ф. Херберт. "Мессия Дюны". Дизассемблирование (тем более в уме) невозможно без понимания того, как процессо

Add b, [00100],002
00000105: 00B406B2 add [si][OB206],dh | ----------ip Т.е. текущая команда станет на байт короче! И "отрезанный" ноль теперь — часть другой команды! Но при выпол

Есть базирование если 2bit=1 то 0 –BP, 1 - BX
если 3bit=0 то 0 –база BX, 1 – база BP если 3bit=1 то 0 –индексный регистр 1 - базовый Возможно, кому-то эта схема покажется витиеватой и трудной для запомина­ния, но зубрить все

В4 ОЭ БД 77 01 CD 21
Вот она! Но что представляет собой опкод ОхВА? Попробуем определить это in трем младшим битам. Они принадлежат регистру DL(DX). А ОхВ4 0х9 — это шоу АН,9. Теперь нетрудно догадаться, что оригинальн

F2 AC 02 EO E2 FB BE 3В 01 30 24 46 61
Чтобы превратить его в знаковое целое, необходимо дополнить его до нуля (операция NEG, которую большинство калькуляторов не поддерживают). Тот же результат мы получим, если отнимем от 0х100 указанн

Маленькие хитрости
"Главная часть дисциплинирующей выучки — это ее сокрытая часть, предназначенная не освобож­дать, но ограничивать." Ф. Херберт. "Еретики Дюны". Хорошо, если в ваш

Х1 0х2 0х4 0х8 0х10 0х20 0х40 0х80
Причем все математические операции с такими круглыми числами делать^ уме на порядок проще, за что я и люблю шестнадцатиричную систему счисления. Разумеется, описанные приемы ни для кого не должны б

Ассемблирование в уме
"Ничто не превосходит по сложности человече­ский ум." Ф. Херберт. "Еретики Дины". Мы уже проделали титаническую работу, дизассемблировав в уме крохотный файл в п

Int 021
Дело в том, что указанным способом невозможно ввести с клавиатуры символ #8. А смещение строки как раз и есть 0х108. Чтобы избавиться от восьмерки, можно было бы, конечно, исполнить следующую после

B90123 456789
1111 111111 MOV DX, 0х100+2+2 ; OxlOO-адрес загрузки, 2 длина MOV АН, 9, 2 длина jmp JMP SHORT $+20 — резервирует 20 символов для строки. Предполагается, что этого окажется достат

Маска отображения файлов —*
Вообще навигатор очень напоминает Norton Commander, и общение с ним проблем вызвать не должно. На всякий случай я все же опишу назначение клавиш управления: Alt-FI (Drive)

Text 00000452 |D:KPNCHIEWDEXEM.EXE
При этом кроме собственно имен сохранятся текущий режим и позиция курсора (что особенно приятно). Последнее позволяет использовать HIEW для чтения больших текстовых файлов (электронных книг, докуме

Дизассемблер
Дизассемблер в HIEW великая вещь. фактически это основной режим работы хакера. Не то чтобы некоторые ленились дизассемблировать в уме hex-коды, (что, скажем, частенько приходится делать при работе

Adc dh,[si]
……………….. 00000104:xxxx Разница в том, что ссылка во втором случае указывает "в космос", но никак не на переменную 0х4. Это можно исправить, указав HIEW-y вручную начальное

Adc dh, [si] <—
00000106: 0100 add [bx] [si], ax 00000108: E3F7FF call 000000102-------- (i) И все ссылки при этом работают правильно. Заметим, что базирование никак не влияет на

Манипуляции с блоками
"Соединение невежества и знания, соединение ди­кости и культуры — не начинается ли оно с того чувства достоинства, с которым мы относимся к своей смерти?" Ф. Хербер

Поддержка LE/PE/NE/LX/NLM-ФОРМАТОB
"Понятие прогресса, служит защитным механиз­мом, отгораживающим нас от ужасов будущего." Ф. Херберт. "Дюна". Вообще-то шестнадцатиричный редактор идеологически д

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Крипт-система
"Не считай человека мертвым, пока не увидишь его тело. И даже тогда ты можешь ошибиться." Ф. Херберт. "Дюна". Уникальность HIEW-a прежде всего в том, чт

Описание файла HIEW.INI
"— Осторожность — важное качество для чело­века, который будет вождем." Ф. Херберт. "Дюна". HIEW хранит часть настроек в ini-файле, который немного напоминает од

JumpTable]
Задает таблицу переходов по call/jmp в дизассемблере. По умолчанию она выглядит следующим образом: "0123456789ABCDEFGHIJKLMOPQRSTUVWXYZ". При этом первый символ — это клавиша отката, т.е.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги