Сейчас на форуме: NIKOLA, Magister Yoda (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› Ватермарк |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 января 2018 19:09 · Поправил: Jaa · Личное сообщение · #1 Всем привет. С новогодними праздниками. Анализирую программку на сишарпе, запнулся на одной фиговине нездоровой, в незареганой версии на созданные картинки налаживается ватермарк Unregistered Version и название софта, в зарегистрированной версии, светло-зеленая полоса диагональная. Одна дллка под вмпротом, несколько методов из неё тянут данные, посмотреть внутренности загруженной дллки пока не удалось. Проверка регистрации онлайн тут public string SentandGetURLData(string type), судя по всему вернуться должно string больше 10, если ставлю больше десяти не прохожу два сравнения тут. Тоесть используется License_key из CxImageFrame.dll, а special_hash из SentandGetURLData в string. Какое значение в string должен возвратить метод SentandGetURLData при успешной проверки регистрации??? Регистрация программы MainForm.Instance.boolIsProgramRegistered = true; и правильный ответ чтобы пройти проверку ниже Code:
Пробовал в ресурсах подменить ватермарк UnregisteredVersion_logo на исправленный фотошопом, как то эта дрянь палит и все равно ставит зеленые полосы. Тоесть без регистрации первое фото, с пропатченой регистрацией второе фото. |
|
Создано: 03 января 2018 19:27 · Личное сообщение · #2 |
|
Создано: 03 января 2018 19:38 · Личное сообщение · #3 Я не нашел в коде где программа добавляет зеленую полосу, остальные все ватермарки ставятся в методе methodSavingOfMosaic Code:
Code:
Code:
Добавлено спустя 10 минут Тоесть проблема в том что патчу зарегистрированной версией зеленая полоса появляется на картинке, меняю изображение ватермарков незарегистрированной версии, сразу появляется эта зеленая полоса, программа незарегана, а механизм защиты сработал и показал зеленые полосы. Добавлено спустя 15 минут Что должен возвратить метод SentandGetURLData чтобы пройти все проверки и стать зарегистрированным? Цифра больше десяти не канает, меньше тоже. Добавлено спустя 17 минут difexacaw пишет: Я бы на вашем месте не разбирался с механизмами, а просто сравнил бы пару картинок, для примера тестовых, обычным сравнением выделил штамп и удалил через эту инфу его со всех картинок Мне нужно именно с программой разобраться, а не с картинками. Если б нужно было, я б написал удаление ватермарка с картинок. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 03 января 2018 20:10 · Личное сообщение · #4 |
|
Создано: 03 января 2018 20:28 · Поправил: sefkrd · Личное сообщение · #5 Jaa У тебя обязательное условие: Code:
Длина hash овер 10 и нум3 == 1 Это бы глянуть: MainForm.Instance.IsRegisteredFunction_2(int a, int b) Добавлено спустя 15 минут Патч 2-мя байтами(по крайней мере, из того, что вижу).. |
|
Создано: 03 января 2018 21:06 · Личное сообщение · #6 sefkrd пишет: Патч 2-мя байтами(по крайней мере, из того, что вижу).. А конкретнее? sefkrd пишет: Это бы глянуть: MainForm.Instance.IsRegisteredFunction_2(int a, int b) Это функа из дллки которая под вмпротом Добавлено спустя 4 минуты ELF_7719116 пишет: в какой момент он вообще её грузит? При сохрании фотоколлажа, там некоторые нужные функи под вм вмпрота 2. |
|
Создано: 03 января 2018 21:20 · Поправил: sefkrd · Личное сообщение · #7 |
|
Создано: 03 января 2018 21:35 · Личное сообщение · #8 |
|
Создано: 03 января 2018 21:36 · Личное сообщение · #9 |
|
Создано: 03 января 2018 21:46 · Личное сообщение · #10 |
|
Создано: 03 января 2018 22:12 · Личное сообщение · #11 |
|
Создано: 03 января 2018 22:15 · Личное сообщение · #12 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 04 января 2018 13:31 · Поправил: ELF_7719116 · Личное сообщение · #13 Jaa пишет: При сохрании фотоколлажа, там некоторые нужные функи под вм вмпрота 2. Там, по существу, накрыты GetAdaptationHbitmapOfImage, IsRegisteredFunction и DllInit. Хрен с последней. Там два vmp контекста всего-то. И то: тупо на выходе в обычные dll-ные функи попадаем (10 фунок) Code:
идёт всегда последней: Code:
или в подобные такие куски кода (4 раза): Code:
вряд-ли там что-то внутри VM делается. Jaa пишет: Если программа зарегистрирована, на фото полосы зеленые GetAdaptationHbitmapOfImage сто-пицот раз вызывается. Может она и рисует??!? | Сообщение посчитали полезным: Jaa |
|
Создано: 04 января 2018 14:17 · Личное сообщение · #14 ELF_7719116 пишет: GetAdaptationHbitmapOfImage сто-пицот раз вызывается. Может она и рисует??!? Она действительно и рисует, но если патчить всю функу не сохраняется никакого изображения, девмить эту функцию ума не хватает. Вот метод, в нем цикл использующий метод GetAdaptationHbitmapOfImage Code:
Добавлено спустя 19 минут Рисование и обработка блоков происходит в дллке, из дллки уже пиходят готовые коллажи, поэтому в экзешнике собственно уже нечего патчить( |
|
Создано: 04 января 2018 14:46 · Поправил: sefkrd · Личное сообщение · #15 |
|
Создано: 04 января 2018 15:22 · Поправил: Jaa · Личное сообщение · #16 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 04 января 2018 16:01 · Личное сообщение · #17 Jaa пишет: Рисование и обработка блоков происходит в дллке, из дллки уже пиходят готовые коллажи, поэтому в экзешнике собственно уже нечего патчить( Там уж не так много требуется перебрать (9 уникальных фунок и два хвоста), причем больших фунок (с SSE2 и прочими ништяками) три или четыре, остальное - служебный мусор (вероятно). В некоторых местах у фунок код погажен немного. На крайний случае, затрейсить вм - если есть валидный ключ и сравнить с unregistred. В секции .text считая от её начала дельты первых асм (в порядке вызовов): Code:
кто-то же из них получает контекст зеленой полоски/unregistred и рисует. Вероятней всего внутри vm стоит условие: Code:
тем более там есть аргументы - license_key, special_hash. Как видите, даже знаем-с примерно, где условная проверка может быть расположена (перегон GDI32 - CreateCompatibleDC). | Сообщение посчитали полезным: sefkrd |
|
Создано: 04 января 2018 16:05 · Личное сообщение · #18 |
|
Создано: 04 января 2018 16:20 · Личное сообщение · #19 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 04 января 2018 16:49 · Личное сообщение · #20 Jaa пишет: Ну, а вм разбирать - не по силам Сраный один контекст . Смотри-сравнивай, для начала, что в функах $+7570, $+7570, $+3BC0. Я и так уже намекнул что заморачиваться он начинает: Code:
и продолжает Code:
когда из заполненной структуры в выделенной куче вытаскивает license_key или special_hash или чё это за говно (в обоих случаях одно и тоже значение у меня). Если его менять - уже начинаются вариации (зеленая полоска). Можно трейсануть эти вызовы контекстов. Примитивы у вм дефолтные - если он что-то и делает с этими значениями, то там а-ля ADD, SHL/SHR, MUL/DIV. Картинки со всей фигней клеит он тут: Code:
, но это не точно. |
|
Создано: 04 января 2018 20:33 · Личное сообщение · #21 |
|
Создано: 04 января 2018 23:05 · Личное сообщение · #22 |
|
Создано: 05 января 2018 01:23 · Личное сообщение · #23 ELF_7719116 пишет: Как это не смешно, но вмпрот там 2 версии Не подскажете, есть ли способ определить, что за версия на бинарник навешана. А то я с вмпротом дел не имел, мож, есть какой-то быстрый (или не очень) способ определения версии? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 05 января 2018 01:36 · Поправил: redlord · Личное сообщение · #24 |
|
Создано: 05 января 2018 02:00 · Поправил: ajax · Личное сообщение · #25 |
|
Создано: 07 января 2018 21:06 · Поправил: Gaal · Личное сообщение · #26 Jaa, вас не смущает то факт, что для предварительного просмотра функция ресайза GetResizedHbitmapOfImage (из CxImageFrame.dll) используется напрямую, а при записи изображения — через функцию GetAdaptationHbitmapOfImage_EM, в параметрах которой передаются ключ и хеш ключа? Смотрите метод methodSavingOfMosaic (apcm.MainForm) в исполняемом файле. Замените функцию GetAdaptationHbitmapOfImage_EM на GetResizedImageFromEnotherImage. Параметры функции: GetResizedImageFromEnotherImage(Image inImage, int intX, int intY, int type) где, inImage - контекст изображения, у нас это bitmapWithTrans; intX - новая ширина изображения, ширина текущей ячейки scellSimpleObj2.src_w на коэф. пропорциональности; intY - новая высота изображения, высоте текущей ячейки scellSimpleObj2.src_h на коэф. пропорциональности; type - режим ресайза (быстрый, нормальный, наилучший и т.д.). Вот что получится: | Сообщение посчитали полезным: Jaa |
|
Создано: 07 января 2018 22:23 · Поправил: Jaa · Личное сообщение · #27 Gaal пишет: Замените функцию GetAdaptationHbitmapOfImage_EM на GetResizedImageFromEnotherImage. Параметры функции: GetResizedImageFromEnotherImage(Image inImage, int intX, int intY, int type) где, inImage - контекст изображения, у нас это bitmapWithTrans; intX - новая ширина изображения, ширина текущей ячейки scellSimpleObj2.src_w на коэф. пропорциональности; intY - новая высота изображения, высоте текущей ячейки scellSimpleObj2.src_h на коэф. пропорциональности; type - режим ресайза (быстрый, нормальный, наилучший и т.д.). Получилось примерно так: Code:
но dnSpy не хочет комплировать такие изменения, в логе ошибка Code:
Добавлено спустя 12 минут Так, ну вроде все получилось по последнему скрину, но коллаж не сохраняется который нужен. Выше фото я прислал как должно сохраняться, вот ниже как сохраняется сейчас после патча Добавлено спустя 14 минут И сразу вопрос по патченному коду, почему ширина и высота фиксированная (1000)? Если выставить больше сразу и квадратики побольше и ватермарков нету. Но нужно сделать чтобы автоматически размер выбирался с помощью самой программы. Code:
|
|
Создано: 07 января 2018 23:25 · Поправил: Gaal · Личное сообщение · #28 Вот результат патча по предложенной мною схеме: Так или что-то не так? Я патчил хардкорно (в нех-редакторе опкодами), т.к. пересборка программы после правки С# кода вносит свои коррективы, которые нужно перепроверять. Фиксированный коэф. пропорциональности, а ширина и высота берутся из заданного разрешения изображения (это всегда квадрат). Значение 1000 получилось на основе анализа исходных данных при расчете размеров ячеек для изображений. Возможно я ошибся или и неверно что-то истолковал. Я просто предложил вам вариант. Меня он полностью удовлетворяет. |
|
Создано: 08 января 2018 00:53 · Личное сообщение · #29 |
|
Создано: 08 января 2018 09:50 · Поправил: Gaal · Личное сообщение · #30 Jaa пишет: Кроме этого что вы еще патчили? Да, как вы и писали в самом начале: boolIsProgramRegistered = true. Кроме того в MainForm.ctor(): bool flag = true и грохнул обращение к InitIP. Здесь же, видите выше условие проверки серийника в регистре. Если его там нет, то параметру license_key присваивается пустая строка. Я там захардил ключ (нашел в нете), т.к. его наличие проверяется, а искать все флаги проверки не сильно хочется. Затем разобрался с функцией SentandGetURLData. Основная её задача - это регистрация программы, её активация и проверка лицензии. Но выполняется она с больной навязчивостью. Пока все работает. Может что-то пропустил или оно проявит себя позже. | Сообщение посчитали полезным: sefkrd |
. 1 . 2 . >> |
eXeL@B —› Крэки, обсуждения —› Ватермарк |
Эта тема закрыта. Ответы больше не принимаются. |