反编译的 .winmd 文件仅包含外部调用

2023-12-23

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


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

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

该目录包含 IDL 文件,或者Interface Description Language https://en.wikipedia.org/wiki/Interface_description_language。 IDL 是描述 COM 类型的起点。快速搜索ComboBox会让你找到Windows.UI.Xaml.Controls.IDL以及声明ComboBox type:

    [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# 中的接口声明。如果您之前修改过 COM,那么您将看到原始 IDL 语法中的新属性。额外的东西来帮助语言投射内置到运行时支持库中,以创建 WinRT 支持实现继承、泛型和静态类成员以及纯 COM 不具备的功能的错觉。

这些 IDL 文件是由midlrt.exe转换为可由编译器等工具使用的机器可读格式。您已经知道该格式,输出midlrt.exe is a .winmd文件。与旧的类型库类似但得到了很大的增强,底层格式采用了.NET 的程序集清单格式 http://msdn.microsoft.com/en-us/library/1w45z383%28v=vs.71%29.aspx。因此反编译 .winmd 文件没有用,您的计算机上已经有了源代码;)

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

这就是你碰壁的地方; DLL 包含本机代码,就像大多数 COM 服务器一样。用 C++ 编写并编译为机器代码。它是一个 18 兆字节的怪物,无法被反编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反编译的 .winmd 文件仅包含外部调用 的相关文章

  • Castle Windsor依赖注入:使用调用者类型作为参数

    以下类在温莎城堡容器中注册 namespace MyNamespace class Foo IFoo public Foo ILog log log log ILog是一个log4net记录器 当前注册如下 Component For
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 未生成 appxupload 包。仅生成测试包

    我正在开发一个通用的 Windows 应用程序 当我尝试使用商店 gt 创建应用程序包创建包时 它仅创建测试包 在AppPackages目录中 我只能找到一个带有 test的文件夹 如何确保创建的 appxupload 包可以上传到 Win
  • 使用 system.reflection 列出类字段

    我需要获取一个列表来存储类中的所有字段 值 这个班级只是一些公共的const string我在下面粘贴的变量 public class HTDB Cols public class TblCustomers public const str
  • 如何反映动态对象的成员?

    我需要从 NET 4 中使用动态关键字声明的对象中获取属性及其值的字典 看来使用反射来实现这一点是行不通的 Example dynamic s new ExpandoObject s Path Home s Name Home How do
  • 使用 AngularJS 制作 Windows Phone 全景图

    我正在尝试在 AngularJS 应用程序中复制 Windows Phone Ui 这是一个example http www expertreviews co uk gallery features 1295629 designing wi
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • ModelBinder 验证在使用反射的 getter 上中断

    我遇到了一个似乎与反射和模型绑定验证有关的问题 并且FormatterParameterBinding ExecuteBindingAsync 特别是 虽然我可以使用方法来做我想做的事情 但如果我可以使用属性 我会更喜欢它 在这里 我正在寻
  • 获取同名方法的集合

    我有一些代码 用于帮助 url 路由 尝试在控制器中查找操作方法 我的控制器看起来像这样 public ActionResult Item int id MyViewModel model new MyViewModel id return
  • Kotlin - 来自 KType 的 KClass<*>

    在 Kotlin 中 我可以获得KType from a KClass lt gt 像这样 Int class createType kotlin Int 我如何做相反的事情并获得KClass
  • Firebreath 插件未在 IE 10 中加载

    EDIT 请参阅帖子末尾以获取更多信息 I am trying to to get plugins created via the Firebreath framework 1 7 0 to load I am on Windows 8 i
  • 如何在 Scala 用户定义注释中使用命名参数?

    在下面的代码中 我能够获得第一个注释对象 Publishable 但不能获得第二个 第二个使用命名参数 它转换为 x 2 x 3 x 1 作为 AST 中的参数 我该如何正确地做到这一点 class Publishable val path
  • Windows 8 RTM 上的 Visual Studio 2012 Web 发布无法启动浏览器

    我正在 Windows 8 RTM x64 上使用 Visual Studio 2012 Premium 开发 ASP NET MVC 4 网站 当我右键单击 Web 应用程序并选择 发布 时 Visual Studio 2012 返回消息
  • Swift Mirror 反射不返回 UIVIew 上的属性

    尝试使用以下内容获取 UIView 或 UIViewController 的所有属性 func propertysNames gt String var s String for c in Mirror reflecting self ch
  • 使用反射来检查部分方法是否已实现

    背景 我正在使用 Linq to SQL 因此生成了一个包含自动生成的类的 DBML 文件 部分生成过程为某些操作创建部分方法 在我的例子中 我感兴趣的两个方法与表记录的插入和更新相关 这些部分方法是根据 DBML 设计器中创建的每个表生成
  • 如何在 Windows 8 Metro 应用程序中制作导航动画?

    在使用 HTML 的 Metro 应用程序中 建议使用片段导航到不同的页面 在这里解释 http msdn microsoft com en us library windows apps hh452768 aspx navigation
  • 如何动态计算 C# 表达式?

    我想做相当于 object result Eval 1 3 string now Eval System DateTime Now ToString as string 关注比里斯link http www codeproject com
  • Scala:在运行时获取 mixin 接口

    我需要在运行时从给定的类获取所有接口 全部加载在类加载器中 例如 如果一个类是这样声明的 trait B trait C trait D class A extends B with C with D 我想在运行时获取这些信息 A 取决于
  • 如何在后面的代码中访问 C# Metro UI 中数据模板内的控件

    我有一个位于 Flipview 数据模板内的 MediaElement 我想在后面的代码中访问名为 video 的 MediaElement 以便我可以通过按钮分配播放 暂停等属性 这是我想做的代码
  • 如何提高 Field.set 的性能(也许使用 MethodHandles)?

    我正在编写一些调用的代码Field set https docs oracle com en java javase 11 docs api java base java lang reflect Field html set java l

随机推荐