Как стать автором
Обновить
4
0

Пользователь

Отправить сообщение

SLAE — Security Linux Assembly Expert Exam

Время на прочтение19 мин
Количество просмотров5.4K
image

Security Linux Assembly Expert — онлайн-курс и экзамен по основам 32-битного языка ассемблера процессоров семейства Intel в Linux-системах в контексте информационной безопасности. Курс будет полезен пентестерам, инженерам по информационной безопасности и всем, кто желает разобраться в основах ассемблера и научиться писать простые шеллкоды. После прохождения курса вы научитесь пользоваться основными системными вызовами Linux'a, писать простые шеллкоды, начнете понимать базовые принципы работы операционной системы на уровне ядра. В данной статье будут рассмотрены задания, необходимые для прохождения экзамена по этому курсу.

По условиям экзамена необходимо выполнить 7 заданий:

  1. Написать TCP Bind Shell
  2. Написать Reverse TCP Shell
  3. Разобраться с техникой egghunter и предоставить пример этой техники
  4. Написать кодировщик кода
  5. Проанализировать 3 шеллкода, сгенерированных msfvenom'ом при помощи GDB/ndisasm/libemu
  6. Выполнить полиморфное преобразование 3 любых шеллкодов и shellstorm'а.
  7. Написать шифровальщик кода
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии3

5 малоизвестных секретов Pandas

Время на прочтение5 мин
Количество просмотров19K

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

Для новичков: Pandas — это высокопроизводительный набор инструментов для анализа данных на Python с простыми и удобными структурами данных. Название произошло от понятия «panel data», эконометрического термина, которым называют данные о наблюдениях одних и тех же субъектов в течение разных периодов времени.

Здесь можно скачать Jupyter Notebook с примерами из статьи.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+45
Комментарии2

Дорожная карта математических дисциплин для машинного обучения, часть 2 (вероятности)

Время на прочтение6 мин
Количество просмотров23K

Вместо введения


Давным давно была первая часть, теперь настало время для второй части! Здесь затронем вопросы, связанные с теорией вероятностей.

Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии12

Визуализация линий напряженности и движений электростатических зарядов, симулирование движения планет солнечной системы

Время на прочтение3 мин
Количество просмотров19K
Привет, сегодня я хочу вам предложить наглядное пособие по моделированию некоторых физических процессов и показать как получить красивые изображения и анимации. Осторожно много картинок.

Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии66

От Junior'a до Middle'a: Парсер

Время на прочтение2 мин
Количество просмотров11K
Здраствуйте, Хабровчане! Давно было желание написать статейку, но никак не осмеливался.
В моей серии постов будет описан мой путь от Junior'a до Middle'a, а потом возможно даже до Senior'a. Программировать будем на Python.

P.S. Документация к некоторым малоизвестным библиотекам будет прикреплена в конце.

Кратко о себе: Python начал изучать два года назад, особых продвижений не было.
Разочарованием стали сами основы, поскольку учил я их полтора года. Сейчас же углубленно изучаю язык, понимаю его структуру и как все происходит. В следующих статьях буду выкладывать код, использую все новые, и новые библиотеки, а их как вы знаете у питона очень много :)

С чего бы начать? Пару месяцев назад я написал свой первый парсер. Оказалось, что писать парсеры довольно просто и на них даже можно зарабатывать. Пока что покажу пару примеров, используя стек из bs4 + requests. Парсить будем наш любимый Хабр.
Читать дальше →
Всего голосов 18: ↑8 и ↓10+4
Комментарии29

Необычные системные вызовы на Linux

Время на прочтение17 мин
Количество просмотров24K

ls /usr/share/man/man2/


Что видит программист, начиная работать с языком C? Он видит fopen, printf, scanf и ещё много других функций. Видит он и всякие open и mmap — казалось бы, зачем их выделять? Но, в отличие от первой группы, эти две функции при выполнении на ядре Linux являются системными вызовами (на самом деле нет, почти никогда системный вызов нельзя просто вызвать как функцию, и поэтому libc содержит обёртки, перепаковывающие аргументы и иногда, как в случае с тем же open, заменяющие старые системные вызовы более общими новыми). Вообще, в отличие от тысяч библиотечных функций, доступных на типичной GNU/Linux системе, интерфейс ядра имеет довольно ограниченное количество точек входа — порядка нескольких сотен, зато то, что для user space — crash (например, обращение к отсутствующей странице), для ядра — default mode of operation.


В этой статье я расскажу некоторые интересные на мой взгляд факты. В ней не будет futex-ов и прочих скучных (наверное) деталей реализации. Будет преимущественно то, что вызывало у меня реакцию «А что, так можно было?!?».

Читать дальше →
Всего голосов 64: ↑64 и ↓0+64
Комментарии8

Алгоритм нечеткого поиска TextRadar. Основные подходы (ч. 1)

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

Постановка задачи


Даны строка данных и строка поиска как произвольные наборы символов, состоящие из слов – групп символов, разделенных пробелами.

Требуется найти в строке данных наиболее близкий к строке поиска по составу и взаимному расположения символов набор фрагментов.

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

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

Описание алгоритма


Поиск осуществляется в несколько этапов.

Построение матрицы совпадений


Матрица совпадений (M) представляет собой двумерную матрицу, количество столбцов которой соответствует длине строки данных, а количество строк – длине строки поиска. Элементы матрицы совпадений принимают значения 0 или 1 в зависимости от того, совпадают или нет соответствующие символы строк за исключением пробелов (разделителей слов).
Матрица совпадений для строки данных «ABCD EF» и строки поиска «ABC» имеет вид:

image
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии16

Пишем первое приложение для Samsung Smart Watch и OS Tizen

Время на прочтение7 мин
Количество просмотров30K
Привет Хабр! В недавней публикации описывались первые впечатления от смарт-часов Samsung Galaxy Watch, работающих под ОС Tizen. Следующим шагом стало интересно выяснить, как разрабатывать под эту систему собственные приложения, как на эмуляторе, так и на реальных часах.


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

Осторожно траффик, много скриншотов.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии2

Квазиньютоновские методы, или когда вторых производных для Атоса слишком много

Время на прочтение10 мин
Количество просмотров8.1K
При первом знакомстве с квазиньютоновскими методами можно удивиться дважды. Во-первых, после беглого взгляда на формулы охватывают сомнения, что это вообще может работать. Однако же они работают. Дальше кажется сомнительным, что они будут работать хорошо. И тем удивительнее видеть то, насколько они превосходят по скорости разнообразные вариации градиентного спуска, причем не на специально построенных задачах, а на самых настоящих, взятых из практики. И если после этого еще остаются сомнения вперемешку с интересом — то нужно разбираться в том, почему вообще работает это нечто.
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии3

Ох уж этот метод Ньютона

Время на прочтение8 мин
Количество просмотров34K
О методах численной оптимизации написано много. Это и понятно, особенно на фоне тех успехов, которые в последнее время демонстрируют глубокие нейронные сети. И очень отрадно, что хотя бы часть энтузиастов интересуется не только тем, как забомбить свою нейросеточку на набравшей в этих ваших интернетах популярность фреймворках, но и тем, как и почему все это вообще работает. Однако мне в последнее время пришлось отметить, что при изложении вопросов, связанных с обучением нейросетей (и не только с обучением, и не только сетей), в том числе на Хабре, все чаще впроброс используется ряд “хорошо известных” утверждений, справедливость которых, мягко говоря, сомнительна. Среди таких сомнительных утверждений:

  1. Методы второго и более порядков плохо работают в задачах обучения нейросетей. Потомучто.
  2. Метод Ньютона требует положительной определенности матрицы Гессе (вторых производных) и поэтому плохо работает.
  3. Метод Левенберга-Марквардта — компромисс между градиентным спуском и методом Ньютона и вообще эвристичекий.

и т.д. Чем продолжать этот список, лучше перейдем к делу. В этом посте рассмотрим второе утверждение, поскольку его я только на Хабре встречал как минимум дважды. Первый вопрос затрону только в той части, что касается метода Ньютона, поскольку он куда более обширен. Третий и остальные оставим до лучших времен.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии14

Алгоритмы обнаружения контуров изображения

Время на прочтение20 мин
Количество просмотров25K
В статье представлены четыре самых распространённых алгоритма обнаружения контуров.

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

Данные алгоритмы будут игнорировать все «дырки» в паттерне. Например, если у нас есть паттерн, подобный показанному на Рисунке 1, то обнаруженный алгоритмами контур будет похож на показанный на Рисунке 2 (синими пикселями обозначен контур). В некоторых областях применения это вполне допустимо, но в других областях, например, в распознавании символов, требуется обнаружение внутренних частей паттерна для нахождения всех пробелов, отличающих конкретный символ. (На Рисунке 3 показан «полный» контур паттерна.)

image


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

image
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии3

50 оттенков matplotlib — The Master Plots (с полным кодом на Python)

Время на прочтение39 мин
Количество просмотров395K
Те, кто работает с данными, отлично знают, что не в нейросетке счастье — а в том, как правильно обработать данные. Но чтобы их обработать, необходимо сначала проанализировать корреляции, выбрать нужные данные, выкинуть ненужные и так далее. Для подобных целей часто используется визуализация с помощью библиотеки matplotlib.



Встретимся «внутри»!
Читать дальше →
Всего голосов 67: ↑67 и ↓0+67
Комментарии15

Must-have алгоритмы машинного обучения

Время на прочтение5 мин
Количество просмотров31K
Хабр, привет.

Меня зовут Рушан, и я автор Telegram‑канала Нейрон. Не забудьте поделиться с коллегами или просто с теми, кому интересны такие статьи. Этот пост — краткий обзор общих алгоритмов машинного обучения. К каждому прилагается краткое описание, гайды и полезные ссылки.

Метод главных компонент (PCA)/SVD


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

image

SVD — это способ вычисления упорядоченных компонентов.

Полезные ссылки:


Вводный гайд:

Читать дальше →
Всего голосов 38: ↑31 и ↓7+24
Комментарии6

Какие закономерности находят нейросети?

Время на прочтение6 мин
Количество просмотров9.1K
В этом посте я хочу рассказать о закономерностях, которые могут находить нейросети. Во многих руководствах для начинающих акцент делается на технике написания кода для нейронных сетей, при этом вопросы «логики» (что могут нейросети? какие архитектуры лучше подходят для каких задач и почему?) часто остаются в стороне. Я надеюсь, мой пост поможет начинающим лучше понять возможности нейронных сетей. Для этого мы попробуем посмотреть, как они справляются с некоторыми модельными задачами. Примеры кода будут приводиться на python с использованием библиотеки keras.

Задача 1. Начнём с простого. Построим нейронную сеть, аппроксимирующую синус.

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense


def get_X_y(n):
    X = np.random.uniform(0, np.pi, n)
    y = np.sin(X)
    return X, y


n = 40
X, y = get_X_y(n)
print("X shape:", X.shape)

model = Sequential()
model.add(Dense(6, input_dim=1, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])

model.fit(X, y, epochs=1000, batch_size=4)

X_test = np.linspace(start=0, stop=np.pi, num=500)
print("X test shape:", X_test.shape)
y_test = model.predict(X_test)

font = {'weight': 'bold',
        'size': 25}

matplotlib.rc('font', **font)
axes = plt.gca()
axes.set_ylim(0, 1)
plt.plot(X_test, y_test, c='green', marker='o', markersize=5)
plt.title("Sinus approximated by neural network")
plt.yticks(np.arange(0, 1, 0.1))
plt.grid()
plt.show()

Получаем следующий график:



Как видим, нейронная сеть успешно справилась с задачей аппроксимации несложной функции.
Читать дальше →
Всего голосов 38: ↑17 и ↓21-4
Комментарии7

Угадай меня, если сможешь: прогнозирование рейтинга фильма до его выхода

Время на прочтение5 мин
Количество просмотров8.3K
Недавно мне на глаза попался датасет на Kaggle с данными о 45 тысячах фильмов с Full MovieLens Dataset. Данные содержали не только информацию об актерах, съемочной команде, сюжете и т.п., но и оценки, выставленные фильмам пользователями ресурса (26 миллионов оценок от 270 тыс.пользователей).

Стандартная задача для таких данных — это рекомендательная система. Но мне в голову почему-то пришло прогнозирование рейтинга фильма на основе информации, доступной до его выхода. Я не знаток кинематографа, и поэтому обычно ориентируюсь на рецензии, выбирая что посмотреть из новинок. Но ведь рецензенты тоже несколько biased — они-то смотрят гораздо больше разных фильмов, чем рядовой зритель. Поэтому спрогнозировать, как оценит фильм обычная публика, показалось занятным.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии8

Линейная регрессия и методы её восстановления

Время на прочтение5 мин
Количество просмотров19K
image
Источник: xkcd

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

Но в этой статье речь пойдет не про применение линейной регрессии для решения практических задач. Здесь будут рассмотрены интересные особенности реализации распределенных алгоритмов её восстановления, с которыми мы столкнулись при написании модуля машинного обучения в Apache Ignite. Немного базовой математики, основ машинного обучения и распределенных вычислений помогут разобраться, как восстанавливать линейную регрессию, даже если данные распределены между тысячами узлов.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии10

ООП, «святая троица» и SOLID: некоторый минимум знаний о них

Время на прочтение43 мин
Количество просмотров115K

Необходимое вступление


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


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


Столь малые гарантии поднимают вопросы о причинах, по которым статья пишется. Я считаю, что этим вещам должны учить везде, где учат программированию, вплоть до уроков информатики в школах с углублённым её изучением. Тем не менее, для меня стала пугающе нормальной ситуация, когда я узнаю, что собеседник мой коллега, причём работающий уже не первый год, но про инкапсуляцию «что-то там слышал». Необходимость собрать всё это в одном месте и давать ссылку при возникновении вопросов зрела давно. А тут ещё и мой «pet-project» дал мне изрядно пищи для размышлений.


Тут мне могут возразить, что учить эти вещи в школе рановато, и вообще на ООП свет клином не сошёлся. Во-первых, это смотря как учить. Во-вторых, 70% материала этой статьи применимо не только к ООП. Что я буду отмечать отдельно.



Читать дальше →
Всего голосов 88: ↑82 и ↓6+76
Комментарии79

Расчет нулевой гипотезы, на примере анализа зарплат украинских программистов

Время на прочтение5 мин
Количество просмотров20K
Решил поделиться, да бы и самому не забывать, как можно использовать простые статистические инструменты для анализа данных. В качестве примера использовался анонимный опрос относительно зарплат, стажа и позиций украинских программистов за 2014 и 2019 год. (1)

Этапы анализа


  • Препроцессинг данных и предварительный анализ (кому интересно код тут)
  • Графическое представление данных. Функция плотности распределения.
  • Формулируем нулевую гипотезу (H0) (2)
  • Выбираем метрику для анализа
  • Используем метод bootstraping для формирования нового массива данных
  • Рассчитываем p-value (3) для подтверждения или опровержения гипотезы

Препроцессинг данных


После некоторых манипуляций (код тут), приводим данные в следующий вид:

# Строка здесь это отдельный результат опроса, колонки переменные.

display(data_14_1.head(), data_19_1.head())
print('Всего опрошенных программистов: \n \
      {} чел. в 14 году и {} в 19 году'.format(len(data_14_1), len(data_19_1)))


Читать дальше →
Всего голосов 27: ↑23 и ↓4+19
Комментарии50

Google News и Лев Толстой: визуализация векторных представлений слов с помощью t-SNE

Время на прочтение6 мин
Количество просмотров11K


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

Статья посвящена визуализации при помощи t-SNE рассчитанных Word2Vec многомерных векторных представлений слов. Визуализация позволит полнее понять принцип работы Word2Vec и то, как следует интерпретировать отношения между векторами слов перед дальнейшем использованием в нейросетях и других алгоритмах машинного обучения. В статье акцентируется внимание именно на визуализации, дальнейшее исследование и анализ данных не рассматриваются. В качестве источника данных мы задействуем статьи из Google News и классические произведения Л.Н. Толстого. Код будем писать на Python в Jupyter Notebook.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии9

Трюк с тригонометрией

Время на прочтение4 мин
Количество просмотров28K

Скорее всего, вам известны следующие соотношения еще со школы:


$\sin(\alpha + \beta) = \sin\alpha \times \cos\beta + \cos\alpha \times \sin\beta \\ \cos(\alpha + \beta) = \cos\alpha \times \cos\beta - \sin\alpha \times \sin\beta$


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


Читать дальше →
Всего голосов 99: ↑96 и ↓3+93
Комментарии28

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность