gpt4 book ai didi

reflection - 反编译的 .winmd 文件只包含外部调用

转载 作者:行者123 更新时间:2023-12-03 17:52:55 25 4
gpt4 key购买 nike

我正在尝试将我的 Windows Store 应用程序的 ComboBox 控件反编译为 C#,但没有代码。相反,似乎所有属性都是对单独程序集的调用。如何找到真实代码存在的位置,以及如何读取 C# 中的方法体?我无法阅读汇编,所以这对我没有好处

最佳答案

关于如何对 WinRT 内部进行逆向工程的一些说明。
在底层,WinRT 是纯 COM。您想在机器上查看的第一个位置是

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

此目录包含 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;
}

它按原样可读,类似于 C# 中的接口(interface)声明。如果您以前使用过 COM,那么您将看到原始 IDL 语法中的新属性。额外的东西来帮助内置在运行时支持库中的语言投影,以创造 WinRT 支持实现继承、泛型和静态类成员的错觉,这些特性是纯 COM 所没有的。

这些 IDL 文件由 midlrt.exe 编译。转换为可供编译器等工具使用的机器可读格式。你已经知道这种格式, midlrt.exe 的输出是 .winmd文件。与旧的类型库类似,但增强了很多,底层格式采用 .NET's assembly manifest format .所以反编译 .winmd 文件没有用,你的机器上已经有了源代码;)

在 COM 中很常见,注册表用于查找包含 COM 服务器代码的可执行文件。开始 regedit.exe并导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId .您将找到应用可以创建的所有 WinRT 类型的列表。 Windows.UI.Xaml.Controls.ComboBox key 是您感兴趣的那个。注意 DllPath值,指向包含代码的 DLL: C:\Windows\System32\Windows.UI.Xaml.dll在我的机器上。 CLSID 值是熟悉的 COM 类 guid,用于要求类工厂创建实例。

那就是你碰壁的地方; DLL 包含 native 代码,就像大多数 COM 服务器一样。用 C++ 编写并编译为机器代码。完全不受反编译的影响,它是一个 18 兆字节的怪物。

关于reflection - 反编译的 .winmd 文件只包含外部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com