---
# System prepended metadata

title: Тезисы для первой лекции по введению в CTF.

---

# Тезисы для первой лекции по введению в CTF.
(на самом деле немного о программировании)
Музон: https://music.yandex.ru/album/7727566
Что было в прошлый раз?
Инъекции. Инъекции идентификации.
OWASP TOP 10.

Ну теперь можно и к сегодняшней теме... Сегодня я вам расскажу о моей боли. Как у разработчика, у меня часто прогорает. Это происходит потому, что зачастую ctf'еры не считают себя разработчиками в команде и изобретают велосипеды.
## code-style
### Суть
Не так важно, как вы пишете код, главное - это его единообразие, чтобы по всему файлу (а лучше по всему проекту) конструкции были одинаковыми. Это важно не только для визуального анализа кода человеком. (Хотя это на первом месте). Это важно для тех, кто использует автоматический анализ.

### Горю
В качестве примера, могу привести себя, я часто использую макросы vim, которые позволяют мне проводить анализ исходного кода существенно быстрее. Для того, чтобы его задействовать, макросы я пишу каждый раз с заново, подстраиваясь под проект, над которым работаю. (Звучит хуже, чем выглядит, на самом деле). Это происходит на лету комбинацией клавиш и я не думаю об этом.

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

### Ещё суть
Главное, что нужно понимать - это то, что код пишется для людей. Машины стали достаточно умными, чтобы преобразовать код, удобный для людей, в код, эффективно работающий на машине.

#### Объяснить шутку на слайде

## Организация единой кодовой базы. Системы контроля версий.
### pre
Мы живём в прекрасное время, когда любому человеку доступны средства, которые позволяют ему делать качественный продукт на уровне крупных корпораций. 

Чем далее движется наука, тем больше люди тратят времени на мета-программирование. Ты не просто должен что-то сделать, ты должен ещё и описать, что ты сделал, как и когда. Это позволяет эффективнее переключаться между размыми частями проекта, или несколькими проектами.

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

### Суть

На самом деле они решают целый ворох проблем:
* ААААА, всё сломалося, верните как было! (git checkout, git reset, ...)
* С какого момента это сломалось? (git diff)
* Кто это сломал? (git blame)
* Сейчас на секунду отвлекусь... (git stash)
* У меня есть эта фича и эта фича, как мне их объеденить? (merge)
* Я закончил, нужно описать. (git commit)
* Нужно выпустить новую версию (разработчик) (git tag)
* Нужно доставить новую версию до пользователя (менеджер) (github/gitlab release)
* Пожар!!! (git commit; git push)

#### Кто-нибудь знает, в чём разница между git и github/gitlab?


### в конце
CI/CD на основе платформ. Автотесты. 

#### Прежде, чем переключать...
Кто-нибудь слышал о методологиях разработки? agile? scrum?

## Организация рабочего процесса
#### Scrum, trello, slack
\#модно_молодёжно

#### Waterflow, redmine
\#как_делают_олды

### А где  CTF, что за пургу ты несёшь??
discord, hackmd, тимбилдинг (ну это когда всё плохо и вы выходите на свежий воздух ебало бить друг другу), ctf - это дружба

### Анонс лекций далее (пт+сб+по_договорённости):

#### Web
- Вводная. HTTP. Браузер. Рендеринг(html, js и вот это все)
- Client-Side атаки. XSS, CSRF и так далее
- Server-Side атаки. Инъекции, IDOR, SSRF и все-все-все
- Как правильно делать веб и публиковать. БД. Вопросы

#### Сети. Суть сетей за одну лекцию

#### Misc
- Forensics. Трафик и Wireshark. Память и volatility
- Стеганография. Joy. PPC (олимпиадные задачки)

#### Криптография
- Введение. История. Древние шифры
- Симм. шифры
- Асимм. шифры

#### Reverse
- Введение в анализ ПО методом черного ящика. Различия интерпретируемых, компилируемых в маш. код и свой байт-код языков. Далее рассмотреть подробнее:
  - Эзотерические языки
  - Asm
  - mem corrupt
  - shellcode
  - …
О реверс-инженеринге можно говорить бесконечно долго, поэтому тут что успеем.

# Можно провести голосование за следующий блок лекций.