Сейчас на форуме: bartolomeo, -Sanchez- (+3 невидимых)

 eXeL@B —› Вопросы новичков —› изменить меню...
Посл.ответ Сообщение

Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 12:30
· Личное сообщение · #1

Как можно изменть меню программы... нужно удалить пункт со всеми его подпунктами... прога при запуске прячеться в трей когда правой кнопкой по ней жмешь вылазит меню... вот его надо отредактировать... Это вообще возможно?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 16 февраля 2006 13:01
· Личное сообщение · #2

Если меню забито в ресурсы, то это делается проще простого любым редактором ресурсов

Либо смотри где вызываются функции CreateMenu,CreatePopupMenu,AppendMenu и т.д. и .т.п. и там nop'ь создание нужного пункта



Ранг: 41.2 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 13:07 · Поправил: Virgo
· Личное сообщение · #3

Alexus2006
Нет ничего невозможного. Попробуй для начала Restorator or ResHacker. Загрузи свою прогу в любую из предложенных программ, и дальше ребенок уже все сможет даже сделать. И вообще где название проги, размер, ссылка и т.д и т.п.
Где моддератор хоть один? и Вообще кто нибудь читает правила?
Опередили!!!



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 13:08
· Личное сообщение · #4

прога ASPack'ом зажата... Я её разжал но в ресурсах ничего не нашёл... да и кривые они какие то... а ещё есть какие нить функции для работы с меню?



Ранг: 41.2 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 13:13
· Личное сообщение · #5

Alexus2006
Alexus2006 пишет:
да и кривые они какие то

кто???
или что??
какая прога?
какой Alexus2006 пишет:
ASPack'ом
???
чем расжал?
чем определил??
на чем застрял?
как пробывал?
на чем прога написана?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 16 февраля 2006 14:27
· Личное сообщение · #6

Alexus2006 пишет:
а ещё есть какие нить функции для работы с меню?
- посмотри справочник по WinAPI. Я для этой цели пользую справочник из Delphi. Ищешь в нём любую из этих функций и в самом конце описания будет

See Also
AppendMenu, CreatePopupMenu, DestroyMenu, InsertMenu, SetMenu, InsertMenuItem


Это я тебе написал See Also для CreateMenu

Virgo, чё ты орёшь? Можно и спросить вежливо и читать повнимательней
Virgo пишет:
кто???
или что??
- ресурсы конечно!

Virgo пишет:
И вообще где название проги, размер, ссылка и т.д и т.п.
- Разве это обязательно?!?! Может чел задал чисто теоретический вопрос и не хочет, чтобы ему всё на пальцах объяснили, а хочет сам всё понять!

Virgo пишет:
на чем прога написана?
- вот это правильный вопрос! Хотелось бы узнать!



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 14:46
· Личное сообщение · #7

прога кажется написана на каком то с++ ... предположительно Visual c++ возможно билдер... разобрать сложно... названия нет потому что оно вам мало что скажет да и не стоит она вашего особого внимания так улитка одна дляработы с мышью...
2Klajnor спасиба



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 14:51
· Личное сообщение · #8

а вот ещё вопрос разжимал AspackDie и QUnpack(что то ругался снячала но всё же распаковал) - так вот в итоги получились 2а exe файла разных размеров... странно как то... или так и должно было быть?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 16 февраля 2006 14:59
· Личное сообщение · #9

Alexus2006 пишет:
получились 2а exe файла разных размеров... странно как то... или так и должно было быть?

Зачастую так и должно быть. Ни одной из этих утилит не пользовался, но если судить по названию:
AspackDie - заточен специально под ASPack => распакованная прога мало чем отличается от оригинала
QUnpack - он вроде "универсален" для простых пакеров. Наверно там единый алгоритм под все пакеры

ЗЫ Если распакуешь руками, наверняка получишь файл 3-его размера, не совпадающее с первыми 2-мя =)



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 15:34
· Личное сообщение · #10

блин там этих функций с меню очень дофига!

00455EE4 CALL <JMP.&user32.DestroyMenu> user32.DestroyMenu
004560EC CALL <JMP.&user32.InsertMenuItemA> user32.InsertMenuItemA
0045615F CALL <JMP.&user32.InsertMenuA> user32.InsertMenuA
00456178 CALL <JMP.&user32.InsertMenuA> user32.InsertMenuA
00456358 CALL <JMP.&user32.GetMenuItemCount> user32.GetMenuItemCount
00456379 CALL <JMP.&user32.GetMenuState> user32.GetMenuState
00456390 CALL <JMP.&user32.RemoveMenu> user32.RemoveMenu
004563C0 CALL <JMP.&user32.GetMenuItemCount> user32.GetMenuItemCount
004563CD CALL <JMP.&user32.DestroyMenu> user32.DestroyMenu
0045646B CALL <JMP.&user32.CreatePopupMenu> user32.CreatePopupMenu
00456475 CALL <JMP.&user32.CreateMenu> user32.CreateMenu
00457C98 CALL <JMP.&user32.CheckMenuItem> user32.CheckMenuItem
00457D19 CALL <JMP.&user32.EnableMenuItem> user32.EnableMenuItem
0045935B CALL <JMP.&user32.DrawMenuBar> user32.DrawMenuBar
00459676 CALL <JMP.&user32.GetMenuItemInfoA> user32.GetMenuItemInfoA
004596C8 CALL <JMP.&user32.SetMenuItemInfoA> user32.SetMenuItemInfoA
004596D5 CALL <JMP.&user32.DrawMenuBar> user32.DrawMenuBar
004596F3 CALL <JMP.&user32.GetMenuItemCount> user32.GetMenuItemCount
00459743 CALL <JMP.&user32.GetMenuState> user32.GetMenuState
004599D1 CALL <JMP.&user32.GetSubMenu> user32.GetSubMenu
004599EA CALL <JMP.&user32.GetMenuItemID> user32.GetMenuItemID
00459A49 CALL <JMP.&user32.GetSubMenu> user32.GetSubMenu
00459B34 CALL <JMP.&user32.GetMenuItemCount> user32.GetMenuItemCount
00459B54 CALL <JMP.&user32.GetMenuState> user32.GetMenuState
00459BEB CALL <JMP.&user32.GetMenuState> user32.GetMenuState
00459CA3 CALL <JMP.&user32.GetMenuState> user32.GetMenuState
00459CAE CALL <JMP.&user32.GetSubMenu> user32.GetSubMenu
00459CC7 CALL <JMP.&user32.GetMenuItemID> user32.GetMenuItemID
00459D1A CALL <JMP.&user32.GetMenuStringA> user32.GetMenuStringA
00459E3B CALL <JMP.&user32.DrawMenuBar> user32.DrawMenuBar
0045A014 CALL <JMP.&user32.GetSubMenu> user32.GetSubMenu
0045A6A8 CALL <JMP.&user32.TrackPopupMenu> user32.TrackPopupMenu
00460566 CALL <JMP.&user32.GetMenu> user32.GetMenu
0046058F CALL <JMP.&user32.DrawMenuBar> user32.DrawMenuBar
0046070C CALL <JMP.&user32.GetMenu> user32.GetMenu
00460729 CALL <JMP.&user32.SetMenu> user32.SetMenu
0046075E CALL <JMP.&user32.SetMenu> user32.SetMenu
0046077A CALL <JMP.&user32.SetMenu> user32.SetMenu
00461B0B CALL <JMP.&user32.GetSystemMenu> user32.GetSystemMenu
00461B29 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B36 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B43 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B50 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B5D CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B6A CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B77 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00461B95 CALL <JMP.&user32.EnableMenuItem> user32.EnableMenuItem
00461BB1 CALL <JMP.&user32.EnableMenuItem> user32.EnableMenuItem
00461CC2 CALL <JMP.&user32.SetMenu> user32.SetMenu
00461DA9 CALL <JMP.&user32.GetSubMenu> user32.GetSubMenu
00464FF5 CALL <JMP.&user32.GetSystemMenu> user32.GetSystemMenu
00465004 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00465011 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
00465028 CALL <JMP.&user32.DeleteMenu> user32.DeleteMenu
0048A0A6 CALL <JMP.&user32.DrawMenuBar> user32.DrawMenuBar

Как найти нужный пункт меню?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 16 февраля 2006 16:13
· Личное сообщение · #11

Если нужно только только удалить подпункт меню, то наверно ищи вызовы AppendMenu( но у тя в листинге его нет). Среди них находи тот, где последним параметром( верхнее значение в стеке) будет указатель на строку с именем нужного пункта меню. Найденный вызов заменяй nop'ами.
В результате этот пункт просто не будет отображаться



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 16:48
· Личное сообщение · #12

004560E6 |. 50 PUSH EAX ; /pMenuItemInfo
004560E7 |. 6A FF PUSH -1 ; |ByPosition = TRUE
004560E9 |. 6A FF PUSH -1 ; |ItemID = FFFFFFFF (-1.)
004560EB |. 57 PUSH EDI ; |hMenu
004560EC |. E8 2B11FBFF CALL <JMP.&user32.InsertMenuItemA> ; \InsertMenuItemA

Вот вызов этой функции по коду встречается всего один раз... и в нее передается структура pMenuItemInfo...
Блин ставлю бряк на нее... дальше все как надо и как только он срабатывает всё виснет приходтся все закрывать и перелогиниваться...



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 16 февраля 2006 17:29
· Личное сообщение · #13

Alexus2006 пишет:
всё виснет
- как конкретно виснет?

Alexus2006 пишет:
и перелогиниваться...
- чё это за прога для работы с мышью, что надо логиниться? =)



Ранг: 41.2 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 16 февраля 2006 17:46
· Личное сообщение · #14

Klajnor
Давай ты повежливей будешь!!!
мне не нравяться твои выражения
Klajnor пишет:
Virgo, чё ты орёшь?

Чел за базаром следи!!!
Ничего против тебя или кого другого не имею.
Говорю 1 раз.
Но в свой адрес не потерплю никаких высказываний
С уважением ко всем!!!



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 17 февраля 2006 09:11 · Поправил: Alexus2006
· Личное сообщение · #15

кароче народ не ругайтесь...

прога вот...
url=http://83.222.5.38:8086/2356/mu30.zip (~350Kb)


Разжимал этим...
http://www.exelab.ru/download.php?action=get&n=NDgw (~24Kb)



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 17 февраля 2006 23:29
· Личное сообщение · #16

Виснет почти при любом бряке(помогает тоько win+L). А я них*ра ни понимаю, почему.
ЗЫ. А зачем тебе править менюшку? Прога вроде бесплатная...



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 20 февраля 2006 08:59
· Личное сообщение · #17

надо поправить... хорошие люди попросили...
блин ну хоть кто нить... скажите что делать? Если б не висла я бы ещё хоть что нить сделал, а так вообще фиг знает что делать... а самое противное что пообещал уже сделать.
А главное странно как то виснет... всякие комбинации типа ALT+TAB работают нормально... такое ощущение что она где то в user32.dll остановилась и каждый раз бряк срабатывает во всех работающих приложениях и даже в отладчике и как бы зацикливается... или фиг его знает что это такое... у кто нить бывало такое? может с другим софтом? Как решали проблему?
Не думаю я что это какая то сверх защита этой проги... спасибо за любую помощь...



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 20 февраля 2006 14:11
· Личное сообщение · #18

а может она каким то образом отслеживает свой запуск из отладчика? Бывает ведь такое! Отслеживает... обнаруживает бряк... и вешает систему сама! Может такое бытЬ? И как тогда с этим бороться? И раз пошла такая пьянка как самому в своем софте отслеживать запуск из отладчика?



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 21 февраля 2006 13:14
· Личное сообщение · #19

Если кому нить ещё интересно...
после бряка всё вообщем работает, только нельзя мышью ни куда нажимать... а на клавиагуре все нормально работает... до тех пор пока мышью в любое приложение не нажать оно не повиснет! Может это кому нибудь о чем нибудь говорит?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 21 февраля 2006 15:52
· Личное сообщение · #20

Ржунимагу!!! Ковырял эту прогу, в поисках кода, подвешивающего другие проги. А решение оказалось проще некуда: удалить mouseutility.dll !!! Вроде функциональность проги не изменяется, и можно нормально отлаживать( без мыши это не очень-то получается). Ну ещё при загрузке вылезает MessageBox.



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 21 февраля 2006 16:40
· Личное сообщение · #21

реально !
2Klajnor спасиба



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 21 февраля 2006 22:43
· Личное сообщение · #22

Либо можно пропатчить длл-ку
000015F4 C2 0800 RETN 8
На всякий случай расшифровываю - в длл по смещению 15F4h должно быть C20800h
Патчить можно либо Оlly, либо любым HEX-редактором
В аттаче готовый вариант



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 21 февраля 2006 22:44
· Личное сообщение · #23

Забыл прикрепить =)

6b86_mouseutility.dll.zip



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 22 февраля 2006 08:26 · Поправил: Alexus2006
· Личное сообщение · #24

Klajnor, а каким образом ты это выяснил? я про dllку. Просто интересен ход мыслей... если не трудно канешна...



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 22 февраля 2006 14:23 · Поправил: Alexus2006
· Личное сообщение · #25

и всё равно не смог я пункт меню убрать... :о(
вот функция...
004560E6 |. 50 PUSH EAX ; /pMenuItemInfo
004560E7 |. 6A FF PUSH -1 ; |ByPosition = TRUE
004560E9 |. 6A FF PUSH -1 ; |ItemID = FFFFFFFF (-1.)
004560EB |. 57 PUSH EDI ; |hMenu
004560EC |. E8 2B11FBFF CALL <JMP.&user32.InsertMenuItemA> ; \InsertMenuItemA
я делаю вот так

004560E6 E9 75BE0600 JMP unpacked.004C1F60
004560EB 90 NOP
004560EC |. E8 2B11FBFF CALL <JMP.&user32.InsertMenuItemA> ; \InsertMenuItemA

а на JMP unpacked.004C1F60 делаю так:
PUSH EAX ; /pMenuItemInfo
PUSH -1 ; |ByPosition = TRUE
PUSH -1 ; |ItemID = FFFFFFFF (-1.)
PUSH EDI ; |hMenu
CMP EAX,12FAC3
JNZ unpacked.004560EC
JMP unpacked.004560F1

или так нельзя было делать? А тогда как? функция то одна всё меню формирует... если её занопить то всего меню не будет!
Klajnor, понимаю достал... ну хоть намеки как делать надо в таком случае?



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 22 февраля 2006 14:27
· Личное сообщение · #26

Думал, как можно такое сделать.
Сначала была идея, что прога берёт координаты курсора с помощью GetCursorPos, ищет окно под курсором WindowFromPoint и затем уже что-то делает с окном. Но эти функции вызывались уже после того, как окна начали вешаться.
Сделал вывод, что защита находится вне кода программы.
В папке с прогой заметил подозрительно маленькую длл-ку. Длл-ка экспортирует лишь одну функцию:hook.
Сначала, т.к. не было времени, попробовал самый простой вариант:удалить.
А потом пропатчил длл-ку так, чтобы она этот самый hook не устанавливала.



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 26 февраля 2006 15:03 · Поправил: Alexus2006
· Личное сообщение · #27

так я и не смог удалить один пункт из этого дурацкого меню...
за то все меню смог
А прога кста на делфях написана походу...



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 26 февраля 2006 17:31
· Личное сообщение · #28

Alexus2006 пишет:
так я и не смог удалить один пункт из этого дурацкого меню...
- я тоже =(

НО:
Alexus2006 пишет:
а на JMP unpacked.004C1F60 делаю так:
PUSH EAX ; /pMenuItemInfo
PUSH -1 ; |ByPosition = TRUE
PUSH -1 ; |ItemID = FFFFFFFF (-1.)
PUSH EDI ; |hMenu
CMP EAX,12FAC3
JNZ unpacked.004560EC
JMP unpacked.004560F1

После этого прога вылетает, т.к. ты не восстанавливаешь ESP

Я сделал так:
004C1F60 > \50 push eax
004C1F61 . 6A FF push -1
004C1F63 . 6A FF push -1
004C1F65 . 57 push edi
004C1F66 . 3D C3FA1200 cmp eax,12FAC3
004C1F6B . 74 02 je short m3.004C1F6F
004C1F6D . EB 10 jmp short m3.004C1F7F
004C1F6F > 90 nop
004C1F70 . 90 nop
004C1F71 . 90 nop
004C1F72 . 90 nop
004C1F73 . 90 nop
004C1F74 . 90 nop
004C1F75 . 83C4 10 add esp,10
004C1F78 . B8 01000000 mov eax,1
004C1F7D . EB 05 jmp short m3.004C1F84
004C1F7F > E8 9852F4FF call <jmp.&user32.InsertMenuItemA> ; \InsertMenuItemA
004C1F84 >^ E9 6841F9FF jmp m3.004560F1


Прога не вылетает, но и на меню это почему-то никак не отразилось(код конечно кривой в плане оформления, но исправлять лень было)



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 27 февраля 2006 23:21
· Личное сообщение · #29

Если ещё интересует, то предлагаю такой способ. Результат зависит от того, где было в первый раз вызванно всплывающее меню( на иконке в трее или на окне проги)

Меняем
0045A6A8 |. E8 AFCDFAFF call <jmp.&user32.TrackPopupMenu> ; \TrackPopupMenu

на
0045A6A8 . /E9 B3780600 jmp m2.004C1F60

И:
004C1F60 > \803D 8A1F4C00 00 cmp byte ptr ds:[4C1F8A],0 ; | ;Чтобы сработало 1 раз
004C1F67 . 75 17 jnz short m2.004C1F80 ; |
004C1F69 . 68 00040000 push 400 ; |/Flags = MF_BYPOSITION|MF_ENABLED|MF_STRING ;говорим, что ItemId - номер пункта меню для удаления
004C1F6E . 6A 04 push 4 ; ||ItemId = 4 ; Удалить 4-ый пункт
004C1F70 . FF7424 08 push dword ptr ss:[esp+8] ; ||hMenu ; Хендл на меню
004C1F74 . E8 2350F4FF call <jmp.&user32.DeleteMenu> ; |\DeleteMenu
004C1F79 . C605 8A1F4C00 01 mov byte ptr ds:[4C1F8A],1 ; | ;Чтобы больше не вызывалось удаление меню
004C1F80 > E8 D754F4FF call <jmp.&user32.TrackPopupMenu> ; \TrackPopupMenu
004C1F85 .^ E9 2387F9FF jmp m2.0045A6AD

Вообщем сюда ещё впихнуть проверочку, что удаляем именно тот пункт меню ( или поиск этого пункта), и тогда получится то, что ты хочешь



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 28 февраля 2006 08:37 · Поправил: Alexus2006
· Личное сообщение · #30

Спасибо нормально сработало
только если первый раз в окне вызвать то оно блин сволочь всё равно остаётся...
Ну уже хоть что то... Огомное спасибо ... Могу Пива почой выслать ...
Не... правда Klajnor спасибо бОльшОе ...


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


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