Сейчас на форуме: asfa, Rio (+6 невидимых)

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

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

Создано: 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. если потребуется, скажите какие сборки лучше выложить - чистые немодифицированные или измененные мной с наличием указанной проблемы.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 01 сентября 2013 10:47
· Личное сообщение · #2

у вас baml или xaml в проекте?



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

Создано: 01 сентября 2013 10:52 · Поправил: iggvwh
· Личное сообщение · #3

baml



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

Создано: 01 сентября 2013 11:38
· Личное сообщение · #4

Залили библиотеки сюда
--> Link <--



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

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



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

Создано: 01 сентября 2013 13:41
· Личное сообщение · #6

sendersu пишет:
Точно убрал?

de4dot был запущен с параметром --dont-rename
sendersu пишет:
ет когда уже в студии подключаете и используете оттуда чтото?

После модификации и переподписания сборок я делал тестовое консольное приложение, где создавал инстанс компонента:
Code:
  1. var s = new ActiproSoftware.Windows.Controls.SyntaxEditor.SyntaxEditor();

На этой строке вываливался описанный эксепшн
sendersu пишет:
на екзетуле есть готовые пакеджы, например

Я там не зарегистрирован (нет инвайта) и строка с результатами поиска, которую вы указали, возвращает окно с предложением залогиниться. Можете указать название пакеджа и где его можно скачать?



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 01 сентября 2013 15:16
· Личное сообщение · #7

звиняйте
http://prntscr.com/1oomal

глянул дату- наверное старое...



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

Создано: 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)
И это несмотря на то что все библиотеки у меня подписаны. Может, кто подскажет, куда копать.
Линк на последние модификации: --> Link <--



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 02 сентября 2013 01:59
· Личное сообщение · #9

iggvwh пишет:
Однако в WPF-ном проекте вылезла ошибка:

а что и как используете из ActiPro в своем проекте?
я подключил все 3 длл, создал пару обьетков в коде, полет норм. (VS2010sp1)



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

Создано: 02 сентября 2013 02:23
· Личное сообщение · #10

sendersu пишет:
а что и как используете из ActiPro в своем проекте?

Ошибка у меня возникает как раз при создании экземпляра ActiproSoftware.Windows.Controls.SyntaxEditor.SyntaxEditor в проекте WPF. Причем неважно кодом их прописывать или разметкой xaml. В первом случае компилится но при старте падает с вышеуказанной ошибкой, во втором - падает (выводит ошибку) дизайнер студии (тоже VS2010sp1).



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

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


дллки из последнего линка



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

Создано: 02 сентября 2013 12:30
· Личное сообщение · #12

Скрин ошибки:
--> Link <--
Проект:
--> Link <--



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

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



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

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




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

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


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

Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 02 сентября 2013 20:56
· Личное сообщение · #16

zeppe1in пишет:
PublicKeyToken=null


вопрос в том кто и когда его за -null- ил
ибо null не подходит никак (оригинал то был подписан!)



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

Создано: 02 сентября 2013 21:57
· Личное сообщение · #17

Пожалуй, задам глупый вопрос: а почему нельзя разобрать компонент на сырцы?




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 02 сентября 2013 22:33
· Личное сообщение · #18

sendersu пишет:
вопрос в том кто и когда его за -null- ил

дак очевидно, что iggvwh его занулил, а когда и как ему и виднее
nick8606 пишет:
почему нельзя разобрать компонент на сырцы?

Можно. только запарно скорей всего.

-----
zzz




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 03 сентября 2013 00:44
· Личное сообщение · #19

zeppe1in пишет:
Можно. только запарно скорей всего.

я пробовал пару раз собираться с xaml-ями, ето адЬ
лучше уж с бамлями работать (мож не дорос еще, хз)



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

Создано: 03 сентября 2013 00:56
· Личное сообщение · #20

zeppe1in пишет:
дак очевидно, что iggvwh его занулил, а когда и как ему и виднее

Эт не я, чесслово
На самом деле я даже не представляю, на каком шаге я это мог сделать. Буду иметь ввиду на будущее.
В общем, похоже, что я его все-таки уговорил сдаться. Не знаю, что такое #Blob, но понял что через хекс-редактор я эти строки найду. Нашел, заменил, ошибка появилась другая, с которой я справился значительно быстрей. В итоге - заветное окошечко в тестовом проекте все же появилось.
sendersu, zeppe1in
Благодарю вас за помощь. zeppe1in, выручаете меня уже который раз
nick8606 пишет:
почему нельзя разобрать компонент на сырцы?

Для меня этот путь - мегатрудоемкий. Даже если вы через de4dot или другие инструменты сможете переименовать переменные до корректных имен, декрипнуть стринги и хотябы частично распутать спагетти-код, оставленный протектором останется еще туча мелочей и не очень мелочей, которые нужно будет править в студии и далеко не факт что вы сможете корректно восстановить логику проекта.

Немного оффтопа. Коллеги, можете ли вы порекомендовать материалы по кейгенингу. Видел, что для младших версий данного контрола есть генератор, но мало того, что он тоже накрыт протектором, дак еще и как к этому процессу подойти пока я очень смутро представляю. Желательно с примером под .Net



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 03 сентября 2013 10:17
· Личное сообщение · #21

iggvwh
de4dot
bin->src
найти код валидации регинформации (можно прямо в рефлекторе/sae/ilspy/etc лазить по коду)
анализ
написание кг
тестинг

примеров кг видел на екзетуле (с видео), правда они все на vb.net там



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

Создано: 04 сентября 2013 03:01
· Личное сообщение · #22

Цель достигнута, нужные компоненты заработали.

P.S. Посмотрел код декриптера информации о лицензии... что-то вдруг лень стало мучаться с кейгеном


 eXeL@B —› Вопросы новичков —› Помощь в доламывании WPF компоненты
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати