• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

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

    Запись на курс до 25 апреля. Получить промодоступ ...

[Что нам стоит покер-бот построить]Взгляд на проблему с высоты

mrOkey

Grey Team
14.11.2017
967
976
BIT
0
"Он служит мне, и это налицо,
И выбьется из мрака мне в угоду.
Когда садовник садит деревцо,

Плод наперед известен садоводу."
И.В. Гёте «Фауст»

Доброго времени суток, codeby.

Сегодня я расскажу об архитектурном решении покер-бота. Почитать первую часть о создании бота можно перейдя по этой ссылке. Очень сложно писать статью о программировании, архитектуре для разношёрстной аудитории. У всех вас разный уровень, но я хочу, чтоб каждый из вас меня понял, поэтому постарался рассказать всё очень просто, даже местами примитивно. Поэтому давай договоримся, всё то, что я буду разжёвывать до мелочей - я буду помещать под сплойлер. Но рассказать всё, что связано с архитектурой в одной статье – нереально, поэтому где-то вам придётся погуглить. Я всегда открыт для конструктивных вопросов и дискуссий, поэтому, welcome, не стесняемся. Мой ник в телеге @abcpoker. Давайте немного повысим ваши навыки.

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

- Что это вообще за зверь такой твой «покер-бот»?

- А что такое ваш ботнэт?

Уловил, мой пытливый друг? То, что мы с вами напишем будет мало чем отличаться от простого ботнэта. Что такое ботнэт в общем плане, с высоты птичьего полёта, так сказать? Это много-много заражённых компов, которые ждут команды от сервера\хозяина и выполняют какие-то действия. (Метафора с ботнетом, специально для скрипт-кидди, в общем-то мы напишем простое Rest-приложение на WebApi и клиента к нему)

Так что же такое покер-бот? Это некий комплекс, состоящий из сервера, базы данных и клиента. Клиент общается с сервером через http-запросы (освободит нас от лукавого антидетекта и открытия портов).

Я хочу написать хороший продукт, который потом можно будет легко расширять, добавляя новый функционал. Поэтому я буду придерживаться best practices таких как SOLID, паттерны проектирования и так далее. (о том, что такое Solid и паттерны можно написать отдельную статью ( а вообще книгу), поэтому я буду бегло и кратко пояснять на примере).


Давайте посмотрим на нашу задачу с очень большой высоты. Я нарисовал вам картинку:
1.png


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

Разделение ответственности для комплекса.

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

· Видеть карты

· Садиться за стол

· Сообщать о балансе и прочих радостях

· Жать кнопки

· Сообщать инфу о ситуации на столе серверу

Сервер. А вот сервер, должен-таки, думать и принимать решения, основываясь на предоставленной информации. Кроме того, он должен сообщать о них клиенту. (А как сервер должен принимать решения? Как мы научим машину думать? Что ж, ребятки, создам вам интерес, в следующей статье я погружу вас в мир исследований, мы будем воровать мозги у существующих в реальности игроков. Как мы это сделаем? Скажу только, что мы с вами будем использовать методы Data Mining’a, писать будем на питоне (но есть специальные программы для DataMininga, о них я тоже расскажу в кратце) и пройдёмся по базам PostgreSql. )

А пока, давайте просто договоримся, что есть 4 стадии ставок (префлоп, флоп, тёрн и ривер). Это четыре точки для принятия решения, стратегия игры на всех этих точках – разная. Наша задача, в соответствии с методологией «не палимся, что мы один человек» выдавать адекватные, человеческие (это важно), решения. Держите это в голове.

Теперь я представлю вам мой стэк технологий (для сервера).

В качестве языка у меня будет C#, код будет ну ооочень ООП, так что переписать его на ваш любимый питон не составит труда, а только вызовет интерес. Почему С#? Он же не кросс-платформенный(что в общем-то не так уже давно), ко-ко-ко. 100% клиентов для покер румов – приложения для винды.

В качестве технологии для сервера ASP.NET WebApi v4. Пятая версия не особо отличается (в смысле, в контексте наших действий, разницы не будет никакой) и тоже подойдёт для нашей цели. Для питона гуглите Django.

Первоначально в роли базы данных была MSSql, писать я тоже буду, опираясь на это, однако тут возможен простор - выберите, что душе угодно. Для обращения к бд я использовал Entity Framework 6. (Честно говоря, бд можно выпилить из комплекса, или посмотреть в сторону noSql)

В качестве взаимодействия между клиентом и сервером, мы будем использовать JSON формат в теле http запроса. (Создание SSL сертификатов в Wind’e хуже, чем пляска с бубном, ей богу, они были мне без особой надобности, но господа пентестеры могут заморочиться) .

Вместо заключения

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

В этой статье опять нет кода... Мне и самому жаль, но поверьте мне, написание кода – это последнее дело, всегда. Что бы сделать что-то годное, нужно хорошенько представлять себе – что мы делаем. Статья уже получилась достаточно объёмной – вы просто не воспримите код и бегло пролистаете, а этого не хочу. Давайте так, если эта статья наберет 20 лайков, я напишу статью в обход моему плану, где разберу каркас для сервера, основные классы для данных, подход к разработке (TDD + DDD), сделаю акцент на расширяемость, расскажу о Solid, фабрике и singleton’e. У меня не так много времени, а вы не любите ждать. В противном же случае в следующей статья я расскажу о «добыче мозгов». У меня скоро отпуск, так что возможно до конца декабря буду радовать вас скоростью написания статей.

[Введение] Что нам стоит покер-бот построить - [Введение] Что нам стоит покер-бот построить.
 
Последнее редактирование модератором:
R

Run

Автор ещё пожалуйста информации.!!!!!
 

mrOkey

Grey Team
14.11.2017
967
976
BIT
0
ладно, поди за сутки лайкнет кто-нить, напишу про код, как обещал. Почитайте пока про рефлексию, а то не поймёте)
 
  • Нравится
Реакции: jeromy и IioS
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!