Сейчас на форуме: Lohmaty (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Взлом 3DsMax плагина: продление лицензии
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 июля 2018 01:33 · Поправил: Winno22
· Личное сообщение · #1

Доброго времени суток!
Есть плагин Corona Render 2 для 3DsMax.
Взломом удалось с триала(Demo) сделать полную версию,путем замены адреса для Джампа.но вот продлить эту лицензию не выходит..

Окно лицензии в самом плагине. Срок действия должен истеч 2018-07-21

в x64dbg нахожу линк на строку "Software updates available until: "

Если мне не изменияет память, lea тоже самое,что mov.В моем случае команда
Code:
  1. lea rdx, ds:[0x00007FFB22179348]
загружает в rdx значение,которое лежит по адресу 00007FFB22179348.
вот здесь я не пойму,данная команда отвечает за вывод только текста или же теста с датой.
Я переключил системную дату на месяць вперед-написало,что лицензия истекла.Можно сделать вывод,что плагин отталкивавется от системного времени...
но хочется просто продлить лицензию,к примеру,на год..Или же не истекать вовсе.

После того как мне выдало сообщешние " license expired on .... " я нашел его в линках

Команда выше ведет,как я полагаю,к блоку связанным с временем

в только разобраться в нем не могу...С ассемблером знаком поверхностно еще с универа..
Прошу вывести меня,заблудшего, из этого леса




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 22 июля 2018 01:52 · Поправил: Kindly
· Личное сообщение · #2

Winno22 пишет:
Удалось с триала(Demo) сделать полную версию,путем замены адреса для Джампа.но вот продлить эту лицензию не выходит..

Окно лицензии в самом плагине. Срок действия должен истеч 2018-07-21

чето ты тут не договариваешь: как так, пропатчил только один джамп и стала полной еще и дату истечения отсчитывает - она откуда эта дата берется, из демо лицухи чтоли? патчи тогда time api так, чтобы срок истечения никогда не наступил. в твоем случае отталкивайся от _mktime64 (и будь добр норм скрины, ослепнуть можно) а вообще смотри какие time api юзаются, GetLocalTime, FileTimeToSystemTime и т.д., какие значения формируются и с чем сравниваются.

-----
Array[Login..Logout] of Life





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 июля 2018 01:57
· Личное сообщение · #3

Winno22 пишет:
Если мне не изменияет память, lea тоже самое,что mov.В моем случае команда загружает в rdx значение,которое лежит по адресу 00007FFB22179348.

Lea = Load Effective Address
lea rdx,[x] значит rdx = x.

Добавлено спустя 8 минут
Winno22 пишет:
Команда выше ведет,как я полагаю,к блоку связанным с временем

The mktime64() function converts a stored tm structure (assumed to be in job local time) pointed to by time, into a time64_t value suitable for use with other time functions. То есть этот блок связан со временем, но оно уже получено (и лежит в rbp-28), здесь только обработка.

Добавлено спустя 11 минут
Я думаю, что твой трюк с "продлением лицензии" не поможет с получением дальнейших обновлений, как сказано в about-окошке. Если разработчик не совсем идиот.

-----
2 оттенка серого





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 22 июля 2018 02:29 · Поправил: Kindly
· Личное сообщение · #4

Winno22 пишет:
загружает в rdx значение,которое лежит по адресу 00007FFB22179348.

вот как раз lea это указатель на данные, если стека по данному адресу нету, то тогда lea может складывать и записывать значение, например:
mov rbx,3
lea rax,[rbx+3]
тогда будет rax = 6
но если
mov rbx, ds:[rsp]
lea rax,[rbx+3]
то тогда в rax будет указатель на данные по адресу [rbx+3], но не сумма адреса и не значение из этого адреса!

-----
Array[Login..Logout] of Life





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 июля 2018 02:36 · Поправил: f13nd
· Личное сообщение · #5

Kindly
Да не столь важно, все равно значение по этому адресу будет использоваться в итоге

Важно наверное то, забирает ли плагин GET-запросом по статическому адресу свой обновленный дистрибутив или использует серийник для авторизации, чтоб его скачать. Во втором случае продлевать бесполезно. А триал пассажир говорит что починил уже.

-----
2 оттенка серого




Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 июля 2018 10:44
· Личное сообщение · #6

Добырй день!
Спасибо,что откликнулись.
Простите,за скрины - забыл убрать галку "уменшить размер".Исправил
Kindly пишет:
чето ты тут не договариваешь: как так, пропатчил только один джамп и стала полной еще и дату истечения отсчитывает - она откуда эта дата берется, из демо лицухи чтоли?

У меня была активирована демо версия.При загруске модуля нашел джамп,который ведет к адресу демо версии.Потом отыскал адрес полной версии... и просто скопировал в джамп вместо адреса демо.
Разници нету между полной и триальной версией..это так пацанам во дворе показать)
Но главаная проблем,что дату берет с демки, т.е. оно истечет 5 августа.Вот я и решил,может где-то строка которая отвечает за эту дату.

f13nd пишет:
Я думаю, что твой трюк с "продлением лицензии" не поможет с получением дальнейших обновлений, как сказано в about-окошке. Если разработчик не совсем идиот.

Если получиться продлить или заморозит хотябы.. Я думаю можно будет тоже самое проделать с уже обновленной версией.

Вообщем, в плагине показывает дату сегодняшнюю..Я уже обрадовался,что уже все зделано..но нет,перевел системную дату на 14 дней вперед - пишет,что срок демо-лицензии истек..
Т.е оно берет данные о времени с демки.

Куда дальше рыть?)Т.е. я вернулся оттуда, откуда начинал

П.С. Можно ли как-то в x64dbg перезагружать только один модуль? 3dsmax имеет 100500+ модулей и приходиться каждый раз перезапускать все.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 22 июля 2018 10:51 · Поправил: Kindly
· Личное сообщение · #7

f13nd пишет:
Да не столь важно

немного важнее, чем:
lea rdx,[x] значит rdx = x.
и не rdx = x, а rdx = Pointer[x] - если уже придираться, а то так и будет он думать, что:
Winno22 пишет:
lea тоже самое,что mov.


Winno22 пишет:
Можно ли как-то в x64dbg перезагружать только один модуль?

загружай из под отладчика макс, потом в закладке Symbols выбери модуль и наставь бряков. а чтобы убивать какой то модуль и перезагружать его обратно в прогу - так нельзя.

Winno22 пишет:
Куда дальше рыть?)

ну наверное в запросы
так как ты либо игноришь, либо не понимаешь, что:
смотри какие time api юзаются, GetLocalTime, FileTimeToSystemTime и т.д.
дальше тебе надо выяснить их принадлежность к сроку истечения, смотреть их надо в плагине, потом запатчить как-то так:

параметры(интересует регистр с адресом для записи)
вызов

выносишь код в свободное место, запоминаешь адрес для подмены, восстанавливаешь его после отработки api, пишешь по тому адресу, восстанавливаешь регистры, которые можешь заюзать для оперирования. код можно и не выносить, в некоторых случаях можно вместиться. достаточно в большинстве случаев подменить год/месяц/день - на остальное пох.

если это все сложно, то может лучше специалистам доверить работу?
я к тому, что для любого новичка приходит момент, когда программу нельзя сломать только патчем перехода или записью 1 в возврат функции.

-----
Array[Login..Logout] of Life





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 июля 2018 11:20
· Личное сообщение · #8

Kindly пишет:
и не rdx = x, а rdx = Pointer[x] - если уже придираться

Я бы к квадратным скобкам придрался, это святотатство их в таком качестве использовать.

Kindly пишет:
выносишь код в свободное место, запоминаешь адрес для подмены, восстанавливаешь его после отработки api

Скорей всего тут можно обойтись парой нопов в алгоритме проверки даты.

-----
2 оттенка серого





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 22 июля 2018 11:27 · Поправил: Kindly
· Личное сообщение · #9

f13nd пишет:
Я бы к квадратным скобкам придрался

тогда Pointer беру в кавычки

f13nd пишет:
Скорей всего тут можно обойтись парой нопов в алгоритме проверки даты.

или еще может быть проще? одно вангование по скриншотам
ТС, ты делай сам что нибудь, либо тема несет больше характер на "сделайте за меня, а сам я думать не буду".

я бы поступал примерно так: на основе демо лицухи пропатчил бы или лицуху в памяти или прогу для включения полнофункционала, подменил(заморозил) бы дату, ну и че там еще судя по скрину(Request code) - подменил бы hwid, вуаля.

-----
Array[Login..Logout] of Life





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 22 июля 2018 11:34 · Поправил: f13nd
· Личное сообщение · #10

Kindly пишет:
или еще может быть проще? одно вангование по скриншотам

Не по скриншотам было бы не интересно. Мне нравится эта конструкция
Code:
  1. call _mktime64
  2. mov rcx,QWORD[7FFB225137C0]
  3. sub rcx,rax
  4. xorps xmm0,xmm0
  5. cvtsi2sd xmm0,rcx
  6. comisd xmm0,xmm6
результат _mktime64 вычитается из чего-то (очевидно даты истечения лицензии), загружается в xmm0 и сравнивается с xmm6 (наверное нулем). На двух скриншотах, только с разными регистрами это есть. Я б xor rax,rax воткнул вместо вызова, смеха ради.

-----
2 оттенка серого



 eXeL@B —› Вопросы новичков —› Взлом 3DsMax плагина: продление лицензии
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати