На каких языках пишут вирусы ?

Solovyov

Member
Messages
29
Reputation
0
Reaction score
17
Points
3
Здравствуйте , меня очень волнует следующий вопрос : "Что учить , чтобы в дальнейшем я мог писать свои трояны , стилеры ?"
 

Enzo.

Carder
Messages
32
Reputation
0
Reaction score
30
Points
18
Доброго времени суток . Все зависит от ваших текущих знаний , но исходя из вопроса я могу предположить , что как такового опыта в программировании нет , я прав ?
Если да , то для начала начните изучать Python , у него простой синтаксис , множество библиотек , а также активно развивающееся сообщество - без ответа не останетесь .
Далее посоветовал бы присмотреться к таким языкам , как С# и C++, Ассемблер
 

Solovyov

Member
Messages
29
Reputation
0
Reaction score
17
Points
3
Доброго времени суток . Все зависит от ваших текущих знаний , но исходя из вопроса я могу предположить , что как такового опыта в программировании нет , я прав ?
Если да , то для начала начните изучать Python , у него простой синтаксис , множество библиотек , а также активно развивающееся сообщество - без ответа не останетесь .
Далее посоветовал бы присмотреться к таким языкам , как С# и C++, Ассемблер
Да , вы правы . Опыт программирования был в школе по-моему на бэйсике , но я благополучно все успел забыть . О с++ слышал - язык вроде как универсален , но не понимаю смысла изучения асемблера . разве он не устарел ?
 

CarderPlanet

Professional
Messages
2,557
Reputation
7
Reaction score
552
Points
83
Темное искусство создания вредоносных программ
Языки компьютерного программирования являются фундаментальными строительными блоками в мире технологий, будь то смартфоны, светофоры или автоматизированный больничный МРТ-сканер.

Они позволяют использовать чудо технологий и все, что мы можем делать, и то, что мы считаем само собой разумеющимся, например, снимать наличные в банкомате или выходить в Интернет во время движения.

Технически язык программирования - это словарь и набор грамматических правил для указания компьютеру или вычислительному устройству выполнения определенных задач. Существует много разных языков, но каждый из них имеет уникальный набор ключевых слов и особый синтаксис для организации программных инструкций.

Уровни программирования
Есть разные уровни языка программирования. Проще говоря, языки программирования классифицируются как низкоуровневые или высокоуровневые.
  • Языки низкого уровня напрямую взаимодействуют с процессором компьютера или ЦП, выполняют очень простые команды и, как правило, их трудно читать. Машинный код, один из примеров низкоуровневого языка, использует код, состоящий всего из двух чисел - 0 и 1;
  • В языках высокого уровня используется естественный язык, поэтому людям легче читать и писать. Почти все написаны на английском языке. Независимо от того, программируют ли они на языках HTML, JavaScript или Python, программисты во всем мире используют одни и те же ключевые слова и синтаксис на английском языке в своем коде. Когда код написан на языке высокого уровня, интерпретатор или компилятор переводит этот язык высокого уровня в код низкого уровня, понятный компьютеру.

Согласно IEEE Spectrum, журналу, выпускаемому Институтом инженеров по электротехнике и электронике, 10 самых популярных языков программирования, использовавшихся в прошлом году, располагались в порядке убывания:
  • Python
  • C
  • Java
  • C++
  • C#
  • R
  • JavaScript
  • Go
  • Swift
  • Ruby

Тем не менее, есть и другие языки программирования, такие как BASIC, COBOL, FORTRAN, Ada и Pascal.

Темное искусство или наука?
Компьютерное программирование - это одновременно наука и математика, и непосвященным оно может показаться загадочным темным искусством. Но хакеры высокого уровня, как правило, хорошо владеют этими языками, поэтому они часто бывают такими же успешными.

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

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

Какие языки предпочитают хакеры?[
Выбранные хакерами языки программирования будут зависеть от их целей.
  • C - это язык программирования общего назначения. Его можно использовать для написания всевозможных вредоносных программ для различных вычислительных сред, таких как настольные, серверные и сетевые вычисления.
  • JS, ActionScript, сценарий VB и Java часто используются для компьютерных эксплойтов. Эксплойт использует слабое место в операционной системе, приложении или любом другом программном коде, включая плагины приложений. Эти эксплойты бывают всех форм и размеров, но некоторые из наиболее распространенных - это атаки с использованием SQL-инъекций (метод внедрения кода) и межсайтовые сценарии (вредоносные сценарии, внедряемые на доверенные веб-сайты).
  • Для удаленных атак на серверы среди хакеров популярен язык Python. Он проще, чем язык C, и его не нужно компилировать, что означает перевод файлов исходного кода в другие типы кода.
  • Для вредоносных программ высокого уровня обычно используются C #, C ++ и другие языки высокого уровня. Этот тип вредоносного ПО более сложен, чем обычный вирус, и для его разработки может потребоваться значительное время. Примером может служить атака вредоносного ПО в торговых точках на розничного продавца Target в США в 2013 году. По оценкам, у 110 миллионов клиентов были украдены номера карточных счетов, даты истечения срока действия и секретные коды CVV.
  • Многие мобильные приложения для Android разрабатываются с использованием языка Java, а иногда и с небольшим количеством языков C и C ++. В результате хакеры склоняются к Java при нацеливании на мобильные устройства.

Продается в даркнете
Не все хакеры - программисты. Многие просто заходят в даркнет и покупают вредоносное ПО, созданное другими.

Например, за последние 18 месяцев резко выросло количество случаев использования программы-вымогателя как услуги в темной сети.
  • Хакеры высокого уровня используют свой любимый код для создания программ-вымогателей, а затем размещают их на портале.
  • «Партнер», то есть хакер низкого уровня, подписывается на использование программы-вымогателя.
  • Некоторые из этих пакетов кода вымогателей можно бесплатно развернуть с использованием модели распределения прибыли. Автор кода участвует в прибылях аффилированных лиц.
  • Когда жертвы платят (через биткойны), чтобы разблокировать свои данные, платежи часто поступают на счет автора.
  • Затем автор распределяет акции среди аффилированных лиц. Эти доли могут достигать 80 процентов.
 

Enzo.

Carder
Messages
32
Reputation
0
Reaction score
30
Points
18

РАДИ ЧЕГО СТОИТ ИЗУЧАТЬ АССЕМБЛЕР?​

Стоит освоить ассемблер, если ты хочешь:


  • разобраться, как работают компьютерные программы. Разобраться в деталях, на всех уровнях, вплоть до машинного кода;
  • разрабатывать программы для микроскопических встраиваемых систем. Например, для 4-битных микроконтроллеров;
  • понять, что находится под капотом у языков высокого уровня;
  • создать свой собственный компилятор, оптимизатор, среду исполнения JIT, виртуальную машину или что‑то в этом роде;
  • ломать, отлаживать или защищать компьютерные системы на самом низком уровне. Многие изъяны безопасности проявляются только на уровне машинного кода и могут быть устранены только с этого уровня.
Не стоит осваивать ассемблер, если ты хочешь ускорить другие свои программы. Современные оптимизирующие компиляторы справляются с этой задачей очень хорошо. Ты вряд ли сможешь обогнать их.


КТО ВЫДАСТ ЛУЧШИЙ АССЕМБЛЕРНЫЙ КОД?​

Почему обогнать компилятор практически невозможно? Смотри, для тебя же очевидно, что компьютер в шахматы не обыграть, даже если ты играешь лучше, чем создатель шахматной программы? С оптимизирующими компиляторами та же история. Только оптимизирующий компилятор играет не шахматными фигурами, а контекстными обстоятельствами.

В современных процессорах практически ничто из того, что влияет на производительность, нельзя обсуждать в отрыве от контекста. Одна и та же комбинация из десятка ассемблерных инструкций выполняется с резкими отличиями по скорости (в тысячи или даже миллионы раз), в зависимости от целой кучи самых разнообразных обстоятельств.

  • Те данные, к которым ты сейчас обращаешься, загружены в кеш или нет? А сама комбинация ассемблерных инструкций?
  • Если ни данные, ни код не размещены в кеше, то не перетаскивает ли их процессор туда втихомолку, предполагая, что к ним будут обращаться в ближайшее время?
  • Какие инструкции были выполнены непосредственно перед нашим десятком? Они сейчас все еще на конвейере?
  • Мы случаем не достигли конца текущей страницы виртуальной памяти? А то, не дай бог, добрая половина нашего десятка попадет на новую страницу, которая к тому же сейчас, по закону подлости, вытеснена на диск. Но если нам повезло и новая страница таки в физической памяти, можем ли мы добраться до нее через TLB-буфер? Или нам придется продираться к ней через полный адрес, используя таблицы страниц? И все ли нужные нам таблицы страниц загружены в физическую память? Или какие‑то из них вытеснены на диск?
  • Какой именно процессор выполняет код? Дешевенький i3 или мощный i7? Бывает, что у дешевых процессоров тот же набор инструкций, что и у мощных, но продвинутые инструкции выполняются в несколько шагов, а не за один.
И все это только верхушка айсберга, малая часть того, что тебе придется учитывать и анализировать, когда будешь стараться переиграть компилятор.

Есть такой миф, что программы, написанные на ассемблере, работают в десять раз быстрее. Этот миф уходит корнями в семидесятые годы. Компиляторы в те далекие времена генерировали код настолько бездарно, что у каждого уважающего себя программиста был черный список запрещенных языковых конструкций.

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

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

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

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

В итоге ты потратишь в десятки и сотни раз больше времени, чем если бы доверился оптимизирующему компилятору, — но результат, скорее всего, окажется медленнее, а не быстрее.

При этом иногда оптимизирующий компилятор выплевывает ассемблерный код, логика которого ну совсем непонятна. Однако не спеши обвинять компилятор в глупости. Давай разберем пример.

Когда ты пишешь на С что‑то вроде x = a*2 + b*3, то естественным образом ожидаешь увидеть в ассемблере инструкцию, которая умножает переменную a на двойку. Но компилятор знает, что сложение дешевле умножения. Поэтому он не умножает a на двойку, а складывает ее с самой собой.

Больше того, глядя на b, компилятор может счесть, что b + b + b предпочтительнее, чем b*3. Иногда тройное сложение быстрее умножения, иногда нет. А иногда компилятор приходит к выводу, что вместо исходного выражения быстрее будет вычислить (a + b)*2 + b. Или даже ((a + b)<<1) + b.

А если x используется лишь однократно — причем в связке с парой строк последующего кода, — компилятор может вообще не вычислять x, а просто вставить a*2 + b*3 вместо икса. Но даже если x используется и компилятор видит что‑то вроде y = x – b*3, он может исправить эти расчеты на y = a + a, удивляясь твоей расточительности. Расточительности в плане вычислительной сложности.

Размышления подобного рода неизбежно заводят тебя в запутанный лабиринт альтернативных вариантов. Все их нужно просчитать, чтобы выбрать лучший. Но даже когда ты сделаешь это, вариант ассемблерного кода, сгенерированный компилятором, скорее всего, будет работать быстрее, чем твой.

Кстати, если используешь GCC или Clang, активируй опции оптимизации для SSE, AVX и всего остального, чем богат твой процессор. Затем откинься на спинку кресла и удивись, когда компилятор векторизует твой сишный код. Причем сделает это так, как тебе и не снилось.


КАКИЕ ПРОГРАММЫ НЕЛЬЗЯ НАПИСАТЬ НА АССЕМБЛЕРЕ?​

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

Ты при желании можешь написать на ассемблере даже веб‑сайт. В девяностые С был вполне разумным выбором для этой цели. Используя такую вещь, как CGI BIN, веб‑сервер мог вызывать программу, написанную на С. Через stdin сайт получал запрос, а через stdout отправлял результат в браузер. Ты можешь легко реализовать тот же принцип на ассемблере.

Но зачем? Ты должен быть мазохистом, чтобы проделывать такое. Потому что когда ты пишешь на ассемблере, то сталкиваешься вот с такими проблемами.

  • У тебя более низкая продуктивность, чем если бы ты работал на языке высокого уровня.
  • У твоего кода нет никакой структуры, поэтому другим разработчикам будет трудно читать его.
  • Тебе придется писать много букв. А там, где больше букв, больше потенциальных багов.
  • С Secure Coding здесь все очень печально. На ассемблере писать так, чтобы код был безопасным, сложнее всего. На С в этом плане ты чувствуешь себя куда более комфортно.
Да, все можно написать на ассемблере. Но сегодня это нецелесообразно. Лучше пиши на С. Скорее всего, будет безопаснее, быстрее и более лаконично.

От редакции​

Автор статьи — большой поклонник С и настоятельно рекомендует этот язык. Мы не будем лишать его такой возможности. С — отличная штука и помогает как освоить основные концепции программирования, так и прочувствовать принципы работы компьютера. Однако при выборе языка для изучения ты можешь руководствоваться самыми разными соображениями. Например:
  • Надо учить Python или Lua, чтобы моментально получать результаты. Это мотивирует!
  • Надо учить Scheme или Haskell из тех же соображений, что в школе учат алгебру, а не, к примеру, автомеханику.
  • Надо учить Go для того же, для чего C, но в 2020 году.
  • Надо учить JavaScript и React.js, чтобы как можно быстрее найти работу.
  • Надо учить Java, чтобы максимизировать заработок.
  • Надо учить Swift, потому что почему нет?
  • Надо учить HolyC, чтобы славить Господа.
  • Надо учить Perl во имя Сатаны.
И так далее. Ответ на вопрос о том, с какого языка начать, зависит от многих факторов, и выбор — дело индивидуальное.
Конечно, когда ты знаешь ассемблер, у тебя будут значительные преимущества перед теми программистами, которые его не знают. Но прежде чем ознакомиться с этими преимуществами, запомни одну простую вещь: хорошие программисты знают ассемблер, но почти никогда не пишут на нем.


КАКИЕ ПРЕИМУЩЕСТВА АССЕМБЛЕР ДАЕТ ПРОГРАММИСТУ?​

Чтобы писать эффективные программы (в плане быстродействия и экономии ресурсов), тебе обязательно надо знать ассемблер того железа, для которого ты пишешь. Когда ты знаешь ассемблер, ты не обманываешься внешней простотой и краткостью высокоуровневых функций, а понимаешь, во что в итоге превращается каждая из них: в пару‑тройку ассемблерных инструкций или в длиннющую их последовательность, переплетенную циклами.

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

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

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

И вот еще тонкий намек: некоторые работодатели хотели бы видеть в твоем резюме слово «ассемблер». Это говорит им, что ты не просто по верхам нахватался, а действительно интересуешься программированием, копаешь вглубь.


СТОИТ ЛИ НАЧИНАТЬ ИЗУЧАТЬ ПРОГРАММИРОВАНИЕ С АССЕМБЛЕРА?​

Когда ты осваиваешь программирование, начиная с самых низов, в этом есть свои плюсы. Но ассемблер — это не самый низ. Если хочешь начать снизу, начни с логических вентилей и цифровой электроники. Затем поковыряйся с машинным кодом. И только потом приступай к ассемблеру.

Время от времени тебя будут посещать мысли, что ты занимаешься какой‑то ерундой. Но ты узнаешь много полезного для своей будущей работы, даже если она будет связана только с языками высокого уровня. Ты узнаешь, как именно компьютер делает те вещи, которые он делает.

Однако я бы не советовал начинать с ассемблера и более низких слоев. Во всем том, что перечислено в двух предыдущих абзацах, легче разобраться, когда ты начинаешь с какого‑нибудь языка высокого уровня. Так ты достигнешь желаемого результата быстрее, чем оно тебе наскучит.

Но в какой‑то момент тебе и правда обязательно надо познакомиться с ассемблером, особенно если программируешь на С. Я сомневаюсь, что ты сможешь стать полноценным программистом на С, не зная ассемблера. Но начинать с ассемблера не стоит.


НАСКОЛЬКО ЛЕГЧЕ УЧИТЬ ДРУГИЕ ЯЗЫКИ, КОГДА УЖЕ ЗНАЕШЬ АССЕМБЛЕР?​

Ассемблер совершенно не похож на языки высокого уровня. Поэтому народная мудрость «Тот опыт, который ты получил на одном языке, может быть легко сконвертирован на другой язык» с ассемблером не работает.

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

Чем же ассемблер отличается от языков высокого уровня? Переменные в нем — это просто области памяти. Здесь нет ни int, ни char. Здесь нет массивов!

Есть только память. Причем ты работаешь с ней не так, как на языке высокого уровня. Ты можешь забыть, что в какую‑то область памяти поместил строку, и обратиться к ней как к числу. Программа все равно скомпилируется. Но только обрушится в рантайме. Причем обрушится жестко, без вежливого сообщения об ошибке.

В ассемблере нет do..until, нет for..next, нет if..then. Вместо них там есть только операции сравнения и условного перехода. Строго говоря, там даже функций нет.

Но! Изучив ассемблер, ты будешь понимать, как реализуются и функции, и циклы, и все остальное. А разница между передачей параметра «по значению» и «по ссылке» станет для тебя самоочевидной. Плюс если ты пишешь на С, но не можешь до конца разобраться, как работают указатели, то, когда ты узнаешь, что такое регистры и относительная адресация, увидишь, что понять указатели совсем нетрудно.

Лучше начинай с С. На нем удобно осваивать основы: переменные, условия, циклы, логические построения и остальное. Опыт, который ты получишь при изучении С, легко сконвертировать на любой другой язык высокого уровня, будь то Java, Python или какой‑то еще. Да и с ассемблером легче разобраться, когда ты уже освоил С.
(c)xaker.ru
 

MuneyJordan

Carder
Messages
36
Reputation
0
Reaction score
21
Points
8
нормальная малварь пишется только на чистом си.
зы. асм нужно только понимать, а не писать на нём.
 
Top