Привет, юный хакер! Ты уже многое знаешь, но крутой хакер никогда не останавливается на достигнутом. Эта статья посвящена работе с стандартным дебаггером системы ДОС. Ты скажешь: «На кой фиг мне это надо мне, крутому перцу?». 
Представь ситуацию: ты приходишь в компьютерный клуб (интернет-кафе, к другу домой), а там на тачке дисководы сняты, сидюки заклеены, а пакость сделать все же хочется. Естественно, на любом «нормальном» компе нет никаких компиляторов С, ассемблеров… но почти на каждом «нормальном» компе есть ДОС! Да, именно ДОС, и его последователи - Винды всех типов а конкретнее программа
DEBUG.

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

Итак, вы запустили программу DEBUG

Первая команда –D (dump) <adress>.

Эта команда позволяет просмотреть некоторую область памяти, адрес которой задан в параметре <adress> в формате сегмент:смещение.

Для начала посмотрим ПЗУ BIOS:

-d F000:E000

Здесь вы видите фирму-производителя вашей
BIOS. А по адресу:

-d F000:EC6C

получаем интересную информацию о системе,
такую как дата создания БИОС, чипсет… А по данному адресу
(0000:046C) находится таймер БИОС. Отчетливо видно, что значения все время меняются.
Для программиста удобно просматривать сегменты команд, данных и стека (CS, DS и SS, соответственно).

-d DS:0000

Выше мы видим содержимое сегмента данных, т. е.
значения определенных переменных.

-d CS:100

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

Еще одна важная команда -R (register) <register name>, позволяющая просматривать состояние конкретного регистра и изменять его состояние или же сразу перейти к первой выполняемой команде с просмотром всех регистров.

-r AX

AX 1203
: 0
-

В данном фрагменте мы просматриваем регистр АХ и очищаем его (пишем в него 0).
Чтобы перейти к первой выполняемой команде (по адресу CS:100):

-r

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000 
DS=3B9A ES=3B9A SS=3B9A CS=3B9A IP=0100 NV UP EI PL NZ NA PO NC 
3B9A:0100 E82421 CALL 2227

Третья команда –E (enter) Addres <command list>.

Предназначена она для изменения значений в
памяти – с помощью нее можно уже вводить команды в машинных кодах. Замечание: при вводе данных сначала пишется младший байт
(по младшему адресу), затем – старший (по старшему), т. е. 
чтобы записать по адресу DS:0000 число 1234h необходимо ввести:

-E DS:0000 34 12

Например введем следующее:

-E cs:100 B8 34 12
-D CS:100

А с помощью команды U (unassemble) <starting address>, <ending adress> дизассемблируем введенные команды и получим:
-U CS:100,102
3B9A:0100 B83412 MOV AX,1234

Таким же образом можно дизассемблировать любой участок памяти, что очень полезно.
Но вместо ввода команд на машинном языке, можно воспользоваться встроенным
ассемблером программы DEBUG. Для этого существует команда
-A (assemble) <adress>. С помощью этой команды вы можете написать уже нормальную программку на ассемблере, выполняющую необходимые действия.:

-A 
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107

А как же теперь сохранить программу на диске? Сначала задается имя файла:

-N my_file.com

Затем в регистр СХ необходимо поместить размер программы в байтах. Он будет равен разности конечного и начального смещений. Теперь остается только осуществить запись на диск командой W и в результате увидеть записанное количество байтов. В итоге мы получаем программу, готовую к исполнению. Выход осуществляется командой q. Пример:

-A 
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107 
-u CS:100, 106
0B3B:0100 B83412 MOV AX,1234 
0B3B:0103 B44C MOV AH,4C 
0B3B:0105 CD21 INT 21 
-r cx
CX 0000
:7
-r
AX=0000 BX=0000 CX=0007 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 
DS=0B3B ES=0B3B SS=0B3B CS=0B3B IP=0100 NV UP EI PL NZ NA PO NC 
0B3B:0100 B83412 MOV AX,1234 
-N my.com
-W
Запись 00007 байт
-q

В заключение можно сказать, что данный способ создания программ открывает новые возможности для любителей компьютерных пакостей, приколов, да и просто программистов-любителей – ведь теперь для создания небольших программ, вместо установки компиляторов, можно воспользоваться стандартными средствами системы, а DEBUG входит в поставку во все Винды вплоть до ХР. Я думаю, что это поможет вам веселее провести время за чужим компом, вызывая истинное удивление хозяина (дисков и дискет-то вы не приносили!!!) новыми эффектами работы его оборудования. Успехов, юные любители хакерного экстрима!

Check Also

Операция BrainfuckPC. Как я построил самый безумный релейный компьютер и не стал на этом останавливаться

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

1 комментарий

  1. Аватар

    07.12.2014 at 17:34

Оставить мнение