Cam*_*ute 7 reflection microsoft-metro windows-8
我试图将我的Windows Store应用程序的ComboBox控件反编译为C#,但是没有代码.相反,所有属性都是对单独程序集的调用.如何找到真实代码的存在位置,以及如何在C#中读取方法体?我看不懂集会,所以这对我没有好处
Han*_*ant 14
关于如何对WinRT内部进行逆向工程的一些注意事项.
在引擎盖下,WinRT是纯粹的COM.你要在机器上看的第一个地方是
C:\Program Files (x86)\Windows Kits\8.0\Include\WinRT
Run Code Online (Sandbox Code Playgroud)
此目录包含IDL文件或Interface Description Language
.IDL是描述COM类型的起点.快速搜索ComboBox
将让您找到Windows.UI.Xaml.Controls.IDL
该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;
}
Run Code Online (Sandbox Code Playgroud)
它有点可读,类似于C#中的接口声明.如果您之前使用COM修改过,那么您将看到原始IDL语法中的新属性.额外的东西,以帮助运行时支持库中内置的语言投影,以创建WinRT支持实现继承,泛型和静态类成员,纯COM没有的功能的错觉.
这些IDL文件被编译midlrt.exe
为机器可读格式,可供编译器等工具使用.你已经知道格式了,输出midlrt.exe
是一个.winmd
文件.类似于旧的类型库但大大增强,底层格式是从.NET的程序集清单格式中采用的.所以反编译.winmd文件没用,你已经在你的机器上有源;)
在COM中很常见,注册表用于查找包含COM服务器代码的可执行文件.开始regedit.exe
并导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId
.您将找到应用可以创建的所有WinRT类型的列表.该Windows.UI.Xaml.Controls.ComboBox
键是一个你感兴趣的注意.DllPath
值,指向包含代码的DLL:C:\Windows\System32\Windows.UI.Xaml.dll
我的机器上.CLSID值是熟悉的COM类guid,用于请求类工厂创建实例.
这就是你撞墙的地方; DLL包含大多数COM服务器所做的本机代码.用C++编写并编译成机器代码.非常不受反编译影响,它是一个18兆字节的怪物.
所以我找到了大会。您只需在系统上搜索 .dll 文件(例如,在我的例子中为 Windows.XAML.UI.Controls.dll),但不可能将其反汇编为 C#。事实证明,WinRT 程序集没有 C# 反汇编程序(至少,当我上次查看时)