Сейчас на форуме: vasilevradislav, Magister Yoda, site-pro (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› EnableMenuItem не срабатывает
Посл.ответ Сообщение

Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 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

После установки, создаете пустой проект или открываете одну из демок: Файл->Экспорт/Печать к примеру, задизейблены.



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 13 июня 2014 10:16 · Поправил: unknownproject
· Личное сообщение · #2

Это намного проще хекс редактором решить и проверить за одно,а реально ли вообще рабочие пункты меню.
Ищи caption в юникоде (знак & укажет путь).
18 байтами ранее задаются свойста.
Code:
  1. Например 01 50:
  2. 01 - видимость, 50 - активность (58 сделает кнопку неактивной)



-----
TEST YOUR MIGHT




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 13 июня 2014 10:26
· Личное сообщение · #3

GroundHog пишет:
Имеется программа с ограничением функционала

а линк на скачивание будет?
GroundHog пишет:
открытие меню некоторые пункты недоступны

Если ничем не упаковано -> то в секции ресурсов меню есть?



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 13 июня 2014 10:32
· Личное сообщение · #4

ELF_7719116 пишет:
а линк на скачивание будет?

Если ничем не упаковано -> то в секции ресурсов меню есть?

Программу не хочу светить по понятным соображениям, могу в PM скинуть. ResHacker показывает в ресурсах все пункты меню доступными.

Есть утилиты для включения в чужих программах кнопок, меню, etc. Так вот, в моем случае она тоже не срабатывает, хотя в блокноте все меня становятся доступны.



Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 13 июня 2014 10:42
· Личное сообщение · #5

ну раз не упаковано то :
1. ida
2. символы
3. CMenu::EnableMenuItem



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 13 июня 2014 11:31
· Личное сообщение · #6

kid пишет:
2. символы

Не смотря на наличие в %WINDIR%\symbols\dll\mfc90u.i386.pdb IDA показывает вызовы только в виде:
jmp ds:__imp_mfc90u_11735



Ранг: 3.6 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 13 июня 2014 15:57
· Личное сообщение · #7

Я видел программу (демо версию) где тоже они не были доступны. Так там мало того, был еще и код вырезан. Размер EXE отличался в 3 раза от покупной. Как бы не оказалось что пункт меню ты разблокируешь, а там ничего

| Сообщение посчитали полезным: ThugboyZ

Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 13 июня 2014 16:38
· Личное сообщение · #8

GroundHog Скинь в ЛС



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 16 июня 2014 17:26
· Личное сообщение · #9

Выложил таргет, прошу подсказки.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 16 июня 2014 18:19 · Поправил: Vovan666
· Личное сообщение · #10

GroundHog пишет:
После установки, создаете пустой проект или открываете одну из демок: Файл->Экспорт/Печать к примеру, задизейблены.

печать походу енаблится тут 00449C30 (или тут 00417CD0), только непонятно откуда эта процедура вызывается, а вообще нужно копать в сторону comcat.dll все проверки на зарегистрированность там.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 17 июня 2014 07:40
· Личное сообщение · #11

если я правильно понял, ему драйвер нужен \.\NVKEYNT (из комката вызывается), который потом ReadFile и наверно еще DeviceIoControl. у меня, в каком-то потоке, на 2к3 необработанный эксепшн вываливается по записи в несуществующий адрес памяти и прога завершается



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 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.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 17 июня 2014 18:54
· Личное сообщение · #13

По каким-то неведомым причинам, у меня секция .comcat (что в комкат.dll)без execute - из-за чего фолт выплевывается. там поток создается, который переодически(через sleep 13257 ms) опрашивает ключ.

возможно это только домыслы (с гуардантом не знаком), что из физического ключа извлекаются цифровой ключик, которым нужно расшифровать оставшийся кусок функции в комкат.длл, которая наверно и разлочит все:
Code:
  1. 00C75180    55              PUSH EBP
  2. 00C75181    8BEC            MOV EBP,ESP
  3. 00C75183    83EC 08         SUB ESP,8
  4. 00C75186    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
  5. 00C75189    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
  6. 00C7518C    6A 00           PUSH 0
  7. 00C7518E    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
  8. 00C75191    8B11            MOV EDX,DWORD PTR DS:[ECX]
  9. 00C75193    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
  10. 00C75196    8B42 0C         MOV EAX,DWORD PTR DS:[EDX+0C]
  11. 00C75199    FFD0            CALL EAX
  12. 00C7519B    0FB6C8          MOVZX ECX,AL
  13. 00C7519E    85C9            TEST ECX,ECX
  14. 00C751A0    74 3E           JE SHORT 00C751E0
  15. 00C751A2    8B55 FC         MOV EDX,DWORD PTR SS:[EBP-4]
  16. 00C751A5    8B02            MOV EAX,DWORD PTR DS:[EDX]
  17. 00C751A7    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
  18. 00C751AA    8B50 08         MOV EDX,DWORD PTR DS:[EAX+8]
  19. 00C751AD    FFD2            CALL EDX
  20. 00C751AF    6299 07E5AA0B   BOUND EBX,QWORD PTR DS:[ECX+0BAAE507]   // ОТСЮДА ПОШЕЛ ЗАШИФРОВАННЫЙ КОД !
  21. 00C751B5    BB E7F8186A     MOV EBX,6A18F8E7
  22. 00C751BA    1F              POP DS                                                      ; Modification of segment register
  23. 00C751BB  ^ 7D E2           JGE SHORT 00C7519F
  24. 00C751BD    45              INC EBP
  25. 00C751BE    E1 2E           LOOPZ SHORT 00C751EE
  26. 00C751C0    05 9C766C45     ADD EAX,456C769C
  27. 00C751C5    A1 4EA3E226     MOV EAX,DWORD PTR DS:[26E2A34E]
  28. 00C751CA    90              NOP
  29. 00C751CB    68 5178DF1F     PUSH 1FDF7851
  30. 00C751D0    0C EC           OR AL,EC
  31. 00C751D2    6C              INS BYTE PTR ES:[EDI],DX                                    ; I/O command
  32. 00C751D3    36:1F           POP DS                                                      ; Superfluous segment override prefix
  33. 00C751D5    D1D4            RCL ESP,1                                                   ; Suspicious use of stack pointer
  34. 00C751D7    0F              DB 0F                                                       ; Unknown command
  35. 00C751D8    B8 41C66DAB     MOV EAX,AB6DC641
  36. 00C751DD    00A0 B5A04CF6   ADD BYTE PTR DS:[EAX+F64CA0B5],AH
  37. 00C751E3    CA D452         RETF 52D4                                                   ; Far jump or call
  38. 00C751E6    AB              STOS DWORD PTR ES:[EDI]
  39. 00C751E7  ^ 78 84           JS SHORT 00C7516D
  40. 00C751E9    9D              POPFD
  41. 00C751EA    96              XCHG EAX,ESI
  42. 00C751EB    8CAD 3E6CE909   MOV WORD PTR SS:[EBP+9E96C3E],GS
  43. 00C751F1    F9              STC
  44. 00C751F2    76 73           JBE SHORT 00C75267
  45. 00C751F4    DF7E 1A         FISTP QWORD PTR DS:[ESI+1A]                                 ; FLOAT 0.0
  46. 00C751F7    5D              POP EBP
  47. 00C751F8    E4 CA           IN AL,0CA                                                   ; I/O command
  48. 00C751FA    87DC            XCHG ESP,EBX
  49. 00C751FC    58              POP EAX
  50. 00C751FD    57              PUSH EDI
  51. 00C751FE    5A              POP EDX
  52. 00C751FF    16              PUSH SS
  53. 00C75200    A9 18101F17     TEST EAX,171F1018
  54. 00C75205    52              PUSH EDX
  55. 00C75206    20548F 3E       AND BYTE PTR DS:[ECX*4+EDI+3E],DL
  56. 00C7520A    85D3            TEST EBX,EDX
  57. 00C7520C    A2 B7A73278     MOV BYTE PTR DS:[7832A7B7],AL
  58. ...
  59.  
GroundHog пишет:
ResHacker показывает в ресурсах все пункты меню доступными.

вот это странно, когда и где программа тогда их дисейблит

(info) в реестре сидит: HKEY_CURRENT_USER\Software\Complex A5
может это неважно, но еще по смещению +0xC120 процедура какой-то номер извлекает(если не давать переходить на CxxThrowException), вызывается из ексешника отсюда:
Code:
  1. 0047D2AA  |.  50            PUSH EAX
  2. 0047D2AB  |.  8B0A          MOV ECX,DWORD PTR DS:[EDX]
  3. 0047D2AD  |.  FFD1          CALL ECX




Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 18 июня 2014 10:49
· Личное сообщение · #14

ELF_7719116
Манипуляции с секцией .comcat я видел, доступа к ключу всё равно нет. Хотел зайти всё же со стороны дизейблинга пунктов меню. Кажется, в демке есть весь нужный функционал, но он блочится путем дизейблинга пунктов при определенных условиях, например:
- Если создать свой проект, то Файл->Сохранить(как) доступен)
- Если открыть демо-файл, то нет.

В момент открытия меню происходит вызов EnableMenuItem для каждого пункта с соответстсвующей маской. Я хукаю этот момент и перебиваю маску на enabled, но один фиг пункты не доступны. Не могу понять, как программа это делает. Единственная версия - оконная процедура, но не могу её найти(в первом сообщении писал почему) и тогда не ясно, через какое API пункты дизейблятся снова.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 19 июня 2014 21:11
· Личное сообщение · #15

apfnDispatch. Google.


 eXeL@B —› Крэки, обсуждения —› EnableMenuItem не срабатывает
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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