Тварини - це платформи з дуже обмеженою пам'яттю, обчислювальними здібностями і можливостями модифікацій. Розробникам енімал-сцени доводиться видавати практично геніальні низькорівневі алгоритми. Правда, велика кількість хардкоду викликає характерні проблеми з відсутністю перевірки в екзотичних умовах. Та ж фільтрація вхідних даних робиться дуже і дуже криво.
Вразливість рекурсивних алгоритмів навігації мурашка: спіраль смерті
Не знаю, хто писав більшу частину птахів, але я хочу звернути увагу на особливість, що дозволяє провести ін'єкцію довільного яйця в гніздо. Справа в тому, що птах перевіряє тільки розташування і кількість яєць, але не їхні хеші. У 20% випадків зозуля, що експлуатує цей погляд, може внести яйце зі збереженням контрольної суми, чого цілком достатньо для підвищення прав у гнізді.
Але підемо далі. Я не знаю, хто розробляв архітектуру ящірок, але вони бігають в одному процесі, а дихають в іншому. При цьому платформа не підтримує багатозадачність, тому милиць з максимальною довжиною бігу в 4-6 секунд просто епічний.
Так, ще про птахів, щоб двічі не вставати. У них наскрізь кривий модуль розпізнавання «свій-чужий». Що дозволяє провести animal-in-the-middle-атаку за допомогою підстановки звуку пташеня. Все, що приблизно збігається за розмірами і при цьому передає відкриту частину ключа, потрібно погодувати. Подібний відступ є у деяких гризунів, що дозволяє припустити проблеми із загальною бібліотечною функцією.
Тепер мурахи. Мурашйов досить легко зациклити. Навігаційний блок у них поєднаний з системою пріоритетів ОС, тому при побудові циклічного маршруту утворюється «спіраль смерті», що затягує все більше і більше ресурсів мурашника - і все це зависає на 3-4 дні, поки мурахи не загинуть від виснаження або щось зовні не змінить навігацію.
Спіраль буде забирати все більше мурашок з доступних джерел, поки пріоритети не змінить зовнішню подію або мурахи не помруть
А ось страус - вершина оптимізації. Те, як саме в нього впихнули травлення, взагалі гідно увійти в «Перлини програмування». Щоб ця пташка нормально перетравлювала їжу, розробник придумав змусити його натурально жерти каміння. При бігу камені трусяться і перемелюють зірка. Тепер найвеселіше. Щоб не писати окремий код для поїдання каменів, страусу просто взяли і відключили центральний сектор зору (як зайцю, але там це відомий мінорний погляд). Тому коли страус цілиться в зерно, він потрапляє тільки в 30-50% випадків. Що легко дозволяє набирати потрібну кількість каменів, та ще й з запасом. Саме тому страуси, запущені на чистій віртуальній машині в зоопарку, відчували проблеми з травленням до появи підтримки каменів на рівні гіпервізора. До речі, корови теж жеруть цвяхи і іноді гравій, але це не в архітектурі, а просто технічна помилка зворотної сумісності.
Так, і ще. Дуже хороша річ - повторне використання коду. Частину функціоналу з камінням потім накотили на крокодила - щоб йому пірналося краще. Пірнається дійсно краще.
Проблеми енергоспоживання вирішуються не менш геніально. З рептильною платформою все ще більш-менш нормально (там просто немає довгих високорівневих процесів), і крокодил може сидіти добу без руху до упіймання м'яса. А ось з тими ж великими хижаками все пожадливіше мобільних ОС. На 20 годин на добу лев знімає всі активні процеси і йде в сплячий режим. Приблизно 4 години він знаходиться в активному режимі - гарчить, розмножується, серфіт по савані і знаходить нову зарядку в антилопі або зебрі.
Дельфіну взагалі не завжди вдається включати обидва ядра мозку - тільки тоді, коли потрібно робити щось важливе. Якщо вам зустрівся гальмуючий дельфін - перевіряйте, чи обидва очі відкриті. Тільки один? Значить, він у сплячому режимі і працює на одному ядрі зі зниженою тактовою частотою.
Ведмідь не завжди коректно виходить з hibernate-режиму. Це ж, до речі, стосується деяких рослин, але там не так небезпечний. Рослини легко перезапустити. І так, вчіться у тих, хто писав альбатроса. Альбатрос взагалі спить у повітрі.
Тепер черепаха. Їй замість того, щоб прописати нормальний алгоритм обходу перешкод, захардкодили рефлекс прибирання голови в панцир. Тепер навіть якщо вона натикається на крокодила, той зі своїм блискавичним кидком не встигає відкусити їй голову. Побічний ефект - черепаха легко загортається від ножа м'ясника. Швидкість обробки інструкцій процесора не зрівняється зі швидкістю роботи інтерпретованого високорівневого коду у кухаря. Черепаху не обженеш, критичні функції переписані на асемблері.
Білий ведмідь - чудовий приклад роботи з сонячною енергією. Ведмідь прозорий в СФ по хутру і чорний на шкірі. Це вже торжество інженера.
Жираф - суцільний милиць. Ні, в цілому, зрозуміло, що вимоги замовника по висоті крони кілька разів підвищувалися в міру розвитку проекту. Але ось те, що увійшло в реліз по водопоях і було пропущено на прийомці - це нонсенс. Жираф тупо не дістає головою до води (!) у звичайному режимі. Йому доводиться моторошно вивернутися і майже сісти на шпагат, щоб попити. Ясна річ, анонімуси-хижаки цим нахабно користуються. Дитинча взагалі довелося зміцнювати - він у стабільному релізі падає з півтора метра при народженні.
Морській свинці і ряду риб косо прописали затримки на перериваннях. Якщо звичайна тварина по черзі опитує переривання на кшталт «чи немає небезпеки», «чи не треба попити», «чи не треба поїсти», «чи не треба почати розмножуватися», «чи не треба лягти спати» і «чи не треба виконувати нестандартну процедуру» - і все це без видимого перемикання - то морські свинки роблять sleep (1000); після кожної операції. Мабуть, залишилося з налагодження і увійшло в реліз.
Гарною ідеєю було накотити код збирача сміття в ОЗП від золотої рибки на білку - garbage collector з високою ймовірністю очищає і невикористовувані покажчики на місця розмічених горіхів і насіння. У результаті завдяки білці виростає багато нових дерев.
Ось індійську кобру точно писав фанат Starcraft. Тому що, задумайтеся, де ще можна зустріти юніта, що плюється отрутою на два з половиною метри точно в око терану.
Ну і раз почали про нераціональність - згадаємо того ж восьминога. Кілометри нервової тканини просто тому, що комусь було цікаво написати його на brainfuck. Та якщо використовувати ці окремі модулі управління присосками, ту ж тканину - може вийти взагалі ЦОД на колесиках.
Або ось взяти того ж пінгвіна - літати не вміє, зате плаває і весело стрибає на півметра у висоту. Написали його як навчальний приклад для пояснення принципів поліморфізму, а потім чомусь забули закомментувати підключення бібліотек з ним в основному релізі.
Тлей та інших комах, а також ряд тварин точно писав шалений фанат рекурсії. Світла думка народжувати деяких вже вагітними - просто винос мозку для тестерів. Зате слоненя деплоїться 22 місяці - ось що означає не влізти в кеш процесора.
До речі, пасхалка з бегемотом вийшла смішна. Люди бояться левів, носорогів, змій - але тільки цей чарівний товстун цілеспрямовано бігає за людиною. І, раптово, зі швидкістю до 30 км/год. Тобто наздоганяє навіть велосипедистів.
У деяких кішок не прибрали апаратний байпасс у районі шкірки. Варто взяти дорослу систему за це місце, так відразу відключається рухова активність. Що породило небезпечний погляд з прищіпкою, яким часто користуються скрипткідді.
У курки розслаблена лапа «жовкнута», тому якщо поставити курку на гілку, дочекатися, поки вона засне, а потім легко і швидко перевернути, спрацює рефлекс - і у вас буде курка, що спить вниз головою на дереві. Головне - підготувати ґрунт і розповісти всьому селу про вампірів за день до видовища такого курника.
У собак і низки інших хижаків і падальників косо прописано розпізнавання видобутку. В одній з умов AND випадково замінили на OR, і ось результат - відомий перейшов із запуском пріоритетного процесу з атакою на пляму лазерної указки.
Загалом, ви напевно і самі можете продовжити.
P.S. Зверніть увагу, що більша частина описаних вразливостей досі не виправлена.
