none
Бесплатный обфускатор для проекта WPF (Framework 4.0) RRS feed

  • Вопрос

  • Здравствуйте! Посоветуйте пожалуйста какой нибудь обфускатор. Я уже что только не пробовал. Все они валят сборку набок =). Например пробовал Eazfuscator .NET Assistant, он нормально переименовывает, но не WPF проекты. По крайней мере мой не запускается, там появляются проблемы с XamlReader (в исключении увидел (UnhandledException)). Мне нужно, чтобы просто нормально запутал код, то есть переименовал его и зашифровал строки. Желательно в нечитабельные символы (или как там правильно сказать...). Вообще не знаю, что делать.

    Даже после упаковки NET Reactor'ом всё равно вылетает это исключение. WPF что нельзя обфускаторами обрабатывать?

    Текст ошибки:
    Объект вызвавший ошибку: PresentationFramework

    Сообщение описывающее ошибку: Метод или операция не реализована.

    Метод класса: System.Windows.Markup.XamlReader; Имя метода: RewrapException; Имя и путь к модулю: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll

    в System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
    в System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
    в System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
    в System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
    в System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
    в System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
    в System.Windows.Application.DoStartup()
    в System.Windows.Application.<.ctor>b__1(Object unused)
    в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    в System.Windows.Threading.DispatcherOperation.InvokeImpl()
    в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
    в System.Threading.ExecutionContext.runTryCode(Object userData)
    в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Windows.Threading.DispatcherOperation.Invoke()
    в System.Windows.Threading.Dispatcher.ProcessQueue()
    в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
    в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
    в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
    в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
    в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
    в System.Windows.Threading.Dispatcher.Run()
    в System.Windows.Application.RunDispatcher(Object ignore)
    в System.Windows.Application.RunInternal(Window window)
    в System.Windows.Application.Run(Window window)
    в ?0?.?97?.?527?()

    22 февраля 2011 г. 2:18

Ответы

  • Проблема в том, что содержимое XAML (точнее, BAML) не может быть обфусцировано таким образом, а поскольку оно ссылается на другие классы и свойства по их имени, то и их переименовывать тоже нельзя. Некоторые коммерческие обфускаторы справляются с этой задачей, например, вот этот , а полноценных бесплатных обфускаторов для WPF я еще не встречал. На Вашем месте я бы максимально разделил бизнес-логику и представление в разных сборках и обфусцировал бы только сборку с бизнес-логикой.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 7:57
  • Хотя в недавно появившемся CodeFort Free Edition заявлена поддержка WPF/Silverlight. Можете попробовать его.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 8:01
  • Похоже на какие-то внутренние проблемы обфускатора. Подробнее сможет ответить, наверное, только служба поддержки разработчика.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 13:41

Все ответы

  • Проблема в том, что содержимое XAML (точнее, BAML) не может быть обфусцировано таким образом, а поскольку оно ссылается на другие классы и свойства по их имени, то и их переименовывать тоже нельзя. Некоторые коммерческие обфускаторы справляются с этой задачей, например, вот этот , а полноценных бесплатных обфускаторов для WPF я еще не встречал. На Вашем месте я бы максимально разделил бизнес-логику и представление в разных сборках и обфусцировал бы только сборку с бизнес-логикой.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 7:57
  • Хотя в недавно появившемся CodeFort Free Edition заявлена поддержка WPF/Silverlight. Можете попробовать его.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 8:01
  •  

    Попробовал  CodeFort Free Edition, по моему самый лучший из тех, которыми я пробовал обрабатывать сборку. Он пропускает, что нужно. В Baml что-то не переименовывает. Теперь уже вылетает такое исключение, что оно может означать? Я ничего понять по нему к сожалению не могу:


    System.InvalidProgramException не обработано

    Message=Компилятор JIT обнаружил внутреннее ограничение.
    Source=MyProgram
    StackTrace:
    в ___codefort. . (
    )
    в ___codefort. . ()
    в MyProgram.App.OnStartup(StartupEventArgs e)
    в System.Windows.Application.<.ctor>b__1(Object unused)
    в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    в System.Windows.Threading.DispatcherOperation.InvokeImpl()
    в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
    в System.Threading.ExecutionContext.runTryCode(Object userData)
    в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Windows.Threading.DispatcherOperation.Invoke()
    в System.Windows.Threading.Dispatcher.ProcessQueue()
    в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
    в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
    в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
    в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
    в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
    в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
    в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
    в System.Windows.Threading.Dispatcher.Run()
    в System.Windows.Application.RunDispatcher(Object ignore)
    в System.Windows.Application.RunInternal(Window window)
    в System.Windows.Application.Run(Window window)
    в System.Windows.Application.Run()
    в MyProgram.App.Main()
    InnerException:

     

    22 февраля 2011 г. 13:35
  • Похоже на какие-то внутренние проблемы обфускатора. Подробнее сможет ответить, наверное, только служба поддержки разработчика.
    • Помечено в качестве ответа Casper-SC 22 февраля 2011 г. 13:53
    22 февраля 2011 г. 13:41