Сейчас на форуме: bartolomeo, -Sanchez- (+3 невидимых) |
eXeL@B —› Вопросы новичков —› изменить меню... |
Посл.ответ | Сообщение |
|
Создано: 16 февраля 2006 12:30 · Личное сообщение · #1 |
|
Создано: 16 февраля 2006 13:01 · Личное сообщение · #2 |
|
Создано: 16 февраля 2006 13:07 · Поправил: Virgo · Личное сообщение · #3 Alexus2006 Нет ничего невозможного. Попробуй для начала Restorator or ResHacker. Загрузи свою прогу в любую из предложенных программ, и дальше ребенок уже все сможет даже сделать. И вообще где название проги, размер, ссылка и т.д и т.п. Где моддератор хоть один? и Вообще кто нибудь читает правила? Опередили!!! |
|
Создано: 16 февраля 2006 13:08 · Личное сообщение · #4 |
|
Создано: 16 февраля 2006 13:13 · Личное сообщение · #5 |
|
Создано: 16 февраля 2006 14:27 · Личное сообщение · #6 Alexus2006 пишет: а ещё есть какие нить функции для работы с меню? - посмотри справочник по WinAPI. Я для этой цели пользую справочник из Delphi. Ищешь в нём любую из этих функций и в самом конце описания будет See Also AppendMenu, CreatePopupMenu, DestroyMenu, InsertMenu, SetMenu, InsertMenuItem Это я тебе написал See Also для CreateMenu Virgo, чё ты орёшь? Можно и спросить вежливо и читать повнимательней Virgo пишет: кто??? или что?? - ресурсы конечно! Virgo пишет: И вообще где название проги, размер, ссылка и т.д и т.п. - Разве это обязательно?!?! Может чел задал чисто теоретический вопрос и не хочет, чтобы ему всё на пальцах объяснили, а хочет сам всё понять! Virgo пишет: на чем прога написана? - вот это правильный вопрос! Хотелось бы узнать! |
|
Создано: 16 февраля 2006 14:46 · Личное сообщение · #7 |
|
Создано: 16 февраля 2006 14:51 · Личное сообщение · #8 |
|
Создано: 16 февраля 2006 14:59 · Личное сообщение · #9 Alexus2006 пишет: получились 2а exe файла разных размеров... странно как то... или так и должно было быть? Зачастую так и должно быть. Ни одной из этих утилит не пользовался, но если судить по названию: AspackDie - заточен специально под ASPack => распакованная прога мало чем отличается от оригинала QUnpack - он вроде "универсален" для простых пакеров. Наверно там единый алгоритм под все пакеры ЗЫ Если распакуешь руками, наверняка получишь файл 3-его размера, не совпадающее с первыми 2-мя =) |
|
Создано: 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 Как найти нужный пункт меню? |
|
Создано: 16 февраля 2006 16:13 · Личное сообщение · #11 Если нужно только только удалить подпункт меню, то наверно ищи вызовы AppendMenu( но у тя в листинге его нет). Среди них находи тот, где последним параметром( верхнее значение в стеке) будет указатель на строку с именем нужного пункта меню. Найденный вызов заменяй nop'ами. В результате этот пункт просто не будет отображаться |
|
Создано: 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... Блин ставлю бряк на нее... дальше все как надо и как только он срабатывает всё виснет приходтся все закрывать и перелогиниваться... |
|
Создано: 16 февраля 2006 17:29 · Личное сообщение · #13 |
|
Создано: 16 февраля 2006 17:46 · Личное сообщение · #14 |
|
Создано: 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) |
|
Создано: 17 февраля 2006 23:29 · Личное сообщение · #16 |
|
Создано: 20 февраля 2006 08:59 · Личное сообщение · #17 надо поправить... хорошие люди попросили... блин ну хоть кто нить... скажите что делать? Если б не висла я бы ещё хоть что нить сделал, а так вообще фиг знает что делать... а самое противное что пообещал уже сделать. А главное странно как то виснет... всякие комбинации типа ALT+TAB работают нормально... такое ощущение что она где то в user32.dll остановилась и каждый раз бряк срабатывает во всех работающих приложениях и даже в отладчике и как бы зацикливается... или фиг его знает что это такое... у кто нить бывало такое? может с другим софтом? Как решали проблему? Не думаю я что это какая то сверх защита этой проги... спасибо за любую помощь... |
|
Создано: 20 февраля 2006 14:11 · Личное сообщение · #18 |
|
Создано: 21 февраля 2006 13:14 · Личное сообщение · #19 |
|
Создано: 21 февраля 2006 15:52 · Личное сообщение · #20 |
|
Создано: 21 февраля 2006 16:40 · Личное сообщение · #21 |
|
Создано: 21 февраля 2006 22:43 · Личное сообщение · #22 |
|
Создано: 21 февраля 2006 22:44 · Личное сообщение · #23 |
|
Создано: 22 февраля 2006 08:26 · Поправил: Alexus2006 · Личное сообщение · #24 |
|
Создано: 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, понимаю достал... ну хоть намеки как делать надо в таком случае? |
|
Создано: 22 февраля 2006 14:27 · Личное сообщение · #26 Думал, как можно такое сделать. Сначала была идея, что прога берёт координаты курсора с помощью GetCursorPos, ищет окно под курсором WindowFromPoint и затем уже что-то делает с окном. Но эти функции вызывались уже после того, как окна начали вешаться. Сделал вывод, что защита находится вне кода программы. В папке с прогой заметил подозрительно маленькую длл-ку. Длл-ка экспортирует лишь одну функцию:hook. Сначала, т.к. не было времени, попробовал самый простой вариант:удалить. А потом пропатчил длл-ку так, чтобы она этот самый hook не устанавливала. |
|
Создано: 26 февраля 2006 15:03 · Поправил: Alexus2006 · Личное сообщение · #27 |
|
Создано: 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 Прога не вылетает, но и на меню это почему-то никак не отразилось(код конечно кривой в плане оформления, но исправлять лень было) |
|
Создано: 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 Вообщем сюда ещё впихнуть проверочку, что удаляем именно тот пункт меню ( или поиск этого пункта), и тогда получится то, что ты хочешь |
|
Создано: 28 февраля 2006 08:37 · Поправил: Alexus2006 · Личное сообщение · #30 |
eXeL@B —› Вопросы новичков —› изменить меню... |