В общем кто знаком с 3D графикой думаю знает, что существуют сторонние плагины-рендеры, в демо версии обычно на выходное изображение накладываются водяные знаки. Полная версия после установки требует лицензию и не дает получить никакое изображение даже с водяными знаками. В полной версии я пропатчил проверку лицензии и заставил рендер вывести изображение(я банально заменил call на mov eax, 1, так как опытным путем было вычислено, что если функция отрабатывает с легальной лицензией, то в конце в eax заносится 1, в противном случае 0 и дальнейший ход программы зависит от этого значения), но увидел, что изображение все испорчено и на него наложен шум помимо водяных знаков, далее я определил, что там стоит защита кода от модификации, если более просто - контрольная сумма байтов некоторых критичных к изменениям функций. Это мне тоже удалось обойти, я брякнулся после вычисления суммы на месте где она сравнивается с той, что должна быть и просто пропатчил старый хеш на новый. Шум убрался но остались водяные знаки. Как я предполагаю, внутри функции, которая проверяет лицензию, устанавливаются какие-то значения, которые в дальшейшем при старте рендера проверяются некой условной конструкцией, и она уже определяет будут ли добавлены водяные знаки или нет. Так как вызов функции я просто заменяю на другую инструкцию, то следовательно и переменные эти не инициализируются нужными значениями. Отследить какие именно значения и куда именно заносятся не предполагается возможным, потому что функция проверки многопоточная и каждый из потоков совершает сотни и тысячи операций записи\чтения в память приложения, и найти нужное значение в этой каше все равно, что искать иголку в стоге сена. Далее я попытался найти конструкцию, которая проверяет эти переменные и принимает решение о добавлении водяных знаков. Во время рендера паттерн водяных знаков меняется, это не просто какой-то текст поверх изображения, а процедурно-генерируемый полупрозрачный шум, который накладывается на изображение в виде текстового логотипа компании и во время рендера постоянно меняется, меняется сам паттерн, а буквы остаются на своих местах. Я нашел цикл, и вроде бы как могу предположить, что водяные знаки генерируются и добавляются внутри него, я поставил бряк на начало цикла и каждый раз когда я давал ему сделать один проход этот паттерн(шум) на водяных знаках менялся, значит он генерируется и добавляется внутри цикла ? Поправьте меня, если я ошибаюсь касательно этого умозаключения. У меня было еще предположение, что шум может генерироваться в отдельном потоке, а конструкция внутри цикла всего лишь принимает решение добавить его или нет, но сути это не меняет, если эта конструкция внутри цикла, то ее можно поменять и тогда независимо от генерации шума он не будет добавляться. Не может же этот процесс контролироваться извне, за пределами цикла ? Заметка. И первая функция, которая проверяет лицензию и вот этот цикл достаточно большие по объему кода, трассировка со скоростью 5к инструкций в секунду длится на них примерно минут по 15 и занимает на диске по 1.5 гб места, это достаточно много кода, что бы анализировать его в лоб, но нет никаких зацепок, что бы приблизиться ближе к месту, где добавляются эти водяные знаки. Может кто знает, какие-то еще методы сужения круга поиска ? Методом исключения и отсечения лишнего я вроде бы как определил, что это нужный мне цикл, но он большой как я писал выше, внутри него происходит много взаимодействия с другими dll, некоторые из них используют видеокарту для графических вычислений, некоторые выводят картинку в окно рендера, в общем очень много суеты в этом цикле, и я пока не понимаю, как мне приблизиться к месту, которое принимает решение о добавлении водяных знаков. Понятное дело, что многие из вас не знакомы с рендером и с механизмами его работы, но я постарался расписать все абстрактно, что бы это было применимо к каким-то схожим ситуациям, и хочу получить от вас такие же абстрактные ответы и советы, возможно они мне помогут.
Код защиты если не дергается постоянно - то вроде-как его надо и отслеживать во-первых. Во-вторых сразу загуглить все отключалки антиотладки потому что в каше рендера черта лысого найдешь а не антиотладку. Ну или ручками проверить... надежнее но геморнее. Заранее отключить не помешает (хотя могут быть лаги изза этого, но их вроде-как легче увидеть). По поводу шума... это рендер. Этот шум может генерироваться в самых разных его частях. Включая шейдеры (кстати я бы посмотрел код вершинных шейдеров на этот предмет). Ну тоесть рендер тебе генерирует изображение вообще-то. Он может и распараллелить его генерацию (что сложнее) и вообще поместить невидимый объект (что намного проще). Вариантов масса. ===================== Простых путей мы не ищем же да ? Купить более нормальный плагин и там поискать например ? Зашить на самом деле много куда можно. Без кода угадать... нереально. А с кодом - его копать не захочется. Сужение поиска можешь сделать ты. Скажем отрубая к черту шейдеры вообще. Но вообще строго говоря вот так нопать все подряд - обычно плохая практика. Рендер минимума объектов есессно надо применить. В эти объекты ты можешь запихнуть метки. Можно рубить вообще половину кода закрывая его jmp'ом условно. Иногда оно срабатывает ! Но только иногда. Зависит от цены. Более того если это рендер - вероятно его уже кто-то крутил. Можно поискать кряку. Хотя-бы на старую версию. Уже может стать понятнее. Вообще же желательно найти защиту и ковырять ее код. Тоесть если это файлик - найти где этот файлик открывается и.... да хранят боги твой мозг. Ибо его придется применять. ===================== Чойт за плагин-то кстати ?
Кстати постпроцессинг вполне может быть. Даже очень может быть. Тоесть уже после формирования изображения в конце просто нашлепывают водяной знак. Но это вроде примитивно. Тогда можно сократить посредством отбрасывания львиной доли всего этого процесса. Где-то где сохранение уже происходит в буфер (а лучше в файл сохранять чтоб не возиться с буфером). Ну тоесть если они делают хитрО - чото так кааацо - хрен ты чего найдешь методом отрубания частей кода.
Скорей всего файл лицензии содержит в себе какие-то данные, использующиеся при рендеринге. Поэтому тупо затык булева фалса на тру при проверке лицензии приводит к таким спецэффектам. Пытаться выщемить такие косяки наугад имхо мартышкин труд, надо сочинить файл лицензии и изучать как он обрабатываться плугином, а еще лучше взять чужую лицензию и пробовать подсовывать программе подходящие этой лицензии хардварные иденты (или функцию от этих идентов, например хеш, если программа сваливает их в кучу, хеширует и использует хеш для проверки). Принцип минимального вмешательства.
Код защиты дергается каждый раз когда нажимаешь кнопку рендера, тоесть если рендеришь много кадров то проверок будет столько сколько кадров ты рендеришь. Антиотладку всю обошел, у меня есть валид файлы лицензии и под отладчиком все нормально работает без шума и водяных знаков. То-есть дело не в антиотладке. По поводу того что бы покопаться в старых кряках, последний кряк был сделан году так в 2017, может даже раньше, сам кряк реализован челиком, который по видимому не хотел что бы кто- то узнал как он сделал кряк, там в одну из библиотек рендера в импорт всобачена сторонняя либа, которой нет в оригинальном рендере, эта либа от крекера, она за собой тянет еще 2 либы, я пробовал их реверсить, но там все довольно сложно, куча шеллкодов, самомодификация и много всякой чепухи в которую не хочется впутываться, в общем как я понял это встроенный лоадер, который в памяти патчит необходимые куски памяти, тут единственный вариант это сделать дамп оригинального процесса и дамп того, который обработан dll ками крекера, так как там мне кажется защита стоит даже получше чем у самого рендера, раз челик смог ее сломать и следовательно во всем этим знаком и может сделать лучше, но это предположения.
Да согласен, это долго, но на самом деле защита я уверен не такая уж там замороченная, они спрятали строки импортируемой функции, которая используется для антиотладки в коде проверки хешсуммы участков кода просто написав строку задом наперед, я даже в дампе сразу спалил ее, просто строку задом наперед написать это ж надо додуматься до такой банальщины, никакой шифровки, а сами хеш суммы хранятся в секции инициализированных данных в открытом виде без шифровки, я бы их шифровал как минимум, что бы нельзя было просто взять и пропатчить, пришлось бы раскручивать алгоритм расшифровки, что бы посчитать новый хеш, и зашифровать его, что бы он потом корректно расшифровывылся и приходил к нужному виду. В общем тут сложности не сколько в технической подготовке разработчиков в плане защиты, сколько в оъеме кода, который приходится анализировать.
Да, такие файлы есть, но этот файл получается через интернет один раз при первой активации раз и навсегда, и люди с лицензией предоставили мне свои версии этих файлов и они у всех совпадают байт в байт, так что там нет привязки к железу, привязка к железу в других файлах, они проверяются именно в той функции, которую я вырезаю и заменяю просто инструкцией, которая сигнализирует о успешно отработавшей функции. Рендер после этого запускается и работает прекрасно (с учетом если пропатчить контрольную сумму в механизме защиты) но как я писал выше остаются водяные знаки. Понятное дело, что внутри этой функции производятся какие-то инициализации, каких то значений, найти их не представляется возможным, так как там тысячи обращений к памяти и по записи и по чтению. Рендер после вырезания лицензии работает идеально без нареканий, просто поверх изображения наложены шумящие буквы, при этом там где водяных знаков нет, рендер выглядит идеально, тоесть там в функции не производятся какие-то критично важные для рендера действия, опытным путем я вычислил что водяные знаки добавляются позже, причем при прогрессивном рендере можно задать количество проходов и на каждом проходе шум меняется, это происходит на каждой итерации найденного мою цикла, следовательно шум генерируется и добавляется внутри цикла.
Это само-собой. Тут сомнений и не было. Но он же модифицирует файлик ? Нахрен тебе туда впутываться (тем более там вообще может быть просто демка а не зощита), если тебе надо сравнить производимые модификации. Чо он там копает. Если в памяти... грхм... параноидальный этот мистер крякер. Но все-равно это лучше чем нопать рандомно. Наверное... Значит и решения должны быть простые. Первое - это постпроцессинг. Это самое простое. Свет просчитан, картинка почти готова - после этого накладываем спецэффекты. Хотя с другой стороны там банально могли модифицировать маску. Ну тоесть на любое изображение ты можешь наложить маску. Генеришь такую и подсовываешь ее на любом этапе рендера на каком захочешь. И уже будет тебе и шум и водяной знак если хочешь. Но раз шум ты отрубил - видимо сделали отдельно. В любом случае на словах это подсказать непонятно как. И не надо очень высокой подготовки даже защитников потому как там просто тупо много кода и много мест куда можно его воткнуть. Тести... "дорогу осилит идущий"
Сложность еще в том что зощита может находиться в коде шейдера нпример. Тоесть он тупо проверяет что-то. У тебя в асме нихрена нет а шейдер в голом виде записан в каком-нибудь текстовом файле. И иди ищи... пока не устанешь. Х/з.
Я могу чуть позже кинуть в личные сообщения видео, на котором показываю этапы, и что происходит в результате модификаций
Только не в личные сообщения. Пости всем чоушь. Мне это не поможет, у меня хекс-редактора даже нет нормального
Не хочется постить в публичном месте, потому что так я палю методы которыми пробираюсь вглубь защиты, не хочется что бы разработчики плагина увидели видео и сменили тип защиты, в будущих версиях придется заново копаться во всем коде, ну при условии что у меня получится победить эту версию
Скорее всего челик который сделал предыдущий кряк не параноик, а просто не хотел что бы разрабы увидели как он сделал кряк. для себя же вклад на будущее делал.
Я почему тебе хочу написать в лс, потому что ты видимо разбираешься как работает рендер, необязательно тебе хекс редактор иметь, просто видео глянешь и свои умозаключения по этому поводу напишешь
Посмотри на это с другой стороны например: может быть кто-нибудь научится этим методам (не уверен я сильно что они так секретны). Я когда-то думал тоже что мои методы очень секретны Пока не добрался до реально секретных. Когда будут секретные - ты их узнаешь без сомнения и к тому времени уже будешь знать даже сколько они могут стоить Жадность - это плохо Но хоть честно сказал. Я не говорил. Просто ныкал по норам. И совершенно напрасно. Это как-раз таки метод самообучения. Ты научился, кто-то еще научился. Научили друг-друга. А когда дойдет до секретности - это уже будет совсем другая история. Сейчас - я не уверен что у тебя есть что-то секретное. И ушь тем более что ты на этом заработаешь нормально.
ты не понял, секретны не мои методы относительно других реверсеров, я с радостью расскажу о них каждому реверсеру на этом форуме и еще на паре других впридачу, я не хочу что бы это видео увидели разработчики плагина, вот от них я бы хотел это скрыть