Взломать нельзя пофиксить: 8 историй о том, как программисты хакнули систему
Они справлялись с утечками данных, спасали ТВ-трансляцию Олимпиады, сообщали компаниям об уязвимостях и играли на школьных компах.
Кадр: фильм «Железный человек 2» / Marvel Studios
Круто быть программистом, который умеет и сайт сверстать, и сервер запустить. Но ещё круче — знать, как программы работают изнутри, чтобы уметь их подправить под свои нужды. Именно об этом и рассказали айтишники на форуме Hacker News, а мы собрали для вас лучшие истории.
Нашёл паттерн в «Тетрисе» и стал чемпионом
nemo1618
Я очень много играл в Tetris Friends и в какой-то момент начал ловить дежавю. Иногда, когда я начинал новую игру и размещал 10–20 кубиков, мне казалось, что эту расстановку я уже видел в одной из прошлых игр. Я решил протестировать мою теорию с помощью брутфорса — начинал новую игру, записывал первые 10 кубиков, а затем перезапускал. Делал это снова и снова, пока наконец-то не увидел в игре комбинацию, идентичную прошлой.
По всей видимости, в Tetris Friends использовали ограниченный набор сидов (возможно, 256) чтобы генерировать комбинации кубиков. И получается, что если ты начинаешь игру с одним и тем же сидом, то тебе выпадают одни и те же кубики.
В Tetris Friends можно было соревноваться с другими игроками по всему миру. Там даже была доска лучших игроков, в которую можно попасть, если быстрее всех собрать 40 линий. Я решил использовать AutoHotkey, чтобы занять первое место.
Я перезапускал игру снова и снова, пока не получал хороший сид, а потом аккуратно играл и записывал мои действия в скрипт AutoHotkey. Ещё нужно учитывать, что Tetris Friends был флеш-игрой, а значит, нужно было делать небольшую задержку перед каждым движением.
Тестирование и отладка программы были просто ужасными: приходилось постоянно перезапускать уровень, пока я не находил тот же самый сид. Но через несколько часов упорного труда мой скрипт наконец-то заработал, и я занял первое место в мире. Ходил гордый целую неделю, пока разработчики не обновили доску.
Спас трансляцию Олимпиады
femto
Я жил в Сиднее и работал в телекоммуникационной компании, которая запускала прямые эфиры. Мне никак не удавалось пофиксить ужасный баг, не позволявший нормально передавать транслирующий сигнал с церемонии открытия Олимпийских игр в Лондоне. До финальной репетиции оставалось меньше суток, и компания была готова менять все радиостанции в студии.
В конце концов я психанул и взломал прошивку радиостанции, обошёл процесс обработки сигнала и начал транслировать сырые данные из Лондона прямо в студию в Сиднее. Клиент был настолько доволен результатом, что через два года решил использовать наши радиостанции для трансляции зимних Олимпийских игр в Сочи.
Справился с утечкой данных на С
ww520
На моей первой работе мне поставили задачу исправить базу данных, которая медленно, но верно жрала память, что приводило к крашам системы после нескольких часов использования. Софт был написан на С, а среди инструментов ещё не было никаких Purify и Valgrind, чтобы быстро решить проблему. Это была неприятная задача, которую не хотели решать.
Я заглянул в код и увидел, что аллокация памяти использовала функции malloc и free. Решил заменить их на собственные объявленные в хедере функции — my_malloc и my_free, которым передавались как параметры __FILE__ и __LINE__. Затем перекомпилировал всю программу с этими макросами, которые перенаправляли все вызовы malloc и free к моим функциям.
Мои функции записывали в отдельный файл все вызовы с адресами аллоцированной памяти, именами файлов и номерами строк. Когда набралось достаточно данных из тестовых запусков, я отсортировал их по адресам. У каждого такого адреса должна быть пара — malloc и free. Если пары нет — есть проблема. Так я нашёл все проблемные имена файлов и быстро всё исправил.
Рассказал компании об уязвимости
Dedime
Я подал резюме в одну медицинскую компанию, которая занималась выращиванием лечебной марихуаны в Канаде ещё до её легализации.
Мне было интересно, открывали ли они веб-страницу с моим портфолио. Решил проверить сам: взял логи моего веб-сервера, нашёл публичный IP-адрес той компании и проверил его на shodan.io. Обнаружил интересную вещь — один из портов был открыт по BACnet-протоколу. Тогда я не знал, что это, но быстро нашёл программу, которая умела общаться по нему.
И вот подключаюсь я к IP-адресу по открытому порту и нахожу огромный список доступной информации — показатели уровня воды, температуры, света и многое другое. Мне не хотелось делать что-то противозаконное с этим, хотя я, вероятно, мог включать и выключать свет, менять температуру в комнатах, где находятся растения, и так далее.
В итоге я сообщил об этой уязвимости рекрутеру компании. Это было рискованное решение, но оно сработало — меня взяли на работу. И первым делом поручили пофиксить этот открытый порт.
Не уверен, что это «хакинг», но я был горд, что смог обнаружить такую уязвимость в системе.
Взломал школьный компьютер
tiffanyh
Начальная школа, эпоха операционных систем Windows 3.x.
Во всех классах были жёсткие правила: никаких игр на уроках. Преподаватели даже закрыли доступ ко всем встроенным в ОС играм. Но они только так думали.
Мы нашли хитрость: если открыть любую программу — например, Wordpad, можно были зайти в FILE → OPEN, чтобы найти и запустить «Сапёра». Очень просто и быстро. И никакие ограничения не могли нас остановить.
Ничто так не заставляет восьмилетнего ребёнка чувствовать себя крутым «хакером», как эффектный обход школьных запретов.
Написал парсер для поиска квартир
btbuildem
Я пытался найти квартиру в аренду на сайтах Craigslist и Kijiji. В то время, в 2010-е, у них был очень неудобный интерфейс — не было даже карты с расположением квартир. Если появлялась новая, нужно было действовать максимально быстро, чтобы забронировать её раньше других.
Я написал скрипт, который парсил данные с обоих сайтов и отображал квартиры прямо на карте. У меня получилось даже реализовать фильтр, чтобы быстро находить подходящее для меня жильё. Система автоматически связывалась с арендодателями, которые указывали свой email, узнавала, свободна ли ещё квартира, а затем присылала мне уведомление со ссылкой.
Парсер оказался настолько неплохим, что я решил масштабировать систему на ещё несколько городов. И как только я находил подходящее для меня место, делал сайт с парсером доступным и делился им с моими друзьями. Позже мой сайт даже выиграл награду на cira.ca.
Я решил закрыть свой проект, когда узнал, что Craigslist начал судиться с PadMapper за то же самое, чем занимался я. Хотя это не было основной причиной. Главная — мой сайт не приносил прибыли.
Ещё один взламыватель школьных компьютеров
throwaway48384
Одно время в начальной школе использовали ноутбуки Chromebook, которые пришли на замену нетбукам. В ними у меня произошла интересная история.
В школе заблокировали все популярные сайты с флеш-играми. Поэтому мы с друзьями решили скачать кучу таких игр и загрузили их на собственный сайт, используя самый простой веб-сервер. На нём была гора ужасного HTML- и CSS‑кода, но всё работало!
Школа не могла его заблокировать, потому что он находился в локальной сети. А мы, в свою очередь, пользовались этим и раздавали нашим друзьям его IP-адрес, чтобы подключиться к серверу.
Разработал удалённый ключ, чтобы открывать машину
mkreis
Много лет назад я работал в компании, которая занималась производством машин премиум-класса. Мы хотели презентовать новый продукт, чтобы убедить клиентов из главного офиса, что наш проект выгоден для инвестиций. Идея состояла в том, что машину можно открыть не только обычным ключом, но и с помощью, например, смарт-часов.
Главный разработчик нашей команды нашёл гениальное решение: поставить Arduino-контроллер удалённого открытия. В день презентации, когда пришли клиенты, демоверсия работала идеально, все были довольны, и мы получили финансирование.