Перезапись буфера на стеке (Stackoverflow) | Защита Stack Canary | Протекция стека

#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog

Пікірлер: 117

  • @S0ERDEVS
    @S0ERDEVS4 жыл бұрын

    Еще больше закрытых материалов на www.patreon.com/soersoft Вы знали, что я пишу книгу? Так вот первая глава уже доступна для патронов.

  • @wolfich4684

    @wolfich4684

    4 жыл бұрын

    Как вы себя чувствуете? Мне всегда кажется что вы чувствуете сильную усталость и будто "воротит" от этого всего ? Но за инфу спасибо. Всегда авторская т.зр. и не слизана с других источников

  • @S0ERDEVS

    @S0ERDEVS

    4 жыл бұрын

    @@wolfich4684 прекрасно себя чувствую, просто я душный )

  • @ibl8587

    @ibl8587

    4 жыл бұрын

    да блин 10$ там минимум, дорого для меня

  • @rusnickk
    @rusnickk4 жыл бұрын

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

  • @den2242
    @den22424 жыл бұрын

    - в main добавить проверку argc для безопасной индексации массива argv - в checkPass принимать pass как const char* - проверка pass на NULL - можно вообще убрать result_flag, и вместо этого сразу возвращать результат проверки как return 0; или return 1; - ну и вместо strcpy и strcmp использовать strncpy strncmp, где третим аргументом передавать длину пароля :)

  • @kolyan199816

    @kolyan199816

    4 жыл бұрын

    В c++ еще можно пойти дальше и использовать strncpy_s ;)

  • @diceline1677

    @diceline1677

    4 жыл бұрын

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

  • @levix7859

    @levix7859

    4 жыл бұрын

    DiceLine если ты про использование этого, учи язык С. Если вообщем, это Computer science. Это раздел о памяти.

  • @iEfimoff

    @iEfimoff

    4 жыл бұрын

    локальная переменная result_flag была нужена для того чтобы перетереть значение при stackoverflow

  • @smolewood

    @smolewood

    19 күн бұрын

    Можно вообще обойтись без функции srtcpy и сразу в srtcmp передать аргумент строку: strcmp(pass, "some_pass");

  • @Rivrabobra
    @Rivrabobra4 жыл бұрын

    Видео по реверсу лучше всего заходят :)

  • @sunzd4937
    @sunzd49374 жыл бұрын

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

  • @TheNihaonyan

    @TheNihaonyan

    4 жыл бұрын

    Если ты не понимаешь, зачем ты его учил, то ты его в итоге не выучил, иначе бы как минимум понял, зачем

  • @sergbo3114

    @sergbo3114

    4 жыл бұрын

    @@TheNihaonyan Все когда молодые глупые по неопытности, и это не прям таки плохо, от этого никуда не деться, это нужно просто пережить. Придет время и ты узнаешь нужно это было или нет. Ну и отдельное слово по поводу нашей системы образования, у нас она "широкопрофильная". Вот пример из личной жизни: Родители у меня были не богатые, потому первое место послешкольного образования было ПТУ. Я учился, кто бы мог подумать на специальность "оператор компьютерного набора", да-да было такое. Это человек-печатная машина) Ну по сути это пользователь МС Офис) Так вот там мы учили паскаль. Скажите пожалуйста зачем? И там никто нас не спрашивал. И все от него стонали. Но так как с шестого класса лучший мой друг это паяльник, а в 9 я подключал уже самодельные контроллеры НЖМД, то это лично мне пришлось по вкусу)

  • @user-hx3qy5qp3e
    @user-hx3qy5qp3e4 жыл бұрын

    Спасибо за канал, Soer.

  • @__alexfox__
    @__alexfox__4 жыл бұрын

    Огромное спасибо! Очень хорошо рассказываешь и делишься ценными данными!

  • @pavelkostetskiy7561
    @pavelkostetskiy75614 жыл бұрын

    Спасибо за видос! Хотелось бы еще сказать отдельное спасибо за задачку про поиск ошибок в коде - мне кажется это очень крутой формат, такое всегда очень интересно смотреть

  • @mmclist9926
    @mmclist99264 жыл бұрын

    Спасибо, очень интересно. Никогда не задумывался о том, как работают проверки стека. Оказалось всё предельно просто :)

  • @iEfimoff
    @iEfimoff4 жыл бұрын

    1. пароль в открытом виде. можно было XOR хотя бы. 2. использовать безопасную strNcpy 3. strNcmp с проверкой длины строки. strcmp строка должна заканчиваться 0x00, если это не произойдет можно залить shell code. 4. result_flag перетирается при stack overflow. int result_flag используется как boolean. убрать result_flag и сделать return strNcmp() == 0. 5. нет проверки на количество аргуменов 6. нет проверки пароля на null or empty 7. "оптимизация" два вызова printf... можно было так: printf(checkPass(argv[1]) ? ACCESS_GRANTED : ACCESS_DENIED) 8. Опеделить строки Granted, Denied в define #define ACCESS_GRANTED "Granted " #define ACCESS_DENIED "Denied " 9. при инициализации массива делать ZeroMemory(), memset(0) или { 0 } 10. зачем копировать строку - для переполнения буфера. убрать копирование строки и буфер. использовать указатель на char.

  • @tsoer2976
    @tsoer29764 жыл бұрын

    Отлично. Я еще не дорос до такого уровня, но все равно очень полезно, спасибо

  • @user-hh3ir2ds8h
    @user-hh3ir2ds8h4 жыл бұрын

    Красавчик!!! Интересно. Жаль, в школе так не объясняли

  • @KlenKlenov
    @KlenKlenov4 жыл бұрын

    Спасибо, очень интересно!

  • @zatochiSiberian
    @zatochiSiberian4 жыл бұрын

    Спасибо, было интересно.

  • @alexwolkow8534
    @alexwolkow85344 жыл бұрын

    Спасибо за видео!

  • @user-yc6ez9lf9t
    @user-yc6ez9lf9t4 жыл бұрын

    Грамотный мужик, лайк

  • @user-xq4ft8kz9f
    @user-xq4ft8kz9f4 жыл бұрын

    Есть ещё технология ASLR, борется с повреждением стека за счёт его рандомного размещения в адресном пространстве процесса. В таком случае переполнение стека приводит к segmentation fault . А в целом стоит пользоваться strncpy snprintf явно указывая что не больше столких байт записать и проверять что произошло.

  • @user-xq4ft8kz9f
    @user-xq4ft8kz9f4 жыл бұрын

    Спасибо, следующее видео про то как ты сделал так указку! :) ПС: mov sp, 0x9000 mov bp, sp Вот и весь стек в Real Mode ;) Я бы наверное с помощью getopt() проанализировал ключи командной строки, а там вообще пароль? Проверил с помощью regex, раз это пароль наверно нужно применить какое-нибудь шифрование чтобы не просто строка с паролем в бинарнике была, а то ты научил уже крэкерству ;) Ну и ещё const char* pass и проверка nullptr либо просто в комментарии к функции написал что «это ваши проблемы что вы нуль указатель в функцию посылаете»

  • @alexlightweight
    @alexlightweight4 жыл бұрын

    интересное видео !

  • @gungunovi4941
    @gungunovi49412 жыл бұрын

    Здорово, помогло въехать в тему и разобраться с решением одной задачки. Насколько реально будет записать видео о применении техник обхода подобного рода защит? В частности, было бы интересно послушать грамотную теорию и практический пример применения уязвимости ret2libc (в русском сегменте лучшее, что я нашел на данный момент, это видео разборы с CTF, но там это все подано, как я понимаю, без сценария и, соответственно, как-то скомканно)

  • @0alsh
    @0alsh4 жыл бұрын

    Интересное видео, спасибо. А какие другие архитектуры стека бывают? Бывает, например, чтобы локальные переменные не перемешивались с адресами возвратов, а лежали отдельно?

  • @user-ii5ev3pi6n
    @user-ii5ev3pi6n4 жыл бұрын

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

  • @takiekakmi7532
    @takiekakmi75323 жыл бұрын

    Круто... Офигел, от того, что, в принципе, все понял... Только единственный момент - сама канарейка - это какой-то конкретный тип данных или проц просто именует n количество ячеек в стеке?

  • @pavelivanov9357
    @pavelivanov93574 жыл бұрын

    Работаю в продажах импортных запчастей к горной технике. Жду с нетерпением выпуски Соера. Подписка. Что происходит?))

  • @albrehtdurer557

    @albrehtdurer557

    4 жыл бұрын

    у тебя проблемы с самоидентифекацией))

  • @user-nq2mj6rz9q
    @user-nq2mj6rz9q2 жыл бұрын

    По моему эту "защиту" с канарейкой очень просто обойти: т.к. позиция канарейки в стеке [rbp-0x8] и её размер 8 байт известны, то можно сначала прочитать из буфера строки в дополнительную переменную (а1) 16+8 байт+8 байт (т.е. сам буфер строки + 8 байт канарейки + 8 байт регистр rbp), после чего добавить к этой же переменной а1 адрес возврата и записать всё это обратно в буфер. Таким образом и канарейка останется целой и адрес возврата подменим.

  • @MaiklTil
    @MaiklTil4 жыл бұрын

    Объясни пожалуйста, зачем нужны символы для декомпилирования? Это некая таблица или что это вообще и с чем едят ?

  • @timv7817
    @timv78174 жыл бұрын

    Что вы имели ввиду под словом "стрикнутая программа" на 13:42?

  • @maksimssol4975
    @maksimssol49754 жыл бұрын

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

  • @user-xq4ft8kz9f
    @user-xq4ft8kz9f4 жыл бұрын

    Soer можешь более подробно про радар рассказать: он платный? Можно его вместо gdb для отладки использовать, просматривать код а не инструкции, сильно от gdb отличается, чтобы разобраться с радаром опять мануал на 1000 страниц как к gdb читать придётся?

  • @fpvart193
    @fpvart1933 жыл бұрын

    Забавненько, ради интереса перенабрал текст программы, скомпилил и судя по всему никакой канарейки нет. Ибо при переполнении написало успешный доступ. gcc обызан был использовать канарейку или есть нюансы компиляции? gcc --version gcc (Debian 8.3.0-6) 8.3.0

  • @iEfimoff
    @iEfimoff4 жыл бұрын

    Знаю что за такт можно выполнить несколько команд, про развертывание циклов для оптимизации... Про структурки PEB, TEB, SEH, LDT, GDT, SDT, SSDT и где потом работать с такими знаниями?

  • @soapsoup5362
    @soapsoup53624 жыл бұрын

    блин только хотел задать тебе вопрос на эту тему))

  • @GameWorldMrKIller
    @GameWorldMrKIller4 жыл бұрын

    блин, я с winapi разобраться не могу в c++, и смотря на людей, которые на ходу читают асемблированный код, я охереваю, это сколько нужно изучать всего, и сколько практиковаться, для такого уровня, хотя может это для меня выский уровень, скорей всего, для него тоже есть люди, до которых ему оченьь долго расти

  • @johan.de.matan.

    @johan.de.matan.

    3 жыл бұрын

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

  • @penatoliy
    @penatoliy4 жыл бұрын

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

  • @user-yc6ez9lf9t

    @user-yc6ez9lf9t

    4 жыл бұрын

    Трудно эффективно написать? Как напишите так и скомпилирует. Если же хочется самому с привилегированными командами поиграться , можно вставить асм вставки.

  • @penatoliy

    @penatoliy

    4 жыл бұрын

    @@user-yc6ez9lf9t В пример curve25519, реализация sandy2x. Почему оно написано полностью на asm?

  • @user-yc6ez9lf9t

    @user-yc6ez9lf9t

    4 жыл бұрын

    @@penatoliy Ты про это ? github.com/msotoodeh/curve25519 . Там же большая часть на Си.

  • @user-gn5uw7ou8y
    @user-gn5uw7ou8y Жыл бұрын

    Офигеть

  • @subterraneanrose4404
    @subterraneanrose44044 жыл бұрын

    Канареечка проверяется после каждого возвращения из процедуры?

  • @rendrus
    @rendrus2 жыл бұрын

    Это всё замечательно. А практически это как применимо?

  • @artemkovera5500
    @artemkovera55004 жыл бұрын

    Спасибо за видео, подписался. Я бы хотел уточнить, при переполнении стека перезаписывается адрес возрата, который находится в самом верху стекового кадра?

  • @serhiis_

    @serhiis_

    4 жыл бұрын

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

  • @serhiis_

    @serhiis_

    4 жыл бұрын

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

  • @artemkovera5500

    @artemkovera5500

    4 жыл бұрын

    @@serhiis_ спасибо

  • @user-id1ih8ud6k
    @user-id1ih8ud6k4 жыл бұрын

    Есть желание в следующих видео про ARM рассказать?

  • @Glogyhole
    @Glogyhole4 жыл бұрын

    7:55 - сегфолт при отсутствии параметров - явно указан возрващаемый тип main возравта значения нет - неинициализирован password_buffer - нет протекта входных данных checkPass() (если длинна pass больше буфера будет горе)

  • @serhiis_

    @serhiis_

    4 жыл бұрын

    буфер не нужно ни когда инициализировать, если копируется строка. memset нужет лишь в крайних случаях когда создаете структуру и лень вручную проставить все ее поля в 0 - к тому же в ручную будет быстрее, чем ресурснозатратная функция memset. Хотя некотрые компиляторы это понимают и заменяют на этапе оптимизации memset на struct.a=0 struct.b=0. и тд.

  • @victorolegovich9850
    @victorolegovich98504 жыл бұрын

    Здравствуйте, подскажите, пожалуйста, что за стилус вы используете, он подключен у вас напрямую к стационарнику?

  • @S0ERDEVS

    @S0ERDEVS

    4 жыл бұрын

    instagram.com/stories/highlights/18003640921249380/

  • @diff7829

    @diff7829

    4 жыл бұрын

    @@S0ERDEVS а можно ещё ссылку? Недоступно) мб есть где ещё инфа? Даже выгуглить нереально

  • @alexreg78
    @alexreg783 жыл бұрын

    Кантупер кантупер ОоОуо)))

  • @Zahadoom
    @Zahadoom4 жыл бұрын

    насколько сильно проверка канарейки снижает производительность?

  • @user-zb5pr4wv8d
    @user-zb5pr4wv8d4 жыл бұрын

    Прям как в песне Если ты спишь зачем будить а если нет то и вовсе смешно ))) Те кто знают про канарейку в принципе она им не нужна а те кто не знают тем более Типичный Си ) ну или плюсы кому как угодно )

  • @user-hc1hl2nx8e
    @user-hc1hl2nx8e4 жыл бұрын

    7:55 Я нашел: - магические константы - непроверенные входные данные - неоптимальные типы Больше же ничего нет? А что за безопасное программирование?

  • @pppdddqqqbbb

    @pppdddqqqbbb

    4 жыл бұрын

    разброс оформления указателей: и type **ptr, и type** ptr. За последнее надо сразу кадилом херачить. )

  • @ancubic1549

    @ancubic1549

    4 жыл бұрын

    Еще можно захэшировать пароль

  • @Eraston

    @Eraston

    4 жыл бұрын

    @@pppdddqqqbbb за оформление указателей кадилом херачить надо разработчика синтаксиса в первую очередь ) ибо указатель на тип тоже тип, только указателя

  • @pppdddqqqbbb

    @pppdddqqqbbb

    4 жыл бұрын

    @@Eraston это не «указатель на тип». Это переменная, хранящая *адрес*, поэтому у неё (переменной) есть специальный значочек. Кому не нравится - пишут на Паскале. И вот такие пейсатели на Паскале и пишут ptr, без значочка, наивно что-то там себе полагая о том, как якобы должно быть. Этот язык не для вас, в таком случае. ;-P

  • @Eraston

    @Eraston

    4 жыл бұрын

    @@pppdddqqqbbb да ладно? Адрес? Правда? А нахрен тогда адресу тип? Говорят, можно перечитывать текст

  • @user-zk8mb7er4u
    @user-zk8mb7er4u4 жыл бұрын

    Здравствуйте я конечно не понимаю в этом всем. Но у меня вопрос, во время одной игры выкидывает из нее и пишет LogonUI.exe Обнаружено переполнение стекового буфера в данном приложении. Это переполнение может позволить злоумышленнику получить управление над данным приложением. Сама игра лицензия от компании Ubisoft. Подскажите что делать в данном случае? Заранее спасибо.

  • @preenxus3425
    @preenxus34254 жыл бұрын

    А как это вы так сделали?

  • @IzdeVajkin
    @IzdeVajkin4 жыл бұрын

    Кевин Костнер отдыхает

  • @malmel5521
    @malmel55214 жыл бұрын

    Скажите пожалуйста, а можно как-то получить в радаре не названия переменных которые функция принимает, а конкретно их значения?

  • @S0ERDEVS

    @S0ERDEVS

    4 жыл бұрын

    Это в режиме отладки нужно смотреть, при статическом анализе не показывает - radare.gitbooks.io/radare2book/debugger/intro.html

  • @xuttux2758
    @xuttux27584 жыл бұрын

    Я немного не понял, может ли случится ситуация, когда адрес возврата затрется, а канарейка останется и пройдет тест от системы?:3

  • @kkkargeva

    @kkkargeva

    3 жыл бұрын

    может

  • @act0rrr723
    @act0rrr723 Жыл бұрын

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

  • @zp00v0518
    @zp00v05184 жыл бұрын

    А меня заинтересовала указка) Что за зверь?)

  • @S0ERDEVS

    @S0ERDEVS

    4 жыл бұрын

    instagram.com/stories/highlights/18003640921249380/

  • @vadiimt
    @vadiimt4 жыл бұрын

    Спасибо за увеличенный текст.

  • @stanislav5698
    @stanislav56984 жыл бұрын

    По правилам языка C и соответственно С++ массивы, как аргументы функций всегда передаются в виде указателей. Поэтому бесконечным массивом (строкой C) сорвать стек невозможно. Как и иными манипуляциями с аргументами функций. Вся проблема, исключительно, кроется в старых функциях по обработке «C строк», ограничивающих длину только нулем. Перезапись стека может произойти, если вы создадите массив как локальную переменную (char str[40]; память выделяется в стеке) и затем, без проверки максимальной допустимой длины начнете туда копировать длинную входную строку. То это точно может переписать весь стек. Используй новые безопасные C функции по работе со строками, принимающие лимит строки, или класс string. Тот, кто всегда, перед обработкой проверял strlen() допустимый размер строк аргументов функций, тот не «мочил» бедных канареек.

  • @serhiis_

    @serhiis_

    4 жыл бұрын

    в си все указатели всегда доставали немало хлопот программистам. поэтому появились такие языки как шарп в которых нельзя без unsafe манипулировать указателями. в java вообще ни как нельзя.

  • @stanislav5698

    @stanislav5698

    4 жыл бұрын

    @@serhiis_ «умные» указатели в С++ появились раньше, чем C#. При этом unique_ptr и shared_ptr обеспечивают сравнимый функционал, но без механизма сборки мусора. «Сборка мусора» приводит к подтормаживанию потоков C#. C# - это язык более высокого уровня и предназначен для создания приложений с меньшей критичностью к производительности.

  • @serhiis_

    @serhiis_

    4 жыл бұрын

    @@stanislav5698 в objc и его потомке - свифте сборщик мусора вырезали с корнем. сейчас используется ARC. А с++ 11 появился не раньше шарпа не надо. Дотнет появился в 2000 и шарп в 2001.

  • @serhiis_

    @serhiis_

    4 жыл бұрын

    @@stanislav5698 к тому же С++ до сих пор не позволяет узнать есть ли метод у обьекта. obj->foo() и будет плохо плюсам если там такого метода нет. В objc можно легко это проверить, а можно вовсе в написать расширение класса и при компиляции он не будет вызывать исключение на несуществующий метод. Тоже самое можно и в рантайме назначить любому классу, например какой-то класс в либе которого даже в документации нету, и он вам не нравится, берете его в рантайме меняете. Это называется свизл-функции.

  • @serhiis_

    @serhiis_

    4 жыл бұрын

    @@stanislav5698 а знать есть ли метод у обьекта - это довольно полезная фича языка. Так можно задавать спокойно опциональные методы в интерфейсах. Да вы можете интерфейс определить по дефолту, но если либа была скомпилина не вами то применить совой интерфейс к обьекту который либа возвращает вы не можете. А опциональные методы и проперти - это отличное поведение.

  • @PlotCalc
    @PlotCalc4 жыл бұрын

    Кто знает как отключить баунд чек в vb.net???

  • @YWNWA-ZXC
    @YWNWA-ZXC4 жыл бұрын

    думал щас stackoverflow.com буду взламывать...

  • @magomedbeg_magomedov
    @magomedbeg_magomedov2 жыл бұрын

    При включении ноутбука пишет ошибка. Обнаружено переполнение стекового буфера в данном положении.

  • @magomedbeg_magomedov

    @magomedbeg_magomedov

    2 жыл бұрын

    После 2 минут ошибка исчезает показывает серый пустой экран и так целый день

  • @magomedbeg_magomedov

    @magomedbeg_magomedov

    2 жыл бұрын

    Выручай 😁

  • @anthonyminchenko3109
    @anthonyminchenko31094 жыл бұрын

    Одному мне интересно почему это называется канарейкой, а не каким-либо «ключом безопасности стека»?

  • @emilio88regis

    @emilio88regis

    4 жыл бұрын

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

  • @ptand5350
    @ptand53504 жыл бұрын

    принимай формы, пиши в базу, получай деньги, что тебе еще надо?

  • @user-ke3cp6et2l
    @user-ke3cp6et2l4 жыл бұрын

    а я хеловордщик

  • @shasoleoshboshasart7096
    @shasoleoshboshasart70964 жыл бұрын

    Опять этот эльф, на высшем эльфийском разговаривает! Я ливаю!

  • @penatoliy

    @penatoliy

    4 жыл бұрын

    Не согласен, всё очень понятно объяснено и главное приведены примеры. Видимо вы не видели, настоящий эльфийский) Посмотрите на любую статью написанную математическим языком (например я сейчас изучаю "unscented transform" и чувствую некий дискомфорт в чтении литературы об этом методе работы с вероятностями.

  • @shasoleoshboshasart7096

    @shasoleoshboshasart7096

    4 жыл бұрын

    @@penatoliy Да согласен! Все максимально понятно, но я не смог удержатся и не оставить этот коммент.

  • @alexreg78
    @alexreg783 жыл бұрын

    12 1116 128 164 ё113

  • @alexreg78

    @alexreg78

    3 жыл бұрын

    маскируем числом ПИ

Келесі