Абстрактный вопрос, крякаю рендер возникли трудности, нужен совет

Discussion in 'Реверсинг' started by mirvirusov, 11 Jul 2021.

  1. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    В общем кто знаком с 3D графикой думаю знает, что существуют сторонние плагины-рендеры, в демо версии обычно на выходное изображение накладываются водяные знаки. Полная версия после установки требует лицензию и не дает получить никакое изображение даже с водяными знаками. В полной версии я пропатчил проверку лицензии и заставил рендер вывести изображение(я банально заменил call на mov eax, 1, так как опытным путем было вычислено, что если функция отрабатывает с легальной лицензией, то в конце в eax заносится 1, в противном случае 0 и дальнейший ход программы зависит от этого значения), но увидел, что изображение все испорчено и на него наложен шум помимо водяных знаков, далее я определил, что там стоит защита кода от модификации, если более просто - контрольная сумма байтов некоторых критичных к изменениям функций. Это мне тоже удалось обойти, я брякнулся после вычисления суммы на месте где она сравнивается с той, что должна быть и просто пропатчил старый хеш на новый. Шум убрался но остались водяные знаки. Как я предполагаю, внутри функции, которая проверяет лицензию, устанавливаются какие-то значения, которые в дальшейшем при старте рендера проверяются некой условной конструкцией, и она уже определяет будут ли добавлены водяные знаки или нет. Так как вызов функции я просто заменяю на другую инструкцию, то следовательно и переменные эти не инициализируются нужными значениями. Отследить какие именно значения и куда именно заносятся не предполагается возможным, потому что функция проверки многопоточная и каждый из потоков совершает сотни и тысячи операций записи\чтения в память приложения, и найти нужное значение в этой каше все равно, что искать иголку в стоге сена. Далее я попытался найти конструкцию, которая проверяет эти переменные и принимает решение о добавлении водяных знаков. Во время рендера паттерн водяных знаков меняется, это не просто какой-то текст поверх изображения, а процедурно-генерируемый полупрозрачный шум, который накладывается на изображение в виде текстового логотипа компании и во время рендера постоянно меняется, меняется сам паттерн, а буквы остаются на своих местах. Я нашел цикл, и вроде бы как могу предположить, что водяные знаки генерируются и добавляются внутри него, я поставил бряк на начало цикла и каждый раз когда я давал ему сделать один проход этот паттерн(шум) на водяных знаках менялся, значит он генерируется и добавляется внутри цикла ? Поправьте меня, если я ошибаюсь касательно этого умозаключения. У меня было еще предположение, что шум может генерироваться в отдельном потоке, а конструкция внутри цикла всего лишь принимает решение добавить его или нет, но сути это не меняет, если эта конструкция внутри цикла, то ее можно поменять и тогда независимо от генерации шума он не будет добавляться. Не может же этот процесс контролироваться извне, за пределами цикла ? Заметка. И первая функция, которая проверяет лицензию и вот этот цикл достаточно большие по объему кода, трассировка со скоростью 5к инструкций в секунду длится на них примерно минут по 15 и занимает на диске по 1.5 гб места, это достаточно много кода, что бы анализировать его в лоб, но нет никаких зацепок, что бы приблизиться ближе к месту, где добавляются эти водяные знаки. Может кто знает, какие-то еще методы сужения круга поиска ? Методом исключения и отсечения лишнего я вроде бы как определил, что это нужный мне цикл, но он большой как я писал выше, внутри него происходит много взаимодействия с другими dll, некоторые из них используют видеокарту для графических вычислений, некоторые выводят картинку в окно рендера, в общем очень много суеты в этом цикле, и я пока не понимаю, как мне приблизиться к месту, которое принимает решение о добавлении водяных знаков. Понятное дело, что многие из вас не знакомы с рендером и с механизмами его работы, но я постарался расписать все абстрактно, что бы это было применимо к каким-то схожим ситуациям, и хочу получить от вас такие же абстрактные ответы и советы, возможно они мне помогут.
     
  2. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Код защиты если не дергается постоянно - то вроде-как его надо и отслеживать во-первых. Во-вторых сразу загуглить все отключалки антиотладки потому что в каше рендера черта лысого найдешь а не антиотладку.
    Ну или ручками проверить... надежнее но геморнее. Заранее отключить не помешает (хотя могут быть лаги изза этого, но их вроде-как легче увидеть).

    По поводу шума... это рендер. Этот шум может генерироваться в самых разных его частях. Включая шейдеры (кстати я бы посмотрел код вершинных шейдеров на этот предмет).
    Ну тоесть рендер тебе генерирует изображение вообще-то. Он может и распараллелить его генерацию (что сложнее) и вообще поместить невидимый объект (что намного проще).
    Вариантов масса.
    =====================
    Простых путей мы не ищем же да ? Купить более нормальный плагин и там поискать например ? :)
    Зашить на самом деле много куда можно. Без кода угадать... нереально. А с кодом - его копать не захочется.

    Сужение поиска можешь сделать ты. Скажем отрубая к черту шейдеры вообще. Но вообще строго говоря вот так нопать все подряд - обычно плохая практика. Рендер минимума объектов есессно надо применить.
    В эти объекты ты можешь запихнуть метки. Можно рубить вообще половину кода закрывая его jmp'ом условно.
    Иногда оно срабатывает ! Но только иногда. Зависит от цены. Более того если это рендер - вероятно его уже кто-то крутил. Можно поискать кряку. Хотя-бы на старую версию. Уже может стать понятнее.

    Вообще же желательно найти защиту и ковырять ее код. Тоесть если это файлик - найти где этот файлик открывается и.... да хранят боги твой мозг.
    Ибо его придется применять.

    =====================
    Чойт за плагин-то кстати ?
     
  3. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Кстати постпроцессинг вполне может быть. Даже очень может быть. Тоесть уже после формирования изображения в конце просто нашлепывают
    водяной знак. Но это вроде примитивно. Тогда можно сократить посредством отбрасывания львиной доли всего этого процесса. Где-то где
    сохранение уже происходит в буфер (а лучше в файл сохранять чтоб не возиться с буфером).

    Ну тоесть если они делают хитрО - чото так кааацо - хрен ты чего найдешь методом отрубания частей кода.
     
  4. mankurt13

    mankurt13 Well-Known Member

    Joined:
    18 Oct 2019
    Messages:
    378
    Likes Received:
    1,532
    Reputations:
    3
    Скорей всего файл лицензии содержит в себе какие-то данные, использующиеся при рендеринге. Поэтому тупо затык булева фалса на тру при проверке лицензии приводит к таким спецэффектам. Пытаться выщемить такие косяки наугад имхо мартышкин труд, надо сочинить файл лицензии и изучать как он обрабатываться плугином, а еще лучше взять чужую лицензию и пробовать подсовывать программе подходящие этой лицензии хардварные иденты (или функцию от этих идентов, например хеш, если программа сваливает их в кучу, хеширует и использует хеш для проверки). Принцип минимального вмешательства.
     
    #4 mankurt13, 11 Jul 2021
    Last edited: 11 Jul 2021
  5. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Код защиты дергается каждый раз когда нажимаешь кнопку рендера, тоесть если рендеришь много кадров то проверок будет столько сколько кадров ты рендеришь. Антиотладку всю обошел, у меня есть валид файлы лицензии и под отладчиком все нормально работает без шума и водяных знаков. То-есть дело не в антиотладке. По поводу того что бы покопаться в старых кряках, последний кряк был сделан году так в 2017, может даже раньше, сам кряк реализован челиком, который по видимому не хотел что бы кто- то узнал как он сделал кряк, там в одну из библиотек рендера в импорт всобачена сторонняя либа, которой нет в оригинальном рендере, эта либа от крекера, она за собой тянет еще 2 либы, я пробовал их реверсить, но там все довольно сложно, куча шеллкодов, самомодификация и много всякой чепухи в которую не хочется впутываться, в общем как я понял это встроенный лоадер, который в памяти патчит необходимые куски памяти, тут единственный вариант это сделать дамп оригинального процесса и дамп того, который обработан dll ками крекера, так как там мне кажется защита стоит даже получше чем у самого рендера, раз челик смог ее сломать и следовательно во всем этим знаком и может сделать лучше, но это предположения.
     
  6. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Да согласен, это долго, но на самом деле защита я уверен не такая уж там замороченная, они спрятали строки импортируемой функции, которая используется для антиотладки в коде проверки хешсуммы участков кода просто написав строку задом наперед, я даже в дампе сразу спалил ее, просто строку задом наперед написать это ж надо додуматься до такой банальщины, никакой шифровки, а сами хеш суммы хранятся в секции инициализированных данных в открытом виде без шифровки, я бы их шифровал как минимум, что бы нельзя было просто взять и пропатчить, пришлось бы раскручивать алгоритм расшифровки, что бы посчитать новый хеш, и зашифровать его, что бы он потом корректно расшифровывылся и приходил к нужному виду. В общем тут сложности не сколько в технической подготовке разработчиков в плане защиты, сколько в оъеме кода, который приходится анализировать.
     
  7. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Да, такие файлы есть, но этот файл получается через интернет один раз при первой активации раз и навсегда, и люди с лицензией предоставили мне свои версии этих файлов и они у всех совпадают байт в байт, так что там нет привязки к железу, привязка к железу в других файлах, они проверяются именно в той функции, которую я вырезаю и заменяю просто инструкцией, которая сигнализирует о успешно отработавшей функции. Рендер после этого запускается и работает прекрасно (с учетом если пропатчить контрольную сумму в механизме защиты) но как я писал выше остаются водяные знаки. Понятное дело, что внутри этой функции производятся какие-то инициализации, каких то значений, найти их не представляется возможным, так как там тысячи обращений к памяти и по записи и по чтению. Рендер после вырезания лицензии работает идеально без нареканий, просто поверх изображения наложены шумящие буквы, при этом там где водяных знаков нет, рендер выглядит идеально, тоесть там в функции не производятся какие-то критично важные для рендера действия, опытным путем я вычислил что водяные знаки добавляются позже, причем при прогрессивном рендере можно задать количество проходов и на каждом проходе шум меняется, это происходит на каждой итерации найденного мою цикла, следовательно шум генерируется и добавляется внутри цикла.
     
  8. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Это само-собой. Тут сомнений и не было.
    Но он же модифицирует файлик ? Нахрен тебе туда впутываться (тем более там вообще может быть просто демка а не зощита), если тебе надо сравнить производимые модификации. Чо он там копает.
    Если в памяти... грхм... параноидальный этот мистер крякер. Но все-равно это лучше чем нопать рандомно. Наверное...

    Значит и решения должны быть простые. Первое - это постпроцессинг. Это самое простое. Свет просчитан, картинка почти готова - после этого накладываем
    спецэффекты.

    Хотя с другой стороны там банально могли модифицировать маску. Ну тоесть на любое изображение ты можешь наложить маску. Генеришь такую и подсовываешь
    ее на любом этапе рендера на каком захочешь. И уже будет тебе и шум и водяной знак если хочешь. Но раз шум ты отрубил - видимо сделали отдельно.

    В любом случае на словах это подсказать непонятно как.
    И не надо очень высокой подготовки даже защитников потому как там просто тупо много кода и много мест куда можно его воткнуть.

    Тести... "дорогу осилит идущий" :)
     
  9. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Сложность еще в том что зощита может находиться в коде шейдера нпример. Тоесть он тупо проверяет что-то. У тебя в асме нихрена нет а шейдер в голом виде записан в каком-нибудь
    текстовом файле. И иди ищи... пока не устанешь. Х/з.
     
  10. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Я могу чуть позже кинуть в личные сообщения видео, на котором показываю этапы, и что происходит в результате модификаций
     
  11. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Только не в личные сообщения. Пости всем чоушь.
    Мне это не поможет, у меня хекс-редактора даже нет нормального :)
     
  12. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Не хочется постить в публичном месте, потому что так я палю методы которыми пробираюсь вглубь защиты, не хочется что бы разработчики плагина увидели видео и сменили тип защиты, в будущих версиях придется заново копаться во всем коде, ну при условии что у меня получится победить эту версию
     
  13. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Скорее всего челик который сделал предыдущий кряк не параноик, а просто не хотел что бы разрабы увидели как он сделал кряк. для себя же вклад на будущее делал.
     
  14. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Я почему тебе хочу написать в лс, потому что ты видимо разбираешься как работает рендер, необязательно тебе хекс редактор иметь, просто видео глянешь и свои умозаключения по этому поводу напишешь
     
  15. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Посмотри на это с другой стороны например: может быть кто-нибудь научится этим методам (не уверен я сильно что они так секретны).

    Я когда-то думал тоже что мои методы очень секретны :) Пока не добрался до реально секретных.
    Когда будут секретные - ты их узнаешь без сомнения и к тому времени уже будешь знать даже сколько они могут стоить :)

    Жадность - это плохо :) Но хоть честно сказал. Я не говорил. Просто ныкал по норам. И совершенно напрасно.
    Это как-раз таки метод самообучения. Ты научился, кто-то еще научился. Научили друг-друга.

    А когда дойдет до секретности - это уже будет совсем другая история. Сейчас - я не уверен что у тебя есть что-то секретное. И ушь тем более что ты на этом заработаешь нормально.
     
  16. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    ты не понял, секретны не мои методы относительно других реверсеров, я с радостью расскажу о них каждому реверсеру на этом форуме и еще на паре других впридачу, я не хочу что бы это видео увидели разработчики плагина, вот от них я бы хотел это скрыть
     
  17. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,107
    Likes Received:
    8,480
    Reputations:
    25
    Плевать на них. С высокой вероятностью им вообще похрен. До выхода кряка хрен там кто почешется :)
     
  18. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Я написал в лс
     
    DartPhoenix likes this.
  19. mirvirusov

    mirvirusov New Member

    Joined:
    11 Jun 2021
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Пс, ответь в лс, идейка возникла одна