H++ (Haliley): пишем боевой софт.


Как иногда хочется написать свою хак-прогу, но не идет. Может не хватает знания языка, а невозможность твоего языка. Однако с выходом новой версии и нового стандарта языка Галилей, это стало возможным. Почему мне так понравился этот язык? Дело в том, что на нем действительно удобно писать сетевые (в частности хак) проги. Все команды можно вводить на русском и английских языках. Программы получаются маленькими, а самое главное скорость работы и написания программ. Новую версию я видел только под винды. Родную линуксоидную версягу запрещено выкладывать в течение месяца. По этому рассматривать будем только виндовую, но идеология языка заключается в межплатформенности, так что, я думаю, они будут работать и под линухом. В этой статье я дам только основы языка. Советую почитать книгу Р. Самсонова "Программирование Tcp\ip: Haliley(H++)". Именно по этой книжке я изучал язык и писал свои проги, кстати там полно примеров. Однако нас интересуют хак-проги, но прежде чем начать кодить дам несколько основных операторов для незнающих. Программа состоит из 3х частей. Первая часть несет в себе название проги, вид запуска \ компиляции (фоновый \ в окне) и другие параметры. Вторая часть несет в себе сведения о версии, системных данных и информация об окне. Третья часть несет в себе сам код. Все программы были оттестированы на H++, входящий в HDKxp. Примеры, помеченные звездочкой, так же на Haliley classic. И так сами операторы:
Ввод-(английский эквивалент-input)-запрос у пользователя ввиде командной строки
Текст-(print) печать текста
Текстст-(println) печать с переводом строки
Текстпр-(printpr) печать с интерпритацией переменных
Подключ-(connect) подключиться к серваку
Открыть-(open) открыть файло
Писать-(write) записать в файло
Читать-(read) читать из файла
Искать-(find) искать по переменной или файлу
Заменить-(replace) заменить что то в переменной или файле
Послать-(send) послать что-то
Соккет-(socket) открыть соккет
Принять-(take) ждать приема
Портотк-(prtopen) открыть порт
Шифровать-(cript) шифровать запрос
Расшифровать-(decript) расшифровать запрос
Листинг-(log) ведение лога
Сеть-(net) выделить код как сетевой
Пинг-(ping) пинговать
Слать-(spam) отправка множества пакетов
Теперь более подробно. Пустой пример проги:

..комментарий выделяется двумя точками
..здесь идут первые две части проги
..они создаются автоматически в любом стандартном H++ редакторе
*
Программа пример1.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно нет.
Версия 1,0.
Память стандарт.
Система win.
..конец первых двух частей
..часть третья
..здесь нет ничего, но в нормальной проге код вместо этого комментария
..завершение проги
конец.
Нулевые строчки - коментарии(до 10 нулевых строчек)
Первая строчка-название проги
Вторая строчка говорит о том, что запуск будет происходить в фоновом режиме.
Третья говорит тоже самое компилятору
Четвертая говорит, что никаких дополнительных модулей юзать ненадо.
Пятая говорит, что окна нет
Шестая указывает версию проги. Вместо точек в разделители версии используется запяятая
Седьмая строчка говорит о том, что будет использоваться любой сегмент пямяти
Восьмая строчка говорит о системе для запуска
Девятая-двеннадцатая коментарии
Тринадцатая - обязательная команда конец, указывающая на конец программы.
Вот пример программы с окном.
*
..комментарий выделяется двумя точками
..здесь идут первые две части проги
..они создаются автоматически в любом стандартном H++ редакторе
Программа пример1.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно 100,100,200,450,окно1,закрыть,восстановить,свернуть,значек.
Версия 1,1.
Память стандарт.
Система win.
..конец первых двух частей
..часть третья
..здесь нет ничего, но в нормальной проге код вместо этого комментария
..завершение проги
конец.

Изменилась только строка с инфой о окне. Параметры обозначают следующее:
100 левый верхний угол по Х
100 левый верхний угол по У
200 точек вправо
450 точек вниз
окно1 заголовок окна
закрыть,восстановить,свернуть,значек кнопки, которые будут в заглавии
Однако при компиляции примера мы получаем ошибку.

Cannot create the window in background without program part
Не могу создать окно в фоновом режиме без программной части

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

Добавляем вместо последних комментариев строчку

Текст "оно работает".

И прога запустится, правда мы ничего не увидем (фоновый режим) и получим предупреждение:

Creating window in background without window block
Создаю окно в фоновом режиме без оконного блока

Короче прога запускается но самого окна мы не видим по причине фонового режима. Для показа окна достаточно заменить слово фон в "начале" на "стандарт". Или рекомендую создать в коде такой блок ".окно."

окно.показать.дано
"/\"

Теперь по запуску примера мы увидим окно с надписью "оно работает".
Переходим к хакерским прогам. В примерах есть:
Портсканер
Cgi-сканер
Флудер
Mail бомбер

Начнем с простого. порт-сканер
*
Программа порт_сканер.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно нет.
Версия 1,0.
Память стандарт.
Система win.
%порт=1.
".сеть."
листинг.результат="ОК" "log.txt".
цикл.начать 100.
подключ(127.0.0.1).
%переменная=портотк(%порт).
Цикл.конец.
"/\"
конец.

В результате в логе будет примерно такие сведения:
Подключаемся к 127.0.0.1
Порт Х открыт
Порт У открыт
...
Пример сканит только первые сто портов. Ставьте в цикле другое значение.
cgi сканер. Этот cgi сканер будет проверять наличие файла на сайте.

Программа cgi_сканер.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно нет.
Версия 1,0.
Память стандарт.
Система win.
".сеть."
листинг.результат="найдено" "log.txt".
открыть("база",!фаг1).

цикл.начать 100.
..сверху кол-во записей в базе
%файл=читать.строка(!фаг1).
подключ(127.0.0.1).
%переменная=идти(%файл).
Цикл.конец.
"/\"
конец.

Теперь лог будет выглядить примерно так:

Подключаемся к 127.0.0.1
Найдено баговыйскрипт1
Найдено баговыйскрипт2
...
флудер совсем просто. Будем кидать скрипту bugoviscript.cgi тупую мессагу

Программа флудер.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно нет.
Версия 1,0.
Память стандарт.
Система win.
".сеть."
листинг "log.txt".
цикл.начать 100.
подключ(127.0.0.1).
%переменная=идти(127.0.0.1/cgi-bin/bugoviscript.cgi?message=uebovi script fludim odnako).
Цикл.конец.
"/\"
конец.

Конечно, надо заделать и текст побольше и кол-во отправок побольше.
Для отправки почты есть команда почта. Mail бомбер

Программа почтовый_бомбер.
Запуск фон.
Компиляция фон.
Использовать нет.
Окно нет.
Версия 1,0.
Память стандарт.
Система win.
%текстписьма= "Грязный ублюдок вот тебе письмо".
".сеть."
листинг "log.txt".
цикл.начать 100.
..кол-во писем
подключ(127.0.0.1).
..почтовый сервак
почта.отправить("poluchi@grazni_ublud.ok", "получи письмо, ублюдок",%текстписьма).
Цикл.конец.
"/\"
конец.

По моему, очень просто. Кстати. Есть библиотека из модификации hack+. Если ее перекомпилить заменив первую строчку на H++, то будет куча стандартных фичей типа
Portscan(ip)
Cgiscan(adress/ip,base)
Flood(adress/ip,text)
Mailbomb(email,subj,text)
Anonymail(to,from,subj,text)
Nuke(ip)
И другие

Вообщем сетевой язык с рульными возможностями. Посоветую так же книгу Н.Н. Абухтова "Хакер, сколоти прогу сам". Весь текст отстой, но глава по H++ рулезная, к тому же диск со всеми версягами. Даже V!$u@1 H++ какой то команды на сто метров(!!). Ну ладно, с самым удобным и простым, на мой взгляд, языком для написания хак программ я познакомил.
Читайте книги и доки.
Пока.