not marked marcado está como reflection windows-8 microsoft-metro

reflection - marcado - is not marked as serializable



El archivo.winmd descompuesto no contiene nada más que llamadas externas (2)

Así que encontré el montaje. Simplemente tiene que buscar el archivo .dll en el sistema (por ejemplo, Windows.XAML.UI.Controls.dll en mi caso), pero no es posible desensamblarlo en C #. Resulta que no hay desensambladores de C # para los ensamblajes de WinRT (al menos, cuando miré por última vez)

Estoy tratando de descompilar el control ComboBox para mi aplicación de Windows Store en C #, pero no hay código. En cambio, parece que todas las propiedades son llamadas a un ensamblaje separado. ¿Cómo encuentro dónde existe el código real y cómo leo los cuerpos del método en C #? No puedo leer ensamblaje, así que eso no me haría bien


Algunas notas sobre cómo realizar ingeniería inversa en las partes internas de WinRT.
Bajo el capó, WinRT es puro COM. El primer lugar que desea buscar en su máquina es

C:/Program Files (x86)/Windows Kits/8.0/Include/WinRT

Este directorio contiene archivos IDL o Interface Description Language . IDL es el punto de partida para describir los tipos COM. Una búsqueda rápida de ComboBox le permitirá encontrar Windows.UI.Xaml.Controls.IDL y la declaración para el tipo ComboBox :

[marshaling_behavior(agile)] [threading(both)] [static(Windows.UI.Xaml.Controls.IComboBoxStatics, 0x06020000)] [version(0x06020000)] [composable(Windows.UI.Xaml.Controls.IComboBoxFactory, public, 0x06020000)] runtimeclass ComboBox : Windows.UI.Xaml.Controls.Primitives.Selector { [default] interface Windows.UI.Xaml.Controls.IComboBox; [overridable] interface Windows.UI.Xaml.Controls.IComboBoxOverrides; }

Es algo legible tal como es, se asemeja a una declaración de interfaz en C #. Si ha jugado con COM antes, verá nuevos atributos a partir de la sintaxis original de IDL. Elementos adicionales para ayudar a la proyección del lenguaje integrada en su biblioteca de soporte de tiempo de ejecución para crear la ilusión de que WinRT admite herencia de implementación, genéricos y miembros de clase estáticos, características que COM puro no tiene.

Estos archivos IDL son compilados por midlrt.exe en un formato legible por máquina que se puede usar con herramientas como los compiladores. Ya conoce ese formato, la salida de midlrt.exe es un archivo .winmd . Similar al tipo de bibliotecas antiguas pero muy mejoradas, el formato subyacente se adoptó del formato de manifiesto de ensamblaje de .NET . Entonces descompilar el archivo .winmd no es útil, ya tiene la fuente en su máquina;)

Como es común en COM, el registro se usa para encontrar el ejecutable que contiene el código para un servidor COM. Inicie regedit.exe y vaya a HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsRuntime/ActivatableClassId . Encontrará una lista de todos los tipos de WinRT que una aplicación puede crear. La clave Windows.UI.Xaml.Controls.ComboBox es la que le interesa. Tenga en cuenta el valor de DllPath , que apunta a la DLL que contiene el código: C:/Windows/System32/Windows.UI.Xaml.dll en mi máquina. El valor de CLSID es el guid de clase COM familiar, utilizado para pedir a la fábrica de la clase que cree la instancia.

Eso es sobre dónde golpeas la pared; el archivo DLL contiene código nativo como lo hacen la mayoría de los servidores COM. Escrito en C ++ y compilado a código máquina. Muy impermeable a la descompilación, es un monstruo de 18 megabytes.