OEP(протекторы).

Тема в разделе "WASM.RESEARCH", создана пользователем Indy_, 3 апр 2019.

  1. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Это вы про обфускацию видимо, это все ерунда. Дело не в сложности, как я писал выше, а соотношении сложности последующего кряка/скорости работы.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ну в этом плане, я думаю, виртуализация с JIT-компиляцией в рантайме будет хорошим решением. Ты не сможешь пропатчить, пока не разберешься в формате байт-кода вм, плюс на уровне JIT-компиля можно встроить проверки каких-то контрольных сумм байт-кода и компилировать некорректный код, если контрольные суммы не сходятся.
     
  3. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Кстати, смотрел недавно исходники рантайма дотнетовского, оказывается, у них JIT со всеми фазами оптимизации на плюсах написан. Поехавшие товарищи, однако. Чет даже грустно стало.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Так а на чем он должен был быть написан? На сишечке?
     
  5. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Сам на себе и должен быть написан :)
     
  6. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Зачем, есть же F#. Они его зря пилят, что ли.
     
  7. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Практически 90% софта можно ломануть инлайн патчем, имхо все они юзают в том или ином случае либо шадов, либо ntdll. Пока существуют API (native API, сисколы) все можно подменить/крякнуть.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    При всем желании нельзя написать гц, на языке, который требует наличия гц. Всякие метациркулярные JIT-компили, как например PyPy, жульничают за счет того, что используют низкоуровневые собственные сабсеты языка (в случае PyPy - это RPython), на которых уже кодят и гц и компиль. Просто мелкомягкие не стали заморачиваться такой штукой.
    --- Сообщение объединено, 23 фев 2021 ---
    Ну можно защиту на криптографии строить и не использовать тот же встроенный CryptoAPI, bcrypt и тд.
     
  9. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    При любом раскладе ограничение функционала всяких триалов и т.п., как правило сводится к вызову/не вызову определённых API или запросами на сервер активации через те же API. Без дров защита - не защита, и то обходится, если софт стоящий - сломать можно, дело в цене вопроса как всегда.
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    если ключевой функционал на облаке, то от ломания клиентской софтины толку Зеро иль ключевые функи в железку мб впихнуты.
     
  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Если я правильно понял эту глубокую метафору, то и сама OEP может быть абстракцией. Чисто технически она же не нужна, для того, чтобы абстрактный процессор исполнял абстрактную задачу: программа же не обязательно должна быть продуктом компилятора, есть мизерная возможность, что программа самозародилась, как мыши в шкафу у Аристотеля. И такую возможность тоже следует закладывать в сраный алгоритм поиска OEP.
     
    q2e74 нравится это.
  12. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    и еще какой. программа - это число. разве число не получается просто так?
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Есть проблема которая нерешаема - данные не отличимы от кода. Можно графом описать процедуру и вложенные, но там встретится указатель по которому никак в статике не узнать это процедура или данные, таким образом нельзя покрыть весь код. Поэтому криптуется только прямые указатели, на небольшой глубине cf. По этой причине крипта не разбирает cf, блок(секция) кодовая это неделимый обьект. Если его разделить изменятся адресные смещения он будет нерабочим. А если такой обьект целостный, то только он может с собой работать, такая работа есть абсолютная адресация. Есть протекторы которые в одну секцию с исходным кодом добавляют образ с абсолютной выборкой(те есть несколько EP). Но это легко отсекается в динамике по активности(блоки с выборкой разделены всегда последний и есть oep).
     
    Последнее редактирование: 28 фев 2021
  14. RETN

    RETN Member

    Публикаций:
    4
    Регистрация:
    4 апр 2020
    Сообщения:
    74
    Indy_, Да, это так, пайлоад обычно (у меня) размазывается по кодовой и по секции данных, отличить оч трудно, ихо если юзаешь сепшены и самотрассировку это вообще задача конечно решаемая оч. долго и трудоёмко. По облаку -не согласен, дело в том что если предположить гипотетически, что там какой либо суперкомпьютер с N невъе...бенных - количеством процессоров и ресурсов, то по Теореме о бесконечных обезьянах (https://ru.wikipedia.org/wiki/Теорема_о_бесконечных_обезьянах#:~:text=Теоре́ма о бесконе́чных обезья́нах (в,напечатает любой наперёд заданный текст.) оно будет взломано/сдамплено и задетектировано. (Про объезъян к сожалению с нынешними мощностями это близко к правде).
     
  15. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Да хватит уже эту мантру повторять. Все там отличимо. Если тебе показать рандомный буфер в иде и нажать C, ты за долю секунды поймешь, код это или мусор. И у тебя при этом нет никаких сверхспособностей. Примитивный анализ, надо только формализовать ход своего мышления при этом и получишь заветный алгоритм. Причем, в реальном коде ты имеешь дело не с рандомными буферами, если у тебя есть указатель, то он гарантированно указывает на данные или начало инструкции. Вероятность встретить данные, которые декодируются в реальный валидный cfg КРАЙНЕ МАЛА :)
     
    UbIvItS нравится это.
  16. R81...

    R81... Active Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    149
  17. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    R81...,
    Начинаешь декодировать инструкции с 0x000047a1 и если пройдешь все control-flow ветки без ошибок декодирования или семантики, то это код.
     
  18. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    А если к примеру есть такой код который генерирует ассемблерные вставки? Взять тот же VB6, в нем есть такие данные:

    upload_2021-2-28_18-25-26.png

    Олька и IDA определяют его как код (и то неправильно, с погрешностями), но на самом деле это данные которые используются на этапе построения переходников.
     
    Последнее редактирование: 28 фев 2021
  19. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Thetrik,
    Да в бейсике и дельфях столько дополнительной инфы, что там весь образ по байтам разложить можно. Вангую, что код, что ты привел, детальнейше описан в какой-нибудь rtti-структуре.
     
  20. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Это рантайм (причем недокументированный) от VB6, а не приложение скомпилированное на VB6.