Есть триальная версия программы, в которой проверяется текущее время (на сервере в инете) с датой, установленной разработчиком. Подскажите, как найти место, в котором это происходит?
Т.е. скорее всего прога получает время твоего компа (строки типа GetLocalTime\GetSystemTime есть в проге?) и сверяет с серверным? Если переводить часы назад, то помагает? Имхо, думаю твоя прога отсылает текущее время на сервер, тот смотрит если оно не меньше настоящего и лицензия позволяет ещё работать - то дает добро, иначе сервер не возвращает нужных данных. Без сервера вообще польза есть от проги?
Да есть GetLocalTime, но открутка времени не помогает. Ни в биосе, ни в виндовсе, ни после переустановки. Поэтому я и пришел к выводу, что программа сравнивает какое-то время, которое задано в самой программе с временем на сервере в инете
Она может дату установки один раз записать (в реестр например) и все, а потом просто сверять текущее время чтобы не выходило за trial-период. Надо узнать к чему привязывается и для чего сервер, по твоим словам не совсем понятно, обычно на сайте проге в саппорте такие вопросы в фак выносят (ака "поменял материнку, почему моя программа перестала работать?") и авторы сами рассказывают где хранится дата, подготовь более развернутый ответ (вернее вопрос), trial или demo, каков файл\формат лицензий и т.д., в самой проге дату обычно не хранят
Это самописная прога, у нее нету даже сайта. В реестр она тоже не записывает дату - понял это когда переустановил полностью систему с нуля - сразу выскакивает окошко с сообщением, что триальный период закончился.
В принципе тогда автор может каждому клиенту вшивать конкретную дату в сам екзешник, а сверять её с серверной, так сразу сказать сложно. Если бы у тебя была рабочая лицензия, т.е. время ещё позволяло работать, то без сервера прога работала бы? или кричала бы что триальный период закончился?
И чего это вы на сервере зациклились ?! Кроме реестра дата установки может храниться: 1) в самом exe (записывается при установке самопальным инсталлятором), 2) во вспомогательных файлах ini,key,dat и т.п., 3) определяться по дате создания exe или вспомогательных файлов, 4) в экзотических "потаенных" местах (например, в разрядах миллисекунд времени создания файлов и т.п.) Для защиты от перевода часов контролируется последняя пройденная дата: либо 1) осуществляется запись в реестр, ini или в потаенные места, либо 2) контролируется время последнего изменения файлов (своего же ini или системных логов, датов и т.п.) Искать проверку можно по разному, а вот с чего начать - дело вкуса и "нюха". Если защита тупая и сосредоточена в одном месте, то можно по простому найти проверку или по вызову запроса текущего времени или по вызову сообщения (найти строку сообщения или сам вызов). Ну а если более хитрая, то придется повозиться и пробовать разные варианты. Например, прога может первым делом проверять не текущее время, а разницу между временем последнего изменения и временем создания ini-файла. Поэтому возможно лучше пытаться раскручивать с конца - с поиска строки и вывода сообщения.
Если смысл проги заключается только в получении данных от сервера, то логично предположить вариант отсылки клиентом своего id (не обязательно время!), а сервер по нему смотрит: - если trial у этого id вышел, то писец (ничего не дам и не скажу) И ничего мы тут не сделаем! Т.е. да, это дело "нюха", надо сперва исключить этот вариант, тогда можно тратить время на разбор всех остальных
Во-первых, насколько я понял из путанных объяснений studiodv, идея с сервером это не более чем его предположение. Во-вторых, не понятно как ты собираешься исключать этот вариант. Я ж и предлагаю попробовать раскрутку с конца (с вывода сообщения) - тогда хоть что-то прояснится, т.к. кроме описанного тобой "писца" не исключены и варианты простых наивных проверок на стороне клиента - "у меня посылка для вашего мальчика, но я ее вам не дам.."
Проясняю ситуацию. Программа обращается на сервер в инетренете, на котором проверяет логин/пароль, заходит в аккаунт и проверяет внутри аккаунта наличие ссылок, за которые начисляются бонусы. Если ссылки есть, она их кликает и бонусы засчитываются. На компьютере информации о первой регистрации программы точно не хранится, поскольку даже после полной переустановки системы, она отказалась запускаться с сообщением о том, что ознакомительный период закончен. Программа однозначно лезет в инет для сверки даты.
Если это действительно так, то нужно искать не GetLocalTime, а то что за этим следует (например, код выводящий сообщение о том, что триальный период закончен). Думаю она (программа) вызывает GetLocalTime, отсылает данные серверу, и ждёт дальнейших указаний. Вот этот момент и надо ловить.
Нет, тут не сервер решает что делать программе. Тут сам программа сравнивает время и, в зависимости от проверки передает действие на выполнение программы либо на вывод сообщения, что ознакомительный период закончен.
Но решение-то она принимает после ответа сервера. Вообще невозможно что-то конкретное сказать не видя самой программы. Но в общем виде, думаю, нужно делать так: 1. Ищем код, вызывающий окно с сообщением об истечении времени 2. Ищем откуда он вызывается, по какому условию, и по какому условию программа благополучно запускается 3. Исправляем
Эххх, знать бы ГДЕ искать код, вызывающий окно. Задача усложняется тем, что само сообщение не хранится в исходном виде.
А что, оно с сервера скачивается? В любом случае окно есть. А что за окно вообще? MessageBox, диалог из ресурсов, обычное окно, или "обычное окно из ресурсов аля Делфи"? Если второе или четвёртое - ищи какой у него идентификатор в ресурсах, и ищи где он в коде появляется. Если первое или третье - ищи соответствующие функции, и смотри, похожи они по параметрам на то что нужно или нет. Если текст на окне появляется динамически, то рядом должны быть SendMessage/SendDlgItemMessage параметром WM_SETTEXT (0Ch), или SetWindowText.
Sl4v4 Слишком часто повторяются эти функции.. тут, наверное нужен индивидуальный подход Я б выложил программу, но она занимает больше 50 кб. Поэтому, если интересно - могу кинуть на емыл.