Можно ли на ассемблере писать вирусы?
Можно ли на ассемблере писать вирусы? Если нет тогда на чем можно?
Вирус - это программа, значит его, как и другие программы, можно писать на любом языке программирования.
Вирус - это программа, значит его, как и другие программы, можно писать на любом языке программирования.
Но лучше писать на асме, т.к. он должен иметь мелкий размер и вообще, вири на асме писать нааамнОго проще!
Но лучше писать на асме, т.к. он должен иметь мелкий размер и вообще, вири на асме писать нааамнОго проще!
Честно говоря, не вижу прямой связи между размером и использованием ассемблера.
Честно говоря, не вижу прямой связи между размером и использованием ассемблера.
Говорят, что краткость - сестра таланта. Руководствуясь этим, чуть чуть урежем цитату ув. BioUnit а. Теперь она станет более универсальной:
"... не вижу прямой связи между размером и использованием ..."
Честно говоря, не вижу прямой связи между размером и использованием ассемблера.
По-моему это очевидно. А цитата про излишнюю самоуверенность ко всем относится.
Можно ли на ассемблере писать вирусы? Если нет тогда на чем можно?
Задали бы мене этот вопрос на рубеже 90х. ROTFL! LMAO! с неделю бы по полу катался 8-]
btw.: если тебе это дествительно интерессно - недавно сного поднялся один ресурс http://vx.netlux.org/ . там много интерессных головоломок.
По-моему это очевидно. А цитата про излишнюю самоуверенность ко всем относится.
"В первую очередь следует подвергать сомнению очевидное, аксиомы и константы..."
И, честно говоря, я не вижу очевидности. Это клише, а не очевидность.
И, честно говоря, я не вижу очевидности. Это клише, а не очевидность.
Проверено на практике и не только мной. Например вирус в несколько кило на большинстве современных языков написать просто невозможно благодаря всяким startup процедурам. Зайди на viruslist.com и почитай про новые вирусы - большинство написано (вообще кошмар) на MSVC++ и иже с ним. И посмотри на размер. Их там пакуй не пакуй все равно скоро и на дискету влезать не будут.
А для того чтобы написать на АСМе такого размера прогу надо два года мучиться баги искать :~)
Например вирус в несколько кило на большинстве современных языков написать просто невозможно благодаря всяким startup процедурам.
Причем тут язык?
Причем startup процедуры?
Зайди на viruslist.com и почитай про новые вирусы - большинство написано (вообще кошмар) на MSVC++ и иже с ним. И посмотри на размер. Их там пакуй не пакуй все равно скоро и на дискету влезать не будут.
А чем тебе VC++ не угодил?
Проблема не в языке и компиляторе, а в кривости рук. Если ты печешься о размере программы, то смею заверить, что на VC++, вполне можно писать программы не более 1кб результирующего файла.
Может проблема в том, что "вирусы" сейчас пишут все кому не лень, а реальным программистам это уже не интересно?
А для того чтобы написать на АСМе такого размера прогу надо два года мучиться баги искать :~)
См. фразу про руки.
Языки высокого уровня придумали не для того, чтоб писать программы с большим результирующим файлом, а для удобства программирования.
Причем тут язык?
Причем startup процедуры?
Не понял --> мы чем занимаемся сравниваем АСМ с другими на тему размера или ...?
А чем тебе VC++ не угодил?
Проблема не в языке и компиляторе, а в кривости рук. Если ты печешься о размере программы, то смею заверить, что на VC++, вполне можно писать программы не более 1кб результирующего файла.
Может проблема в том, что "вирусы" сейчас пишут все кому не лень, а реальным программистам это уже не интересно?
Я не знаток MSVC++ и не уверен в том что на нём можно написать прогу меньше 1Кб. Был бы очень признателен если бы меня убедили в обратном. Например - exe,cpp,и bat для сборки. main(){printf("Hello world");} вполне достаточно.
См. фразу про руки.
Языки высокого уровня придумали не для того, чтоб писать программы с большим результирующим файлом, а для удобства программирования.
Вот именно для удобства - а за всё как известно платить надо. Поскольку одно и то же действие на АСМе можно сделать по разному, а на ЯВУ пишешь одну коротенькую строчку для этого действия - компилятору самому приходиться выбирать способ реализации. И вот это узкое место.
Не понял --> мы чем занимаемся сравниваем АСМ с другими на тему размера или ...?
Да, но причем startup процедуры?
Хочешь - пользуйся, а хочешь - нет.
Я не знаток MSVC++ и не уверен в том что на нём можно написать прогу меньше 1Кб. Был бы очень признателен если бы меня убедили в обратном.
Я не сказал "меньше" я сказал "не больше". Почувствуйте разницу.
Что-то мне не верится, что ты используя самый навороченный ассм сможешь написать приложение под Windows меньше 1к, которое загружается стандаотным загрузчиком Докажешь обратное?
Например - exe,cpp,и bat для сборки. main(){printf("Hello world");} вполне достаточно.
А ты хитрец... :D
printf - не очень и простой метод, парсинг строки формата вывода, подстановка неопределенного количества аргументов, а потом уж вывод на экран. Не думаю, что это элементарная задача для ассма.
Кроме того, ты не указал ОС под которой это все должно выполнятся. А соотв. если это Windows, то файл меньшее 1к не получится (заголовок как минимум 512 байт и хотябы одна секция - 512 байт).
Ну раз так, вот код (test.cpp, Makefile):
#include <windows.h>
int printf(char* str)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD n;
WriteFile(hStdOut, str, strlen(str), &n, NULL);
return n;
}
int main()
{
printf("Hello world");
}
CC =cl
CFLAGS = /O1 /Os /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Zp1 /W0 /nologo /c /TP
LINKER = link
LFLAGS = /INCREMENTAL:NO /NODEFAULTLIB /SUBSYSTEM:CONSOLE LIBC.LIB kernel32.lib /ENTRY:main \
/MERGE:.rdata=.text /MERGE:.data=.text /FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078
default: test.exe
%.obj:%.cpp
$(CC) $(CFLAGS) $@
test.exe: test.obj
$(LINKER) $(LFLAGS) $* /OUT:$@
В результате получается файл ровно 1к, но он добит нулями до этого размера.
Вот именно для удобства - а за всё как известно платить надо. Поскольку одно и то же действие на АСМе можно сделать по разному, а на ЯВУ пишешь одну коротенькую строчку для этого действия - компилятору самому приходиться выбирать способ реализации. И вот это узкое место.
Ну если ты пустишь все на самотек, то так оно и выйдет. Но ведь можно разумно управлять процессом компиляции, разумно выбрать и сам компилятор.
Я бы не стал впрягать сюда Java, т.к. мы говорим о несколько других вещах. Java-компиляторы все же не производят в конечном итоге машинный код в отличие от компиляторов ассеблера и C/C++.
Я бы не стал впрягать сюда Java, т.к. мы говорим о несколько других вещах. Java-компиляторы все же не производят в конечном итоге машинный код в отличие от компиляторов ассеблера и C/C++.
ЯВУ означает Язык Высокого Уровня
У меня сейчас сессия и я занят несколько другими вещами. Потом поговорим. Тема ещё не закрыта. Надо всё проверить.
Может проблема в том, что "вирусы" сейчас пишут все кому не лень, а реальным программистам это уже не интересно?
Да, неинтересно, ибо разделение привелегий....А универсального сплоита для повышения привилегий нет, и быть не может. Это в DOS'e вирус и антивирус были на равных, а тут ясно кто победит, конечно антивирус. Хотя и в Dos'е ясно, если с дискеты загрузится, то победит антивирь. Просто интересно перехватить прерывание, не дать антивирусу запустится, модифицировать MCB блоки - спрятать вирус, перехватить int21h, прятать вирус при посмотре заражённого exe-файла, шифроваться. А в вин такого не провернёшь. Тут победитель ясен - антивирус!
Да, неинтересно, ибо разделение привелегий....А универсального сплоита для повышения привилегий нет, и быть не может. Это в DOS'e вирус и антивирус были на равных, а тут ясно кто победит, конечно антивирус. Хотя и в Dos'е ясно, если с дискеты загрузится, то победит антивирь. Просто интересно перехватить прерывание, не дать антивирусу запустится, модифицировать MCB блоки - спрятать вирус, перехватить int21h, прятать вирус при посмотре заражённого exe-файла, шифроваться. А в вин такого не провернёшь. Тут победитель ясен - антивирус!
Честно говоря, не понял, что именнно ты хотел сказать.
Как человек имеющий профессиональное отношение к системам защиты, могу сказать, что в Windows не все так радужно, как ты попытался тут представить.
А не интересно реальным программистам сейчас писать вирусы потому, что есть другие более интересные и важные дела.
Честно говоря, не понял, что именнно ты хотел сказать.
Как человек имеющий профессиональное отношение к системам защиты, могу сказать, что в Windows не все так радужно, как ты попытался тут представить.
А не интересно реальным программистам сейчас писать вирусы потому, что есть другие более интересные и важные дела.
Краткое резюме: вирусы пишут на всем чем можно
...И на чем нельзя - тоже пишут...
Отдельно автору сабжа: имей ввиду, что для вирмаков в УК РФ отдельная статья предусмотрена, между прочим. И лучше бы занялся серьезным делом а не баловством. Детские это забавы. И для серьезного программера несолидно такой послужной список иметь.
:eek::confused: обычно на ассемблере вирусы и пишут :D
В несколько десятков байт можно уложиться. Точно не знаю какой мировой рекорд, но очень мало. Ведь секция может иметь физический размер 0, а код можно и хранить в заголовке в "неиспользуемых" полях, к примеру.
Если это возможно, то размер файла всё равно будет не меньше 512 байт - размер заголовка PE.
KIV
не, можно и меньше 512. покажу как найду
Челябинские вирусмейкеры - такие суровые.
Вот у меня получился в 300 байт. На fasm. правда он на висте (и наверное на семерке) не запускается, лень разбираться =) на вин2000, хп, 2003 работает. где то видел около 100 байт или меньше PE-файл, вроде... хотя урезать кажется там уже нечего.
.start:
db 'MZ' ; MZ Signature
inc ebp
push edx 0 0
jmp @f
db 2 dup 0
db 'PE',0,0 ; PE Signature
dw 0x014c ; Machine Type
dw 0x0001 ; Number of Sections
@@:
call @f
db 'Hi!',0
@@:
jmp @f
db 1 dup 0
dw 0x00e0 ; Size of Optional Header
dw 0x0002 ; Flags
dw 0x010b ; Magic
.MessageBoxA:db 0,0,'MessageBoxA',0
dd 0x00000000 ; Entry Point
db 4 dup 0
dd 0x0000000c
dd 0x00010000 ; ImageBase
dd 0x00001000 ; Section Alignment
dd 0x00000200 ; File Alignment
@@:
push 0
jmp @f
db 4 dup 0
dw 0x0004 ; Subsys Major Version
dw 0x0000 ; Subsys Minor Version
db 4 dup 0
dd 0x00002000 ; Size of Image
dd 0x00001000 ; Size of Headers
db 4 dup 0
dw 0x0002 ; Subsystem
@@:
call dword [0x00010000+0x00001000+.IAT+0x0000]
retn
db 15 dup 0
dd 0x00000010 ; Number of RVA and Sizes
db 8 dup 0
dd 0x00001000+(.import_table-.start) ; Import Table RVA
dd 1 ; Import Table Size
db 8 dup 0
.IAT:dd 0x00001000+.MessageBoxA,0
db 20 dup 0
.import_table:
db 12 dup 0
dd 0x00001000+.User32
dd 0x00001000+.IAT
db 56 dup 0
dq 0 ; Section Name
dd 0x00001000 ; Virtual Size
dd 0x00001000 ; Section RVA
dd filesize-1 ; Raw Size
dd 0x00000001 ; Raw Offset
.User32:db 'USER32.DLL',0,0
dd 0xc0000000 ; Characteristics
filesize=$-.start