Знаете, я так подумал
А ведь для ARG с какими-нибудь экзешниками, лучше всего прятать секреты не в коде.... а прямо в заглушку DOS!
Исторически для обратной совместимости (когда был переход между 16- и 32- битными системами) в начале любого .exe или .dll файла пишут небольшой код, с тексом "This program cannot be run in DOS mode."
Что он делает? Вызывает консоль, печатает туда текст, и останавливает программу (так как она для 32 битных систем)
Сейчас конечно это исторический костыль..... но для ARG - самый раз ))
Пока все пойдут через Ghidra читать .data и .text участки, секрет будет лежать в начале файла...
Буквально лучший способ спрятать код - оставить его на самом видном месте :P
А ведь для ARG с какими-нибудь экзешниками, лучше всего прятать секреты не в коде.... а прямо в заглушку DOS!
Исторически для обратной совместимости (когда был переход между 16- и 32- битными системами) в начале любого .exe или .dll файла пишут небольшой код, с тексом "This program cannot be run in DOS mode."
Что он делает? Вызывает консоль, печатает туда текст, и останавливает программу (так как она для 32 битных систем)
Сейчас конечно это исторический костыль..... но для ARG - самый раз ))
Пока все пойдут через Ghidra читать .data и .text участки, секрет будет лежать в начале файла...
Буквально лучший способ спрятать код - оставить его на самом видном месте :P
❤2💯1
𝐑𝐨𝐨𝐭𝐓𝐨𝐨𝐥 𝐁𝐥𝐨𝐠
"Игнорируем ошибку с кодом 2 из UBT (Unreal Builder Tool). Это не ошибка" И кто мне там затирал что в Анриле нет Легаси? Пока мы изучали Легаси, они его писали
Ну кстати говоря, вспомнил про этот enum из движка. Результат компиляции между UHT, UBT, и Эдитором
И тут видно что код 2 = UpToDate, что означает "Код уже обновлен, перекомпилировать нечего"
По факту - это не ошибка, а просто полезный маркер. Но как мы знаем в ОС (и вообще везде) код 0 означает успешное завершение. А все что отличается от 0 - ошибка
Вот такой костыль.
И тут видно что код 2 = UpToDate, что означает "Код уже обновлен, перекомпилировать нечего"
По факту - это не ошибка, а просто полезный маркер. Но как мы знаем в ОС (и вообще везде) код 0 означает успешное завершение. А все что отличается от 0 - ошибка
Вот такой костыль.
if(Result == 2) return 0; :D❤2
Я всегда знал что у Apple все не так как у людей!
По необъяснимым причинам, пока мы не сможем отладить шейдеры и на самом деле понять, что к чему, нам нужно брать модуль (abs) от аргумента функции sqrt (квадратного корня) только для функций в этом шейдерном файле
Насколько нам могут объяснить поставщики (разработчики видеокарт/драйверов), Metal имеет слегка отличающуюся точность в некоторых результатах, а это значит, что мы передаем в sqrt отрицательные и нулевые значения
Теперь это должно быть актуально только для Metal 1.2 и более ранних версий
🤩3🍌1
Знаете, а ведь брехня о том что "через сайт могут взломать ваше устройство" - не такая уж и брехня
На личной истории: Вчера рутировал свой телик для НЕВАЖНО каких целей, получая полный root-доступ к ОС телевизора (Начинка: WebOS 3.9.0, на базе кастрированного Linux 4.4)
И самый прямой способ: зайти на сайт https://rootmy.tv/ и просто одной кнопкой сделать все
Я, как программист, подумал: Ну бред же! Кто на это поведется? Браузер запускается в своей песочнице. Выбраться оттуда еще надо уметь!
Но оказывается.... Можно
В общем, если не ходить вокруг да около: Вся графическая начинка телика основана на браузере Chromium. Но не просто основана - а глубоко интегрирована с самой WebOS. И у WebOS есть такие понятия, как "службы" - по сути обычные приложения телевизора (как apk на телефоне)
Но, для общения между приложениями, была создана кастомная WebOS'овская шина под названием Luna-Bus (аналог D-Bus из Linux) - то есть, любое приложение или консоль могла отправить любой службе запрос - и та уже его исполняла. Удобно, правда?
Но собирая фулл-хаус, получаем простую последовательность: Сайт запускается на телике. Так как Chromium плотно интегрирован с WebOS, то прямо через JS код мы имеем возможность вызвать Luna-Bus
На этой шине мы просим системному приложению "downloadManager" скачать нам файлик с инета. По дефолту он сохраняет файл в каталог пользователя
Но мы передаем путь.... С двумя точками! То есть "../../", поднимаясь директориями выше, до самой корневой папки, а оттуда уже идем в корни ОС
Файл скачивается (обычно это переписанный скрипт при запуске ОС), перезагружаем телик, и... все! Root-доступ у вас в руках! Просто зайдя на сайт! Просто в браузере на телике! Безумие...
И да, делая работу над ошибками: Системная служба "downloadManager" была запущена в root-доступе, то есть могла менять системные файлы. А также сама служба внутри не имела валидацию входных путей (так как обычно шиной Luna-Bus пользуются исключительно разработчики, а значит они ПО ИДЕЕ не могли прислать бредовый путь)
Вот такие дела
На личной истории: Вчера рутировал свой телик для НЕВАЖНО каких целей, получая полный root-доступ к ОС телевизора (Начинка: WebOS 3.9.0, на базе кастрированного Linux 4.4)
И самый прямой способ: зайти на сайт https://rootmy.tv/ и просто одной кнопкой сделать все
Я, как программист, подумал: Ну бред же! Кто на это поведется? Браузер запускается в своей песочнице. Выбраться оттуда еще надо уметь!
Но оказывается.... Можно
В общем, если не ходить вокруг да около: Вся графическая начинка телика основана на браузере Chromium. Но не просто основана - а глубоко интегрирована с самой WebOS. И у WebOS есть такие понятия, как "службы" - по сути обычные приложения телевизора (как apk на телефоне)
Но, для общения между приложениями, была создана кастомная WebOS'овская шина под названием Luna-Bus (аналог D-Bus из Linux) - то есть, любое приложение или консоль могла отправить любой службе запрос - и та уже его исполняла. Удобно, правда?
Но собирая фулл-хаус, получаем простую последовательность: Сайт запускается на телике. Так как Chromium плотно интегрирован с WebOS, то прямо через JS код мы имеем возможность вызвать Luna-Bus
На этой шине мы просим системному приложению "downloadManager" скачать нам файлик с инета. По дефолту он сохраняет файл в каталог пользователя
Но мы передаем путь.... С двумя точками! То есть "../../", поднимаясь директориями выше, до самой корневой папки, а оттуда уже идем в корни ОС
Файл скачивается (обычно это переписанный скрипт при запуске ОС), перезагружаем телик, и... все! Root-доступ у вас в руках! Просто зайдя на сайт! Просто в браузере на телике! Безумие...
И да, делая работу над ошибками: Системная служба "downloadManager" была запущена в root-доступе, то есть могла менять системные файлы. А также сама служба внутри не имела валидацию входных путей (так как обычно шиной Luna-Bus пользуются исключительно разработчики, а значит они ПО ИДЕЕ не могли прислать бредовый путь)
Вот такие дела
rootmy.tv
RootMy.TV - Slide to root your LG webOS TV and install the webOS Homebrew Channel
❤3😱1🎉1
😁4💯2
Root Engine / Basement
Собрал весь рабочий код для фундамента движка в виде одного репозитория
Куски кода были взяты с:
- Старых наработок Root Engine
- RootShadeBox
- Shoko (Compile-time UI Framework)
- Advanced AVR Templates
- MicroBuild
- RootSAI (Simple Assembler Interptere)
- Из личного OneIdiotOneVulkan
- И ASAI
Постепенно буду пополнять репозиторий по мере наработок, которые мне понадобятся в движке
Настроения нет, поэтому ничего добавлять не хочу - Просто изучайте, критикуйте, берите на заметку и используйте (лицензия MIT)
И да - хороший фундамент для движка стоит дороже, чем эфемерная иллюзия о том, что все закончено
Собрал весь рабочий код для фундамента движка в виде одного репозитория
Куски кода были взяты с:
- Старых наработок Root Engine
- RootShadeBox
- Shoko (Compile-time UI Framework)
- Advanced AVR Templates
- MicroBuild
- RootSAI (Simple Assembler Interptere)
- Из личного OneIdiotOneVulkan
- И ASAI
Постепенно буду пополнять репозиторий по мере наработок, которые мне понадобятся в движке
Настроения нет, поэтому ничего добавлять не хочу - Просто изучайте, критикуйте, берите на заметку и используйте (лицензия MIT)
И да - хороший фундамент для движка стоит дороже, чем эфемерная иллюзия о том, что все закончено
GitHub
GitHub - The-Root-Engine/Basement: Basement of Engine: Aliases, Structures, Containers, Templates, Allocators, and etc.
Basement of Engine: Aliases, Structures, Containers, Templates, Allocators, and etc. - The-Root-Engine/Basement
🔥2
Root Engine / Basement
1) Динамический массив
2) Платформо-независимый слой (HAL): Создание диалоговых окон
3) Бинарная двухсторонняя сериализация данных
1) Динамический массив
TArray, стандартный сишный аллокатор FAnsiAllocator, аллокатор с локальным буффером TInlineAllocator2) Платформо-независимый слой (HAL): Создание диалоговых окон
FPlatformDialogs, создание-открытие-взаимодействие с файлами FPlatformIO + FPlatformFile3) Бинарная двухсторонняя сериализация данных
FArchive. Метафорично выбран оператор xor ^ вместо потоковых << - кто понял тот понял❤🔥2💯1
Вот насколько надо просто чувствовать С++
Решил значит отладить цикл, добавил после строки GWires.Emplace(...) вызов остановки отладчика __debugbreak(), чтобы посмотреть на локальные переменные
Открываю - А у меня просто нет этих переменных!
И первые мысли: Проблема в отладчике? Нет. Проблема в IDE? Нет. В чем-то еще? А может...Деструкторы, бл!
Кароче: С++ скрытно под собой, после создания обьектов кабеля (Cable) и провода (Wire) вызывает их конструкторы (FCable::FCable() и FWire::FWire())
Мы работаем с этими обьектами
Но уже после - наоборот. Сразу вызывает их деструкторы (FCable::~FCable() и FWire::~FWire())
И затем я вызывается отладчик, когда обьекты уже как бы удалены
Решение? Ну, я ничего лучшего не придумал, кроме как после вызова отладчика вызвать консоль и написать что-то наподобие printf("123") и все :)
Зачем? Чтобы отложить вызов деструкторов ПОСЛЕ моего вызова отладчика
Решил значит отладить цикл, добавил после строки GWires.Emplace(...) вызов остановки отладчика __debugbreak(), чтобы посмотреть на локальные переменные
Открываю - А у меня просто нет этих переменных!
И первые мысли: Проблема в отладчике? Нет. Проблема в IDE? Нет. В чем-то еще? А может...
Кароче: С++ скрытно под собой, после создания обьектов кабеля (Cable) и провода (Wire) вызывает их конструкторы (FCable::FCable() и FWire::FWire())
Мы работаем с этими обьектами
Но уже после - наоборот. Сразу вызывает их деструкторы (FCable::~FCable() и FWire::~FWire())
И затем я вызывается отладчик, когда обьекты уже как бы удалены
Решение? Ну, я ничего лучшего не придумал, кроме как после вызова отладчика вызвать консоль и написать что-то наподобие printf("123") и все :)
Зачем? Чтобы отложить вызов деструкторов ПОСЛЕ моего вызова отладчика
🔥2