· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Вопрос по взлому проги с триалом в реестре.

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Окт 14, 2004 19:02:49

Добрый день.

Есть у меня одна програмка, она работает только 20 дней а потом
требует купить ее. После покупки присылается ключ в реестр и программа
его видя работает нормально. (при каждой переустановке ключ нужен
другой, так как прога генерит новый контрольный номер)

Я нашел ключ в реестре который используется для определения времени
использования программы. Один раз в 20-ть дней приходится его стирать,
чтобы программа снова его туда записала и я мог работать еще 20 дней.
Если честно надоело и я решил заглянуть ей внутрь. Но так как опыта
нет, то прошу помощи в следующих вопросах.

Я посмотрел, там используются функции RegQueryValue, RegDeleteKey,
RegCloseKey и другие для работы с реестром.

Посоветуйте как говорится с какого конца подойти. Я в SoftIce ставил
точку на RegQueryValue но там дальше столько всего что жуть. Может
дадите какие то советы, как по другому можно решить проблему или где
почитать об этом деле.

Как вообще решаются подобные вопросы?

Надеюсь на помощь.

С уважением, Сергей.


Дата: Окт 14, 2004 19:14:15

Ой-ее...
Сразу так не ответишь...
Вопросы к тебе: ассемблер знаешь? На каком языке написана программа определить можешь?
Если ответы на эти вопросы положительны - тогда методика в твоем случае пусть выглядит так.
1) Найди строковое значение ключа (сам путь к нему) в теле программы
2) Пошастай по коду поблизости этого места
3) Отломай там все, что движется и дышит :)


Дата: Окт 14, 2004 19:34:52

> „Я нашел ключ в реестре который используется для определения времени
использования программы. Один раз в 20-ть дней приходится его стирать“


Ну дык самое простое решение (но не самое дзенное): напиши прогу (даже скрипт) которая будет это делать за тебя, и поставь в autorun / планировщик :)


Дата: Окт 14, 2004 19:56:45 · Поправил: Asterix

> Как вообще решаются подобные вопросы?

Можно, например, loader написать, что-то типа такого:
format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'


section '.data' data readable writeable

szRegSubKey    db  "SOFTWARE\ASProtect\SpecData",0
szFileName     db  "Bla.exe",0
align 4
StartupInfo    STARTUPINFO
align 4
ProcessInfo    PROCESSINFO


section '.code' code readable executable

align 4
start:
    invoke RegDeleteKey, HKEY_CURRENT_USER, szRegSubKey
    mov [StartupInfo.cb], sizeof.STARTUPINFO
    invoke CreateProcess, szFileName, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,\
                          NULL, NULL, StartupInfo, ProcessInfo
    test eax, eax
    jz @exit
    invoke CloseHandle, [ProcessInfo.hThread]
    invoke CloseHandle, [ProcessInfo.hProcess]
@exit:
    invoke ExitProcess, 0


section '.idata' import data readable

library kernel32,'KERNEL32.DLL',\
        advapi32,'ADVAPI32.DLL'

include '%fasminc%\APIA\KERNEL32.INC'
include '%fasminc%\APIA\ADVAPI32.INC'


Дата: Окт 14, 2004 20:26:56

У меня тоже такой алгоритм был: если ключа нет, dll создаёт новый и считает, что это первый запуск, отсчёт начинается заново. Патчил следующее: Место, где прога открывает ключ RegOpenKey (или что там у тебя). После вызова API проверялось, что находится в еах. Если не ноль - то это хэндл ключа, ключ существует, если ноль - ключа нет. И от этой проверки прога ветвится, соответственно либо на считывание ключа, либо на создание. Код сразу после Call RegOpenKey
test eax,eax
jz <адрес процедуры создания ключа>

изменил на
test eax,eax
jmp <адрес процедуры создания ключа>

И теперь dll при каждой загрузке сама по новой создаёт ключ(уже существующий), независимо от того есть он в реестре или нет, и считает, что только что инсталлирована. И о 15 днях я забыл :)


Дата: Окт 14, 2004 23:09:23

Спасибо мужики, я покопаюсь и напишу чего получилось.

To cresta>> я именно так и хочу чтобы она по любому ключ создавала. Тогда мне пофигу будет где он и что он этот триал.

Остальные способы тоже попробую. Я вообще начинающий, но надеюсь терпение и труд - все перетрут!

Еще раз спасибо.


Дата: Окт 15, 2004 01:03:26 · Поправил: cresta

Немного поправлюсь: RegOpenKey в eax возвращает 0, если ключ был открыт и ненулевое значение (код ошибки), если была ошибка(в т.ч. ключа нет)

Если в твоем коде для чтения используется RegCreateKeyEx, то возможно будет проверка на значение последнего её параметра lpdwDisposition. Этот параметр может быть заполнен функцией как REG_CREATED_NEW_KEY или REG_OPENED_EXISTING_KEY. И проверка может быть по значению, которое в lpdwDisposition.


Дата: Окт 15, 2004 10:29:07

SergeySergeev
Ты занешь, основная масса плохо защищенных программ сводится к одному условному переходу ;) (н-р Тhe Бат старый) Только надо его найти. У меня была прога, работала 30 дней, потом при запуске работала 5 мин. и закрыалась. Лопатил я её долго, хитрая зараза была :) Потом нашел процедуру, которую она постоянно вызывала из разных мест и пропатчил. Написал просто
   mov eax, TRUE
   jmp Return

Вопрос о триальности выпал сам собой :)))
Удачи в этом деле (он тебе пригодиться)


Дата: Окт 15, 2004 19:19:29

Ну что ж господа! Мне даже понравилось. Однако пока без результата.

Во-первых, немного поясню как прога работает (может будет полезно в дальнейшем)
Она проверяет свой триальный ключ в реестре /он в CLSID/ и проверяет есть ли купленый ключ, который расположен в HKEY_CURRENT_USER\SOFTWARE.

Теперь о поиске в самой програме.

Я устанавливал бряки на RegQueryValue - их всего 14 штук, однако перенаправление условного перехода ничего не дало.

Далее RegOpenKey их вообще больше 200 штук. То же самое. После каждого вызова этой функции идет:

OR DX,AX
JZ ....

либо

OR DX,AX
JNZ ....

при этом в EAX и EDX как правило или 0 (в основном) или что то мутное, но ни разу после вызова этой функции eax не равен 1.
Как же все таки разобрать что искать, как сузить блин круг подозреваемых, так сказать.

К тому же в программе есть функция RegCreateKey, а ставлю бряк она вообще не тормозится на ней ни при первом запуске программы (удалял триальный ключ из реестра) ни при простом запуске.

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

Сергей


Дата: Окт 15, 2004 19:50:56

Прежде всего посмотри, не ASProtect ли это. Возможно, за тебя уже обо всем партия подумала :-)


Дата: Окт 15, 2004 20:34:18

SergeySergeev

Вот это, кстати:
http://cracklab.ru/f/index.php?action=vthread&forum=1&topic=638

признак плохого тона. Нельзя постить один и тот же пост на двух форумах одновременно. Наказывается вплоть до бана. Я понятно объясняю?


Дата: Окт 15, 2004 21:39:27 · Поправил: SergeySergeev

Извините, но первый раз встречаюсь с такими правилами, постараюсь не нарушать если так принято.

Другие посты постараюсь закрыть как можно быстрее.

С уважением, Сергей.


Дата: Окт 15, 2004 21:42:24 · Поправил: SergeySergeev

Я нашел ключ при помощи RTKF он выдал:

; Описание ключа: ASProtect < 1.23

В этом случае есть какой то алгоритм поиска?
(кстати у меня есть два реальных ключа этой проги (достались от владельца для рассмотрения), то есть есть индивидуальный номер который генерит программа и сам ключ который вставляется в реестр - если защита ASP это как то помогает?

Сергей.


Дата: Окт 15, 2004 22:18:14

Так таки аспротект? Для него есть специальный удалитель ключиков - лежит в инструментах на сайте + программа Киберманьяка - лежит на его сайте.


Дата: Окт 15, 2004 23:20:46

Ты не разбрасывайся, не надо метаться из стороны в сторону :) Если имеешь такие условия: Удаляем ключ - прога работает, то ищи где открывается именно этот ключ. Если знаешь имя ключа - на бряках смотри, какой ключ открывается каждым конкретным вызовом (см. параметры передаваемые в ф-цию). Попробуй определить, откуда вызывается RegCreateKey. После удаления ключа прога обязана вызвать эту ф-цию. Можно попробовать отмотать обратно от неё.

Вряд ли это AsProtect. Если удалить его ключи, они не появляются вновь (если память не изменяет), иначе, какой же это удалитель ключиков?

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043