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

Discussion in 'WASM.RESEARCH' started by Indy_, Apr 3, 2019.

  1. RETN

    RETN Member

    Blog Posts:
    4
    Joined:
    Apr 4, 2020
    Messages:
    71
    Это вы про обфускацию видимо, это все ерунда. Дело не в сложности, как я писал выше, а соотношении сложности последующего кряка/скорости работы.
     
  2. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Ну в этом плане, я думаю, виртуализация с JIT-компиляцией в рантайме будет хорошим решением. Ты не сможешь пропатчить, пока не разберешься в формате байт-кода вм, плюс на уровне JIT-компиля можно встроить проверки каких-то контрольных сумм байт-кода и компилировать некорректный код, если контрольные суммы не сходятся.
     
  3. Microedition

    Microedition Active Member

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

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Так а на чем он должен был быть написан? На сишечке?
     
  5. RETN

    RETN Member

    Blog Posts:
    4
    Joined:
    Apr 4, 2020
    Messages:
    71
    Сам на себе и должен быть написан :)
     
  6. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Зачем, есть же F#. Они его зря пилят, что ли.
     
  7. RETN

    RETN Member

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

    Rel Well-Known Member

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

    RETN Member

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

    UbIvItS Well-Known Member

    Blog Posts:
    0
    Joined:
    Jan 5, 2007
    Messages:
    6,242
    если ключевой функционал на облаке, то от ломания клиентской софтины толку Зеро иль ключевые функи в железку мб впихнуты.
     
  11. f13nd

    f13nd Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 22, 2009
    Messages:
    2,020
    Если я правильно понял эту глубокую метафору, то и сама OEP может быть абстракцией. Чисто технически она же не нужна, для того, чтобы абстрактный процессор исполнял абстрактную задачу: программа же не обязательно должна быть продуктом компилятора, есть мизерная возможность, что программа самозародилась, как мыши в шкафу у Аристотеля. И такую возможность тоже следует закладывать в сраный алгоритм поиска OEP.
     
    q2e74 likes this.
  12. q2e74

    q2e74 Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2018
    Messages:
    998
    и еще какой. программа - это число. разве число не получается просто так?
     
  13. Indy_

    Indy_ Well-Known Member

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

    RETN Member

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

    rmn Well-Known Member

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

    R81... Active Member

    Blog Posts:
    0
    Joined:
    Feb 1, 2020
    Messages:
    166
  17. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    Joined:
    Nov 23, 2004
    Messages:
    2,347
    R81...,
    Начинаешь декодировать инструкции с 0x000047a1 и если пройдешь все control-flow ветки без ошибок декодирования или семантики, то это код.
     
  18. Thetrik

    Thetrik UA6527P

    Blog Posts:
    0
    Joined:
    Jul 25, 2011
    Messages:
    887
    А если к примеру есть такой код который генерирует ассемблерные вставки? Взять тот же VB6, в нем есть такие данные:

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

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

    rmn Well-Known Member

    Blog Posts:
    0
    Joined:
    Nov 23, 2004
    Messages:
    2,347
    Thetrik,
    Да в бейсике и дельфях столько дополнительной инфы, что там весь образ по байтам разложить можно. Вангую, что код, что ты привел, детальнейше описан в какой-нибудь rtti-структуре.
     
  20. Thetrik

    Thetrik UA6527P

    Blog Posts:
    0
    Joined:
    Jul 25, 2011
    Messages:
    887
    Это рантайм (причем недокументированный) от VB6, а не приложение скомпилированное на VB6.