![]() |
eXeL@B —› Вопросы новичков —› Помощь в доламывании WPF компоненты |
Посл.ответ | Сообщение |
|
Создано: 01 сентября 2013 05:12 · Личное сообщение · #1 Приветствую! Возникла сложность с разбором WPF-компонента. Моя проделанная работа: 1) de4dot убрал гадости протектора SmartAssembly 2) Удалены Strong name 3) Модифицирован механизм лицензирования 4) В baml-ресурсах компонента PublicKeyToken заменен на токен новой подписи 5) Сборки переподписаны. Проблема в следующем - в сборке с самим компонентом появляется ругань на ресурсный словарь: "Can only base on a Style with target type that is base type 'PopupButton'." Не могу понять причину возникновения ошибки (не спец я в WPF) и следовательно как ее исправить тоже. P.S. если потребуется, скажите какие сборки лучше выложить - чистые немодифицированные или измененные мной с наличием указанной проблемы. ![]() |
|
Создано: 01 сентября 2013 10:47 · Личное сообщение · #2 |
|
Создано: 01 сентября 2013 10:52 · Поправил: iggvwh · Личное сообщение · #3 |
|
Создано: 01 сентября 2013 11:38 · Личное сообщение · #4 |
|
Создано: 01 сентября 2013 12:22 · Поправил: sendersu · Личное сообщение · #5 iggvwh пишет: 1) de4dot убрал гадости протектора SmartAssembly Точно убрал? а то я гляжу на дллки в папке Patched а там еще мусора полно дедот зовет nsXX неймспейсы но никак не #XX http://prntscr.com/1oo0vb baml (binary xaml) править руками не есть гуд iggvwh пишет: появляется ругань на ресурсный словарь ет когда уже в студии подключаете и используете оттуда чтото? upd: на екзетуле есть готовые пакеджы, например http://forum.exetools.com/search.php?searchid=324680 ![]() |
|
Создано: 01 сентября 2013 13:41 · Личное сообщение · #6 sendersu пишет: Точно убрал? de4dot был запущен с параметром --dont-rename sendersu пишет: ет когда уже в студии подключаете и используете оттуда чтото? После модификации и переподписания сборок я делал тестовое консольное приложение, где создавал инстанс компонента: Code:
На этой строке вываливался описанный эксепшн sendersu пишет: на екзетуле есть готовые пакеджы, например Я там не зарегистрирован (нет инвайта) и строка с результатами поиска, которую вы указали, возвращает окно с предложением залогиниться. Можете указать название пакеджа и где его можно скачать? ![]() |
|
Создано: 01 сентября 2013 15:16 · Личное сообщение · #7 |
|
Создано: 01 сентября 2013 21:25 · Личное сообщение · #8 sendersu пишет: на екзетуле есть готовые пакеджы Я подумал, что там тулзы для модификации WPF/baml ![]() Скорректировал руками токены в бамл коде еще одной библиотеки. Добился успешного запуска из консольного приложения. Решил что все - победа. Однако в WPF-ном проекте вылезла ошибка: Could not load file or assembly 'ActiproSoftware.Shared.Wpf, Version=13.1.583.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) И это несмотря на то что все библиотеки у меня подписаны. Может, кто подскажет, куда копать. Линк на последние модификации: ![]() |
|
Создано: 02 сентября 2013 01:59 · Личное сообщение · #9 |
|
Создано: 02 сентября 2013 02:23 · Личное сообщение · #10 sendersu пишет: а что и как используете из ActiPro в своем проекте? Ошибка у меня возникает как раз при создании экземпляра ActiproSoftware.Windows.Controls.SyntaxEditor.SyntaxEditor в проекте WPF. Причем неважно кодом их прописывать или разметкой xaml. В первом случае компилится но при старте падает с вышеуказанной ошибкой, во втором - падает (выводит ошибку) дизайнер студии (тоже VS2010sp1). ![]() |
|
Создано: 02 сентября 2013 11:37 · Личное сообщение · #11 давайте ваш прожект студии тут все ОК-но вот такой код норм. проходит ActiproSoftware.Windows.Controls.SyntaxEditor.SyntaxEditor se = new ActiproSoftware.Windows.Controls.SyntaxEditor.SyntaxEditor(); se.Text = "asdfasdfasf asd fads fasd f"; se.Name = "asdf"; логи 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\user1\Documents\Visual Studio 2010\Projects\WpfApplication1\WpfApplication1\bin\Debug\ActiproSoftware.Shared.Wpf.dll' 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\user1\Documents\Visual Studio 2010\Projects\WpfApplication1\WpfApplication1\bin\Debug\ActiproSoftware.SyntaxEditor.Wpf.dll' 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero.dll' 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\user1\Documents\Visual Studio 2010\Projects\WpfApplication1\WpfApplication1\bin\Debug\ActiproSoftware.Text.Wpf.dll' 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationProvider.dll' 'WpfApplication1.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll' дллки из последнего линка ![]() |
|
Создано: 02 сентября 2013 12:30 · Личное сообщение · #12 |
|
Создано: 02 сентября 2013 13:26 · Поправил: sendersu · Личное сообщение · #13 Завелся ваш код http://prntscr.com/1ovf6j а причина видеть в здесь (слева мой прож) http://prntscr.com/1ovfa8 ну и последний момент у вас // Runtime Version:4.0.30319.225 у меня проекте // Runtime Version:4.0.30319.18052 а вообще-то да, проблемы остались для деталей - можно глянуть в логи Assembly Binding Log Viewer (у меня он тут "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\FUSLOGVW.exe" ) вот как он ругается на одну из длл - http://prntscr.com/1ovhxp ![]() |
|
Создано: 02 сентября 2013 14:53 · Поправил: iggvwh · Личное сообщение · #14 sendersu пишет: вот как он ругается на одну из длл Это как раз та ошибка, которая у меня в дизайнере вылезает. Вопрос в том - как уточнить какой участок кода и/или разметки baml ее вызывает. Я почти уверен, что данная ошибка - на уровне baml-кода (ошибка вылезает при визуализации контрола, если говорить про рантайм), и сидит она где-то в ActiproSoftware.Shared.Wpf.dll. В ресурсном файле, содержащим baml-код ActiproSoftware.Shared.Wpf.g.resources есть "упоминания" ActiproSoftware.Shared.Wpf без указания PublicKeyToken-а. Предполагаю, что проблема в этом. Т.е. надо править baml-код ActiproSoftware.Shared.Wpf.g.resources. Но с другой стороны, предыдущее изменения в ActiproSoftware.Shared.Wpf.g.resources я делал только заменой старого PublicKeyToken на новый, соответственно участки, которые не содержали токен не были изменены. А в первоначальном (не патченом) варианте все работало. Известны ли вам методы, с помощью которых можно детектировать, кто хочет ActiproSoftware.Shared.Wpf с нулом в PublicKeyToken? ![]() |
|
Создано: 02 сентября 2013 20:54 · Личное сообщение · #15 поиск строки ActiproSoftware.Shared.Wpf приводит в ActiproSoftware.SyntaxEditor.Wpf.dll и там можно увидеть две таких строки ActiproSoftware.Shared.Wpf, Version=13.1.583.0, Culture=neutral, PublicKeyToken=null находятся они в #Blob. Видимо откуда то из таблиц должна быть ссылка туда. по идее можно просто вписать нужный токен вместо null и пере подписать SyntaxEditor. ----- zzz ![]() |
|
Создано: 02 сентября 2013 20:56 · Личное сообщение · #16 |
|
Создано: 02 сентября 2013 21:57 · Личное сообщение · #17 |
|
Создано: 02 сентября 2013 22:33 · Личное сообщение · #18 |
|
Создано: 03 сентября 2013 00:44 · Личное сообщение · #19 |
|
Создано: 03 сентября 2013 00:56 · Личное сообщение · #20 zeppe1in пишет: дак очевидно, что iggvwh его занулил, а когда и как ему и виднее Эт не я, чесслово ![]() На самом деле я даже не представляю, на каком шаге я это мог сделать. Буду иметь ввиду на будущее. В общем, похоже, что я его все-таки уговорил сдаться. Не знаю, что такое #Blob, но понял что через хекс-редактор я эти строки найду. Нашел, заменил, ошибка появилась другая, с которой я справился значительно быстрей. В итоге - заветное окошечко в тестовом проекте все же появилось. sendersu, zeppe1in Благодарю вас за помощь. zeppe1in, выручаете меня уже который раз ![]() nick8606 пишет: почему нельзя разобрать компонент на сырцы? Для меня этот путь - мегатрудоемкий. Даже если вы через de4dot или другие инструменты сможете переименовать переменные до корректных имен, декрипнуть стринги и хотябы частично распутать спагетти-код, оставленный протектором останется еще туча мелочей и не очень мелочей, которые нужно будет править в студии и далеко не факт что вы сможете корректно восстановить логику проекта. Немного оффтопа. Коллеги, можете ли вы порекомендовать материалы по кейгенингу. Видел, что для младших версий данного контрола есть генератор, но мало того, что он тоже накрыт протектором, дак еще и как к этому процессу подойти пока я очень смутро представляю. Желательно с примером под .Net ![]() |
|
Создано: 03 сентября 2013 10:17 · Личное сообщение · #21 |
|
Создано: 04 сентября 2013 03:01 · Личное сообщение · #22 |
![]() |
eXeL@B —› Вопросы новичков —› Помощь в доламывании WPF компоненты |
Эта тема закрыта. Ответы больше не принимаются. |