• Как зашифровать алгоритм внутри программы?

    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, Вам мягко намекнули, что текущей Вашей квалификации не хватит для нормальной реализации задуманного. Вы же, не поняв ответа, пытаетесь судить о других.
    Написано
  • Как защитить программу от слива?

    MvcBox
    @MvcBox
    ведь наверняка эти решения далеко не бесплатные :)

    Да, они не бесплатные, но ценовая политика вполне адекватная :)
    К примеру, у Oreans Technologies стоимость "Developer License" для самого дорогого их продукта составляет 400 евро, а "Company License" - 800 евро. Согласитесь, что 400 евро для индивидуального разработчика не является какой-то нереальной суммой :)

    Да, поначалу это удел гиков-одиночек, но накапливается критическая масса, когда требования квалификации снижаются. Именно поэтому и сама защита должна постоянно обновляться :)

    А эти продукты постоянно обновляются. К примеру, для Oreans Technologies до сих пор нету автоматических инструментов для девиртуализации защищенного кода, из-за чего все еще нельзя восстановить полную логику работы защищенного приложения.
    Написано
  • Как защитить программу от слива?

    MvcBox
    @MvcBox
    На это такие монстры работают как Autodesk - и то не могут добиться

    Небольшой оффтоп.
    В сфере защиты программного обеспечения "масштаб" компании не коррелирует с качеством.
    Все существующие на данный момент лучшие публичные продукты, которые помогают разработчикам значительно усложнить взлом их ПО, разработаны "одиночками":
    • Oreans Technologies (лучшее в данный момент решение): Rafael Ahucha
    • VMProtect (неплохое решение, но с появлением VTIL надежность сильно упала): Иван Пермяков
    • Enigma Protector (популярное в СНГ решение, подойдет для защиты от реверсеров-новичков): Иван Сухов


    Разработка подобных решений в больших компаниях невозможна по одной, но важной причине - человеческий фактор.
    Защита ПО сейчас сводится к одному единственному подходу - виртуализация исполняемого кода.
    Именно генерируемая виртуальная машина - это самая важная часть всех подобных решений.
    Если хоть один из сотрудников продаст посторонним "секреты" этой виртуальной машины (ну или решит сам подзаработать на взломе ПО, которое защищено данным решением) - вся работа кучи людей пойдет в мусор.
    Учитывая текучку сотрудников в больших компаниях - шанс подобного развития событий стремится к 100%.
    А делать все заново долго и дорого, да и не имеет смысла, так как ситуация запросто может повториться.

    Именно по этой причине большинство компаний любого масштаба используют решения этих "одиночек".
    Несколько примеров:
    • Denuvo (самая популярная DRM система для AAA игр) - VMProtect под капотом
    • PUBG - Oreans Technologies
    • Vanguard (античит от Riot Games) - VMProtect
    • Официальные сервера Lineage 2 - Oreans Technologies
    • Некоторые игры от mail.ru - Oreans Technologies


    И так можно продолжать долго
    Написано
  • Не пробивается 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), доволен как слон.
    Отличное решение за свои деньги
  • Все получили письма счастья от Payoneer? Что теперь делать?

    MvcBox
    @MvcBox
    Как писали в саппорте пионера - апворк не требует , чтобы карта была оформлена на фрилансера.

    Вот только апворк так не думает.
    Сейчас у апворка началось очередное "обострение" касаемо банов аккаунтов.
    У знакомого забанили аккаунт за то, что имя/фамилия профиля не совпадали с теми, на которые зарегистрирована карта (это официальный ответ полученный от саппорта).
  • Замыкание запоминает все или то, что нужно?

    MvcBox
    @MvcBox
    Не-а, пока будет существовать getName - остальные переменные не будут удалены.