Перейти к публикации

В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами

Внимание, с 14 февраля до 20 февраля могут проходить работы на сервере, где также находится лаунчсервер. В связи с этим авторизация в лаунчере может не работать

astral17

Пользователи
  • Публикации

    72
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    6

Последний раз astral17 выиграл 26 января

Публикации astral17 были самыми популярными!

Репутация

63 Обычный

3 подписчика

О astral17

Информация

  • Пол
    Мужчина

Посетители профиля

342 просмотра профиля
  1. astral17

    Защитник таблиц: tprotect

    ммм, у нас походу немного разное понятие boot было, я подумал, что кинуть файл в /boot/*.lua , но вижу был не прав. Однако согласен, что я не заметил, что package.loaded присваивается от локальной и от неё работает, в этом моя ошибка. Однако это остаётся актуальным. Замена _G.package может сработать против тех, кто не доверяет require и идёт напрямик. При изменении /lib/core/boot.lua всё нормально запустилось. UPD: И если что, я не говорю, что именно ты должен сделать эту защиту, я говорю, что ты должен помочь тем, кто захочет это сделать, ведь использовать набор методов из библиотеки гораздо проще, чем написать её с нуля
  2. astral17

    Защитник таблиц: tprotect

    На счёт сломается система, запускал на OpenOS 1.7.2 в boot tprotect не становился глобальной переменной, поэтому RE был, ок, заменил первую строчку на tprotect = require ... , система зависла и отказалась загружаться. Ок попробуем не из boot запустить, а как обычный файл..., ммм эпик фэйл, команды консоли сломались, можно было идти глубже но зачем, ведь предложенные строчки для другой системы (а вообще, хоть у package есть оригинал на себя, у него не хранится отдельно оригинал на package.loaded , который становится readonly , но это опустим). Предположим, что это сработало, никто до сих пор не мешает подменить функцию require и при вызове require("tprotect") заменить на своё. Или заменить _G.package на другую таблицу. Именно из-за таких проблем я и написал И это также отвечает на это: Можно и дальше перечислять проблемы, но раз меня критикуют, я пожалуй откажусь. Однако основная мысль прошлого сообщения была в добавке возможности защиты частичной таблиц, т.е. чтобы только некоторые поля были readonly , что позволило бы юзеру с гораздо меньшими усилиями защититься от всего перечисленного выше. Однако хозяин - барин, автор библиотеки не я, поэтому и не я выбираю, что в ней будет, а только предлагаю.
  3. astral17

    Защитник таблиц: tprotect

    Если сделать package.loaded readonly то вся система сломается к чертям, т.к. не сможет загружать новые библиотеки и т.д. и т.п., ещё проблемка в том, что нужно в таком случае защищать и _G ведь кто мешает подменить package на другую таблицу?, затем кто мешает подменить функцию require ?, заменить require на костыль, который вместо tprotect вернёт заражённую копию?, так что тут как вариант добавить readonly поля по выбору, затем функция не возвращает метатаблицу зеркала, а возвращает метатаблицу оригинала. Когда говорил, что иногда хотелось бы видеть метатаблицы, я имел ввиду через getmetatable . Ну а вообще, для другой системы может и будет внутренняя защита от таких вещей, но это нужно смотреть на то, какая структура будет.
  4. astral17

    Защитник таблиц: tprotect

    Ну, из уязвимостей вроде бы и всё, конечно же проблема до сих пор возникает "как получить эту библиотеку, если зловред уже работает", т.е. он может спокойно подменить require , package и т.д. , т.е. даже если библиотека загружена, ты не можешь удостовериться в том, что это правда она, однако то, что сама таблица защищена уже гарантирует, что те, кто получил её не обнаружат сюрприз. Как фиксить такое фз, и это уже просто чисто для размышлений (но было бы неплохо, если можно было подтвердить). Было бы неплохо, если сам код был под спойлером в теге "код". Как знаешь, в таблицах, которые хочешь защитить могут находиться также и другие таблицы. Иногда хочется защитить и их (но не всегда), поэтому хотелось бы видеть функцию, которая будет рекурсивно защищать все таблицы от изменений, которые есть в защищаемой таблице. (не забудь про возможность зацикливания, например в защищаемой таблице может вдруг оказаться ссылка на её саму). Ну и на последок, то, что в getmetatable от зеркала возвращается строка защитная, не очень хорошо, иногда хотелось бы видеть метатаблицу, оригинальной (конечно же readonly), тут тогда возникает вопрос, до какой глубины идти?, ответ: до тех пор, пока есть метатаблица у метатаблицы и она ещё не защищена (в кратце расширение к рекурсивной защите). В принципе это будет создавать дополнительные нагрузки на память, поэтому можно поставить флажок, нужно ли так делать. Вроде бы большего ожидать от этой библиотеки смысла скорее всего нету (до тех пор, пока она касается только защиты таблиц). А за старания респект. UPD: короче, нужен багфикс сего чуда Если вкратце, то при обращении к метаметодам зеркала получается, что оно берёт сырые значения из метатаблицы (вот как раз таки причина, почему у меня не удалась та атака с __add , ну да ладно, она хотя бы показала, что в теории любая глобальная переменная может быть злом), а это может оказаться довольно довольно важной вещью таблицы (т.е. нужно сделать будет редирект всех метаметодов, либо изменить структуру работы).
  5. astral17

    Защитник таблиц: tprotect

    Дубль 2, короче сдаюсь в этот раз получилось гораздо качественнее, уязвимости есть, но не очень критические и легко фиксятся. Так сказать защита rawset не очень хороша), а если точнее, то error не обязательно выходит из функции, например если сделать так, как на скрине, то сразу понятно, что код продолжит работу. Т.е. нужно либо хранить персональный error , либо дописать везде return nil или что-то похожее), похожая проблема с getmetatable и setmetatable , т.е. если их переписать, то получится, что мы сможем выхукнуть таблицы в момент их защиты. Также это дело касается type , т.к. я могу обломать валидацию mto на таблицу и запихнуть через __metatable функцию, т.е. tcopy_mt = mto = myfunction , а если __index это функция, то при обращении к метатаблице я смогу получить и саму чистую метатаблицу, т.е. mt, а сама она никак не защищена, как сиё сделать, (цель вообще вытянуть protectid) , смотрим, нам нужно обратиться в mt к значению, которого нету например _add , а значит вызывается __index в который помещается mt, "__add" и тут мы и хукаем mt. (как вытянуть не проверялось, и писалось почти с закрытыми глазами, так что скорее всего сиё чудо только в теории, завтра чекну)
  6. astral17

    Защитник таблиц: tprotect

    Интересная защита), сломать функцию rawset , чтобы она не работала) т.е. она получает метатаблицу и запускает функцию в ней, во-первых если метатаблицы нету, краш), если метатаблица есть, то всё равно краш, т.к. в ней нету этой функции) Затем tprotect.open не работает, причина проста, mto может равняться nil , т.е. если создать чистую таблицу, и её защитить, получим epic fail... возвращаемая таблица через getmetatable(ptbl) , где было вызвано tprotect.protect(ptbl) является mt2 и её можно редактировать, такая же проблема вообще и на саму ptbl распространяется, т.к. __newindex работает только в случае, если такого ключа нету, если ключ есть, то нужно использовать __index , однако получив таблицу mt2 даже с доступом на чтение мы сможем спокойно выудить все значения, и protectid и списочек nonpi (я так и не понял, зачем он вообще нужен, как вариант посолить, чтобы сложнее было вытянуть protectid, но в таком случае слишком мало соли). Вообще protectid можно получить просто через tprotect.isProtected , т.к. там получается метатаблица у таблицы, которую мы передаём внутрь и обращается по индексу protectid , т.е. секретным назвать его трудно. Но вернёмся к нашим баранам, mt2 допустим у неё есть __index тоже, значит we need to go deeper , смотрим на метатаблицу mt2, она не защищена, т.е. её можно спокойно изменять и мы видим спокойно все её значения снимаем защиту на изменение mt2 -> profit возвращаемся сюда, порядок в lua слева на право, т.е. в начале оно споткнётся об nil , а потом проверит, а защищалась ли таблица вообще?, т.е. нужно поменять местами для начала if ((not tprotect.isProtected(t)) and not cantrawset) or getmetatable(t).isOpened(protectid) then если не защищено, то оно не будет пытать метаметод isOpened , однако mt2 мы можем спокойно редактировать, т.е. isProtected и cantrawset мы можем управлять их значениями. Ещё можно атакуемую таблицу заменить на свою таблицу, дождаться пока её не попробуют открыть, и таким образом заполучить ключ (MitM attack) Либо пойти более общим путём, раз getmetatable не сохраняется, то просто подменить его и вытянуть интересующие таблички в момент защиты, открытия и т.д. и т.п., либо в setmetatable сделать так, чтобы устанавливались во время защиты свои, т.е. их тоже нужно копировать и защищать) Затем функция open немного бесполезна, т.к. получается, что таблица на момент выполнения кода не защищена, лучше сделать вариацию, где возвращается таблица, изменяя которую изменяется оригинальная, причём защищённая таблица остаётся защищённой. Также сам tprotect тоже нужно защищать, т.к. перезаписать функции библиотеки хватит, чтобы сломать её защиту (функции хранятся в открытом виде в package, где можно спокойно подменить, и require будет возвращать её) , также require тоже нужно защищать. Т.е. по факту защита работает успешно только для защищённых ранее и не открывая доступ во время выполнения чего-то, что может иметь плохие желания. Ладно, пока что на этом хватит, резюмируя всё выше сказанное, её ещё пилить и пилить. А вообще возникает чувство, что автор её даже не проверял, т.к. работают только 2 функции protect и unprotect , а функция rawset вообще под чистую сломана. Ну надеюсь в следующей версии автор учтёт хотя бы часть написанного тута, и следующая версия библиотеки будет лучше.
  7. Вопрос такой, будет ли интересно, если сделать продолжение этого квеста?), прост я себе написал списочек из 10 различных идей взлома банка (+ ещё есть пару мыслей, что можно добавить) и можно тогда будет сделать часть 2, где нужно будет взламывать целый ряд банков, с различными уровнями сложности, от просто послушать трафик, до приличной серии махинаций. В принципе реализовать всё это можно за пару дней (при наличии желания), однако стоит ли?
  8. То чувство, когда автор карты сделал 2 уязвимости, а хакнул через 3ю , потом после хака я уже понял идею, как можно было хакнуть ещё причём проще, а когда смотрел уже код, я понял, что автор имел ввиду немного не те дыры (интересно то, что все 3 дыры находятся в разных частях кода), скорее всего первую он имел ввиду ту, которую можно сразу сделать без танцев с бубном, а вторую это уже чисто удача или читать исходники. В принципе со стороны кубика, предназначенного для того, чтобы его ломали и разбирали то довольно не плохо, однако выводить в релиз как работоспособую и безопасную систему явно нельзя
  9. Скорее всего значит у тебя установлена OpenOS 1.6.1 , а значит просто тебе нужно будет подменять event.shouldInterrupt local event = require("event") function DisableInterrupt() if _G.shouldInterruptBackup then return false end _G.shouldInterruptBackup = event.shouldInterrupt event.shouldInterrupt = function() return false; end return true end function EnableInterrupt() if type(_G.shouldInterruptBackup) ~= "function" then return false end event.shouldInterrupt = _G.shouldInterruptBackup return true end вставляешь это в начало кода, а потом, когда нужно вызываешь функцию, которая тебе нужна (думаю это и так понятно), если и это не сработает. то тогда скажи, чему равна переменная _G._OSVERSION
  10. Ну, перед тем, как задавать вопрос желательно поискать, задавался ли он до этого и есть ли на него ответ. http://computercraft.ru/topic/2396-kak-otklyuchit-ctrlaltc/?do=findComment&comment=35069 Если это не сработает, то нужно будет сказать, какая версия мода и OpenOS, ведь там меняли эту вещь. В начале была функция shouldInterrupt , потом её убрали и пришлось костылить, а в самой новой версии вернули возможность через обработку process.info().data.signal хмм, прочитав код и видя строчки for i = 1, 255 do print() end становится больно, эмм, зачем?? и что они должны делать?, очищать экран?, temp.clear() на что? Затем ещё табуляция есть не везде, например после while true do оно так и остаётся монотонным текстом, ну ладно, это я уже отошёл от темы.
  11. astral17

    Немного игр для ОС

    Ну, если есть предложения, что добавить/изменить/исправить, то я с радостью приму это.
  12. astral17

    Немного игр для ОС

    ну, логично что на диске, я спрашивал про путь нахождения файлов, есть 2 пока что мысли по этому поводу, либо в ту же папку, где и сама игра и таким же названием файла ток на конце .cfg (для этого нужно будет посмотреть как там определить где находится файл), либо в какой-то фиксированный глобальный путь
  13. astral17

    Немного игр для ОС

    ну, для минимализма нужно, чтобы пользователь знал заранее на что нажимать, думаю я просто добавлю кнопки сверху(или снизу), для этого, нужно будет глянуть что из этого получится, кстати есть еще вопрос, куда лучше сохранять конфиги и рекорды?
  14. astral17

    Немного игр для ОС

    Ну, у меня проблема в том, как размещать кнопки для менюшки выбора сложности, кнопку ввхода и т.п., в принципе если нужно, то могу модифицировать с монотонных клеток на чередующуюся сетку, что скорее всего будет лучше, есть еще вещь печальная, раньше знак мины у меня был знак радиации, однако после великой обновы шрифта его больше нету, сейчас я локально заменил на два полукруга (круг в ячейке 2х1)
  15. astral17

    Немного игр для ОС

    Update7(11.11.2018) Хотелось сделать больше, а получилось как всегда, но не суть 1) Игра тетрис переписана под гуи и вроде выглядит даже нормально 2) Аналогично и с крестиками-ноликами 3) Теперь в тетрисе есть тень (которую можно включить и выключить в настройках), а также предсказание следующего блока 4) В крестиках-ноликах теперь можно выбирать требовать ли авторизацию (т.е. если идёт чужой ход, то только игрок, зарегестрированный под него может ходить) Вообще я еще переписывал сапёр, но столкнулся об стенку, "как он должен выглядеть", и пока нету ни единой мысли об этом. Такая же (но меньше) проблема касается и Камень-Ножницы-Бумага. Наконец-то я заставил себя чуточку подредактировать главный пост и добавил план, по выполнению которого я скорее всего закончу с этой темой и уже буду заниматься другими вещами. Либа потиху растёт помолимся за обратную совместимость после апдейта, ведь я её не чекал.
×