March 5

Как стать хакером.

Очень много новичков задают мне вопрос: "С чего начать изучать хакинг?" Сегодня я развёрнуто на него отвечу.

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

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

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

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

Первым делом на что стоит обратить внимание в этом длительном путешествии это английский язык. Для начала вам нужно изучить именно его. На английском языке в СОТНИ раз больше информации, чем на русском, либо любом другом, к тому же эта информация также более качественная и самая новая (на русский язык эту информацию переводят только лишь через пару лет, а то и вообще не переводят). С английским языком ваша скорость обучения повысится в несколько раз, ведь там больше контента, вы сможете подобрать себе обучающий материал по интересу, найти хорошие блоги и каналы, книги и курсы, потому что есть выбор, на русском же языке выбора меньше в десятки раз. Также вы сможете находить полезные знакомства именно на английском языке заранее, это выгодно тем, что в англоязычных странах всегда крутится больше денег, за одни и те же действия вы получите минимум в 5 раз больше, чем если бы вы делали эти действия в русскоязычной стране, потому что англоязычные люди богаче. Поэтому запомните - английский язык это основа основ.

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

После этого вам нужно будет понять что такое компьютер, из чего он состоит, для чего нужен каждый из его компонентов, за что отвечает и как компоненты общаются между собой. Изучая это вы столкнётесь с рядом понятий изучив которые у вас появится хоть какое-то понимание. Начните с самых базовых вещей, таких как организация железа и архитектура ЭВМ (электронно вычислительных машин, проще говоря компьютеров).

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

После того, как вы будете понимать саму идею программирования, то можно будет переходить уже к другим вещам, изучению компьютерных сетей. Всё так или иначе работает через интернет и повсюду используются сетевые технологии. Вам нужно будет изучить как всё это дело было придумано и как работает на данный момент. Здесь вам нужно будет начать с того, что такое вообще интернет и как он работает. Изучая это вы узнаете, что такое TCP/IP и система OSI. Если говорить простым языком, то это такие штуки, которые позволяют одному компьютеру общаться с другим, причём неважно в какой точке мира эти компьютеры находятся. Когда я пишу общаться, то я не имею ввиду просто передачу каких-то простых сигналов, а я подразумеваю ряд задач, которые реализуются на разных уровнях этих моделей. То есть, модель TCP/IP делится на несколько уровней и каждая из них отвечает за какое-то действие, например, какая информация будет доставлена из точки A в точку B, как она будет доставлена и более детальные моменты по типу, как она будет приниматься, парситься и тому подобное.

Следующий фундаментальный момент в сетях это сокеты. То есть, модели протоколов это некий регламент, а сокеты это те сущности, где этот регламент реализуется. Говоря простым языком, сокеты это некие двери в ваш компьютер извне и через эту дверь вы передаёте и получаете данные. Сокеты уже запрограммированны вашей операционной системой и вам нужно будет научиться ими пользоваться. Модели протоколов и сокеты это две базовых составляющих сети, которые тесно связаны. Вам нужно будет знать и понимать принцип работы http (протокола веб приложений), также вам нужно будет разбираться в дополнительных уровнях протоколов, таких как SSL, TLS, UDP и так далее.

Вам нужно будет изучить операционные системы. Для начала нужно будет разобраться что такое операционная система и какие их виды бывают. Изучить как операционные системы работают с железом и понимать процесс загрузки вашего компьютера. После этого вам нужно изучить как работают операционные системы изнутри, понять детально их работу, какие существуют папки и каталоги, компоненты и файлы, а также за что они отвечают. Без этого вы не сможете нормально кодить системный софт, то есть программы, которые затем вы захотите запускать в какой-либо операционной системе, сюда входят как полезные программы, так и вирусы. Особенное внимание вам нужно будет уделить ОС Linux и общению с shell - это программа, которая позволит вам общаться с операционной системой на "ты", проще говоря терминал.

Далее вам нужно изучить, что такое домены, их уровни, что такое хостинг. Понятие порта, что такое проброс портов и зачем это нужно делать. Принцип ddos атак. Зачем нужен фаервол и почему программы просят вас его отключить.

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

Языки программирования так или иначе похожи. Изучив один из них, следующий вы сможете изучить уже раз в 10 быстрее. Чем больше языков вы будете знать, тем легче будете учить следующий. Касаемо языков программирования вам необходимо знать что такое структуры данных и зачем они нужны, как работают переменные, типы данных, что такое константы и литералы, операторы и операнды, инструкции по контролю поведения кода, функции, параметры функций, способы передачи параметров в эти функции, принцип работы компилятора, лексический анализ, синтаксическое дерево, парсер, генератор кода, токен, рекурсия, класс, объект, наследование, полиморфизм, композиция, принцип многопоточного программирования, понятие алгоритмов и что такое абстракция, какие виды алгоритмов существуют и зачем они нужны. Далее, на что следует обратить внимание это системы счисления и хранение данных, то есть двоичные, восьмиричные и шестнадцатиричные системы, что это такое и зачем это всё нужно. Далее нужно будет понять принцип работы булевых операций на уровне железа, узнать что такое триггеры и транзисторы, как работает память, её организация, какие виды памяти существуют. Говоря о хранении данных, нужно понимать различие между винчестером и SSD. Иметь представление о том, как представляются данные в виде двоичного кода, такие данные как изображение, видео, звук, текст. Кодирование этих данных абсолютно разное и это нужно понимать и знать. Иметь представление как хранятся числа в памяти, целые и с плавающей точкой. Знать что такое сжатие данных, разницу между сжатием изображений, видео и аудио. Далее вам нужно будет изучить как манипулировать данными из железки, основу компьютерной архитектуры, как работает процессор, из чего он состоит и его взаимодействие с остальными частями системы. Понимать принцип исполнения программ на уровне железки, знать что такое пайплайн, конвеер, понимать что такое многопроцессорная архитектура, что такое машинный язык и зачем он нужен, логические операции и операции побитовых сдвигов.

Знать как реализована и работает коммуникация с другими устройствами в системе, то есть коммуникация памяти, процессоров, контроллеров и устройств, которые привязаны к ним, то есть модем, монитор, жёсткий диск, джойстик и так далее. Что такое контроллер и зачем он нужен. Коммуникационные рейты, то есть что такое бит, байт, килобайт, разница килобайта и килобита, зачем это нужно и как это было придумано. Нужно изучить архитектуру операционной системы, её компоненты и их взаимодействие. Понимать, что такое шелл, файловый менеджер, что такое менеджер устройств, менеджер памяти, что такое виртуальная память и пейджинг, процесс запуска операционной системы и в чём разница между user mode и kernel mode. Концепция процесса, понимание разницы между программой и процессом, как реализована многопоточность и что такое прерывание, то есть понимать шаги которые выполняет процессор во время прерывания. В контексте программирования вам нужно будет выучить сортировки, поиски, сжатия, нахождение кратчайших путей, работу с разными структурами данных, графами, деревьями и так далее, фибоначи, динамическое программирование.

Вам нужно будет иметь представление о тестировании и понимать зачем вообще нужны тесты, заставлять себя продумывать архитектуру перед тем как писать свой софт, ставить требования перед написанием софта чтобы не придумывать их на ходу, то есть у вас должна быть какая-то фиксированная задача и план её выполнения. Знать что такое uml диаграммы и как их использовать. На самом деле этот список я могу продолжить но я не стану этого делать, потому что после изучения всего этого, вы сами поймёте куда двигаться дальше. Вы должны понимать, что написание любого софта это такая же наука как создание самолётов, то есть их не делают на пофиг. Вам нужно знать что такое арифметика поинтеров, знать что такое умные указатели и зачем они нужны, вам нужно знать что такое побитовые сдвиги, прямой и обратный код, что такое big-endian и зачем он нужен.

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

Далее остаётся лишь практиковаться в написании кода.

Параллельно с этим вам нужно изучить какие существуют типы вирусов и для чего они предназначены, как работают антивирусы и как обойти их защиту. Что такое анонимность и безопасность, как работает сеть TOR, VPN, proxy, дедик, MAC адрес, идентификаторы операционной системы, браузерные отпечатки. Вы должны будете изучить, что такое криптовалюта, как она работает, а также механизмы отмыва и анонимизиции ваших финансов. Психологию, чтобы мастерски владеть социальной инженерией. Вам нужно будет изучить как работает радиосвязь, IP телефония, а также сотовые вышки. Изучить криптографию и шифрование.

Конечно же вам нужно понимать, что я перечислила не все вещи, которые вам нужно будет изучить, а лишь те 20-30%, с чего вам стоит начать свой путь в мир хакинга и маячки куда вам нужно двигаться. И постепенно, идя по этому пути, он будет вам шаг за шагом открываться.