Задать вопрос
  • Существует ли аналог await из JavaScript для промисов на PHP?

    MvcBox
    @MvcBox
    Надим Закиров, небольшой секрет, async/await в JS - это "сахар" для тех же генераторов :)
  • Как понять уязвим запрос к бд или нет?

    MvcBox
    @MvcBox
    Aetae,
    Мы же не знаем что там в $db->prepare происходит

    Кто Вам такую глупость сказал?)
    https://github.com/php/php-src/blob/master/ext/pdo...
  • В чём суть шутки про ноги в С/С++?

    MvcBox
    @MvcBox
    Борис Животное, в основном такие картинки составляются теми, кто имеет минимальное отношение к разработке, поэтому им простительно :)
  • Как отключить асинхронность в JS?

    MvcBox
    @MvcBox
    Можно пример async/await?

    https://learn.javascript.ru/async-await

    Promise - не вариант, усложняет

    То, что призвано упростить жизнь, Вам ее "усложняет"?
    "Не вариант" - это пытаться что-то делать не умея программировать.
  • Как зашифровать алгоритм внутри программы?

    MvcBox
    @MvcBox
    Разве нет у VMP галочки про продвинутый антидебаг ?

    Не, там только опции "user-mode" и "user-mode + kernel-mode".
    VMP 3.5.1 еще не смотрел, но в версии 3.5.0 антидебаг все еще обходится при помощи ScylaHide. Почему-то уверен, что в 3.5.1 ничего особо не поменялось. Themida/WinLicense в этом плане более продвинутые. Да и в принципе VMP уже не тот, по крайней мере сейчас он не конкурент продуктам Oreans.

    https://lifeinhex.com/use-of-syscall-and-sysenter-...

    Как я уже упоминал выше, очень легко заставить VMP не делать прямые системные вызовы, а дергать winapi.
    Просто установить неизвестный для VMP билд винды.

    Либо же scylaHide сканит heap на сисколлы....

    Сисколы тоже не очень сложно ловить, в x64dbg можно писать условия для бряков

    Да, адресов winapi. Не знаю насколько моя терминология верна, но обычно называю системным вызовом даже вызов к kernel32.dll, а не именно вызов к ядру(sysenter). Руководствуюсь тем, что сисколы недокументированы, архитектура windows в некоторой степени микроядерная. Ну и в литературе о Windows, usermoдные либы относят к системе.

    Возможно каждый привык по разному это называть, я просто привык сисколами называть именно сисколы(sysenter).

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


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

    Когда-то давно в Themida (когда они еще использовали драйвер) был неплохой трюк против дампов.
    Приложение не расшифровывалось в памяти полностью. Драйвер расшифровывал код прямо по ходу его выполнения, а затем шифровал обратно код "позади", который уже выполнился. Таким образом, если сделать дамп приложения в любой момент времени, то там всегда будет мусор и с таким дампом особо ничего не сделаешь. Жаль, что убрали это, так как драйвер вызывал проблемы с совместимостью.
  • Как зашифровать алгоритм внутри программы?

    MvcBox
    @MvcBox
    Lolxdxd, я не говорил, что VMP является лучшим решением, а лишь привел в качестве примера реальной истории, когда компания X пытается отказаться от готового продукта Y и сделать свое, но у нее это выходит плохо.
    То, что VMP прекрасно девиртуализируется, это я и так знаю (раз, два, три).
    И автор пока не спешит это фиксить.
    А судя по тому, что автор VMP искал сторонние решения, у него пока не особо много идей в плане фиксов (по крайней мере так было год назад).
    Из личных сообщений на форуме vmprotect:
    615a73d9597cf195074137.jpeg

    А Vmp например титан хайду ниче не делает.

    Там даже TitanHide не нужен, VMP прекрасно обходится даже при помощи user mode инструментов типа ScyllaHide :)

    Сейчас лучшим публичным решением можно считать продукты Oreans.
    Та же Themida успешно сопротивляется как user mode отладке, так и kernel mode (на tuts4you можно найти посты, как у пользователей даже с TitanHide возникают проблемы с отладкой).
    Авторы ScyllaHide добавляли обход трюка с GetForegroundWIndow, но автор протектора закрыл это в следующей же обнове.
    Не секрет, что все антиотладочные и прочие трюки являются лишь "бонусом", так как основным методом значительно затруднить взлом приложения является виртуализация кода. А вот виртуальные машины у Oreans гораздо сложнее, чем у VMP.

    Лоадер скидывает все адреса системных вызовов на серверер. А сервер в код вставляет адреса этих системных вызовов(Просто jmp на адрес, либо вставляет код, который этот адрес вычисляет, всякими сдвигами битовыми и тд, чтобы дополнительно усложнить анализ). В итоге если даже злоумышленник скопирует этот код, все эти jmp будут крашить, потому что адреса системных либ поменяются.

    Смею предположить, что Вы опечатались и вместо "адреса системных вызовов" имели в виду "адреса winapi функций"? Так как у системных вызовов нет "адресов", есть их коды, которые в windows меняются от версии к версии, а библиотека ntdll служит своеобразным "шлюзом" в kernel space, так как в ней "зашиты" коды этих системных вызовов.
    Именно в том виде, как Вы описали, это не имеет особо никакого смысла.
    Если Вы хотите, чтобы при статическом анализе не были видны вызовы winapi, то в протекторах обычно есть опция api wrapping (по крайней мере в Themida/WinLicense), которая как раз и делает так, что адреса для winapi вызовов вычисляются динамически, с кучей jmp'ов в heap и прочими трюками.
    В итоге если сделать дамп такого приложения и скормить его статическому анализатору, то анализатор покажет вам ноль winapi вызовов, будто у приложения вообще нету импортов. Ну и заставить работать этот дамп, разумеется, не выйдет без фикса импортов.
    Проблема лишь в том, что это все бесполезно при динамической отладке, так как реверсеру без разницы как Вы спрятали адреса.
    Реверсер будет Вас "ждать" в конечной точке (в нужной системной либе).
    А вот прямые системные вызовы без использования нашего "шлюза" (ntdll) - вот это уже другое дело :)
    Только проблема в том, как я выше уже упоминал, что коды системных вызовов меняются от версии к версии и у нас есть 2 варианта:
    1. Тащить за приложением "базу" системных вызовов для всех известных версий Windows. Так делает VMP и это достаточно легко обходится, если подменить версию билда винды (в PEB и в ресурсах ntdll). Когда VMP видит неизвестный ему билд винды, он начинает дергать winapi функции.
    2. "Парсить" в рантайме ntdll, но для этого придется тащить за собой в приложении дизассемблер. Такой вариант не очень надежный.

    Суть вашего сообщения понятна - кастомную защиту ломать сложнее, чем публичную.
    Только тут есть одна проблема - квалификация разработчика кастомной защиты должна быть как минимум не ниже, чем квалификация разработчика публичного инструмента. В противном случае сломать кастомную защиту откажется проще, чем публичную. В этом и был смысл моего самого первого комментария к этому ответу :)
  • Как зашифровать алгоритм внутри программы?

    MvcBox
    @MvcBox
    #offtop
    Лучше не испытывать судьбу и взять готовое коммерческое решение.
    Сомневаюсь, что автор сможет хоть на какой-то процент приблизиться к уже готовым и обкатанным решениям.
    Яркий тому пример - попытка Denuvo соскочить с VMProtect.
  • Безопасность CRM. С чего начать и чем закончить?

    MvcBox
    @MvcBox
    nevesoff, Вам мягко намекнули, что текущей Вашей квалификации не хватит для нормальной реализации задуманного. Вы же, не поняв ответа, пытаетесь судить о других.
  • Не пробивается hping3 tcp syn flood с VM?

    MvcBox
    @MvcBox
    #offtop
    А зачем замазывать локальные IP ?)
  • Некачественное изображение с mac mini?

    MvcBox
    @MvcBox
    osippp, просто загуглите что-то типа "подобрать монитор MacOS" и прочтите 5-10 статей от разных авторов.
  • Как на роутере keenetic сделать автоматическое распределение скорости поровну?

    MvcBox
    @MvcBox
    pecenuska2135, штатными средствами скорее всего не выйдет. Разве что фиксированно задать лимиты для каждого из устройств.
  • Node js в серверном исполнении?

    MvcBox
    @MvcBox
    Roman Kitaev, все зависит от суммарного размера файлов проекта)
  • Node js в серверном исполнении?

    MvcBox
    @MvcBox
    Roman Kitaev, именно pkg вполне хорошо работает. Одно условие - не должно быть нативных аддонов.
  • Node js в серверном исполнении?

    MvcBox
    @MvcBox
    #offtop
    Roman Kitaev, при выполнении некоторых условий для ноды можно тоже собрать один бинарник
    https://www.npmjs.com/package/pkg
  • Как отдать браузеру результат выполнения асинхронной функции в express.js?

    MvcBox
    @MvcBox
    С минимальными модификациями существующего кода

    app.get('/', async (req, res, next) => {
        try {
            // .....
            res.send('<img src="screenshots/' + await getPic() + '">');
          } catch (e) {
             next(e);
          }
    });
  • Имеет ли смысл TypeScript, если на том же backend php?

    MvcBox
    @MvcBox
    Дархан Камалиев, либа для runtime проверки типа данных
    Возьмем что-то банальное:
    import { assertType } from 'typescript-is';
    
    interface User
    {
        firstName: string;
        lastName: string;
        age: number;
        avatar?: string;
    }
    
    interface UsersResponse
    {
        totalCount: number;
        users: User[];
    }
    
    /*
     Тут какой-то ваш код, где получаете данные в переменную "data"
    */
    
    assertType<UsersResponse>(data); // Если то, что в "data", не соответствует структуре UsersResponse, то будет выброшено исключение

    Также посмотрите документацию, там достаточно примеров
  • Как правильно спроектировать приложение?

    MvcBox
    @MvcBox
    чистом PHP

    Зачем? Чем не устраивают фреймворки?
  • Как спарсить hhru?

    MvcBox
    @MvcBox
    Владислав, ага. Если планируете активно парсить HH, то этот сервис тоже пригодится https://luminati.io/
  • Как эффективно организовать WIFI в квартире?

    MvcBox
    @MvcBox
    Насчет кинетиков плюсую.
    Приобрел на прошлой неделе Keenetic Ultra (KN-1810), доволен как слон.
    Отличное решение за свои деньги