Сейчас на форуме: vasilevradislav, Magister Yoda, site-pro (+5 невидимых) |
![]() |
eXeL@B —› Крэки, обсуждения —› EnableMenuItem не срабатывает |
Посл.ответ | Сообщение |
|
Создано: 13 июня 2014 10:10 · Поправил: GroundHog · Личное сообщение · #1 Имеется программа с ограничением функционала, которое проявляется в том, что при открытие меню некоторые пункты недоступны. Заинжектил в процесс свою dll, перехватываю EnableMenuItem, перебивая все пункты на MF_ENABLED, но в меню это никак не отражается ![]() Подумал было, что пункты меню OWNER_DRAW, пошёл дальше - перехватил оконную функцию появляющегося меню(точно узнал, что это нужное окно, меняя ему прозрачность) и случайно выяснил, что пункт становится доступным только, если НЕ вызывать дефолтную оконнную ф-ию, но при клике на пункт, он опять дизейблится. Получается, проверка в оконной функции? Беда в том, что не могу определить её адрес, полученный через GetWindowLong: lpPrevWndFunc [in] Pointer to the previous window procedure. If this value is obtained by calling the GetWindowLong function with the nIndex parameter set to GWL_WNDPROC or DWL_DLGPROC, it is actually either the address of a window or dialog box procedure, or a special internal value meaningful only to CallWindowProc Видимо, это мой случай, т.к. pPrevWndFunc принимает значение FFFFxxxx, что не может быть адресом. Поэтому два вопроса: 1) Почему не принимаются изменения в меню после вызова EnableMenuItem? 2) Если проверка в оконной функции, то как найти её адрес? P.S. Программа написана на mfc, импортирует mfc90u.dll, msvcp90.dll, msvcr90.dll. В самом exe нет даже прямых вызовов API для работы с меню. Решил выложить таргет, т.к. что-то зашёл в тупик. Заранее признателен, если покажут, куда копать: http://rghost.net/56411166 После установки, создаете пустой проект или открываете одну из демок: Файл->Экспорт/Печать к примеру, задизейблены. ![]() |
|
Создано: 13 июня 2014 10:16 · Поправил: unknownproject · Личное сообщение · #2 |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 13 июня 2014 10:26 · Личное сообщение · #3 |
|
Создано: 13 июня 2014 10:32 · Личное сообщение · #4 ELF_7719116 пишет: а линк на скачивание будет? Если ничем не упаковано -> то в секции ресурсов меню есть? Программу не хочу светить по понятным соображениям, могу в PM скинуть. ResHacker показывает в ресурсах все пункты меню доступными. Есть утилиты для включения в чужих программах кнопок, меню, etc. Так вот, в моем случае она тоже не срабатывает, хотя в блокноте все меня становятся доступны. ![]() |
|
Создано: 13 июня 2014 10:42 · Личное сообщение · #5 |
|
Создано: 13 июня 2014 11:31 · Личное сообщение · #6 |
|
Создано: 13 июня 2014 15:57 · Личное сообщение · #7 Я видел программу (демо версию) где тоже они не были доступны. Так там мало того, был еще и код вырезан. Размер EXE отличался в 3 раза от покупной. Как бы не оказалось что пункт меню ты разблокируешь, а там ничего ![]() |
|
Создано: 13 июня 2014 16:38 · Личное сообщение · #8 |
|
Создано: 16 июня 2014 17:26 · Личное сообщение · #9 |
|
Создано: 16 июня 2014 18:19 · Поправил: Vovan666 · Личное сообщение · #10 GroundHog пишет: После установки, создаете пустой проект или открываете одну из демок: Файл->Экспорт/Печать к примеру, задизейблены. печать походу енаблится тут 00449C30 (или тут 00417CD0), только непонятно откуда эта процедура вызывается, а вообще нужно копать в сторону comcat.dll все проверки на зарегистрированность там. ![]() |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 17 июня 2014 07:40 · Личное сообщение · #11 |
|
Создано: 17 июня 2014 07:53 · Поправил: GroundHog · Личное сообщение · #12 Vovan666 пишет: печать походу енаблится тут 00449C30 (или тут 00417CD0) В эти адреса у меня вообще программа не попадает, не понятно, какие параметры передаваит, и там, судя по коду шлётся WM_COMMAND, который должен отсылаться уже при выборе пункта меню: The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. comcat.dll - это какой COM-объект что ли, пока не могу найти, за что там зацепиться. ELF_7719116 пишет: если я правильно понял, ему драйвер нужен \.\NVKEYNT (из комката вызывается) В полнофункциональной версии используется ключ Guardant, которого у меня нет. На XP демка без драйвера нормально запускается. Вообще, все ограничения демки основаны на том, что при различных условиях лочатся пункты меню, а необходимый функционал в exe имеется, поэтому я и хотел пойти по пути наименьшего сопротивления. ![]() |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 17 июня 2014 18:54 · Личное сообщение · #13 По каким-то неведомым причинам, у меня секция .comcat (что в комкат.dll)без execute - из-за чего фолт выплевывается. там поток создается, который переодически(через sleep 13257 ms) опрашивает ключ. возможно это только домыслы (с гуардантом не знаком), что из физического ключа извлекаются цифровой ключик, которым нужно расшифровать оставшийся кусок функции в комкат.длл, которая наверно и разлочит все: Code:
ResHacker показывает в ресурсах все пункты меню доступными. вот это странно, когда и где программа тогда их дисейблит (info) в реестре сидит: HKEY_CURRENT_USER\Software\Complex A5 может это неважно, но еще по смещению +0xC120 процедура какой-то номер извлекает(если не давать переходить на CxxThrowException), вызывается из ексешника отсюда: Code:
![]() |
|
Создано: 18 июня 2014 10:49 · Личное сообщение · #14 ELF_7719116 Манипуляции с секцией .comcat я видел, доступа к ключу всё равно нет. Хотел зайти всё же со стороны дизейблинга пунктов меню. Кажется, в демке есть весь нужный функционал, но он блочится путем дизейблинга пунктов при определенных условиях, например: - Если создать свой проект, то Файл->Сохранить(как) доступен) - Если открыть демо-файл, то нет. В момент открытия меню происходит вызов EnableMenuItem для каждого пункта с соответстсвующей маской. Я хукаю этот момент и перебиваю маску на enabled, но один фиг пункты не доступны. Не могу понять, как программа это делает. Единственная версия - оконная процедура, но не могу её найти(в первом сообщении писал почему) и тогда не ясно, через какое API пункты дизейблятся снова. ![]() |
|
Создано: 19 июня 2014 21:11 · Личное сообщение · #15 |
![]() |
eXeL@B —› Крэки, обсуждения —› EnableMenuItem не срабатывает |