7

Windows ストア アプリの ComboBox コントロールを C# に逆コンパイルしようとしていますが、コードがありません。代わりに、すべてのプロパティが別のアセンブリへの呼び出しになっているようです。実際のコードが存在する場所を見つけるにはどうすればよいですか? また、C# でメソッド本体を読み取るにはどうすればよいですか? 私はアセンブリを読むことができないので、それは私には役に立たないでしょう

4

2 に答える 2

15

WinRT の内部構造をリバース エンジニアリングする方法に関する注意事項。
内部では、WinRT は純粋な COM です。マシンで最初に見たい場所は

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

このディレクトリには、IDL ファイルまたはInterface Description Language. IDL は、COM タイプを記述するための出発点です。をすばやく検索すると、型の宣言をComboBox見つけることができます。Windows.UI.Xaml.Controls.IDLComboBox

    [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.winmdファイルです. 以前のタイプ ライブラリと同様に、大幅に強化され、基になる形式は.NET のアセンブリ マニフェスト形式から採用されました。そのため、.winmd ファイルを逆コンパイルすることは役に立ちません。既にマシンにソースがあります ;)

COM ではよくあることですが、レジストリは、COM サーバーのコードを含む実行可能ファイルを見つけるために使用されます。を開始regedit.exeして に移動しHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassIdます。アプリで作成できるすべての WinRT の種類の一覧が表示されます。Windows.UI.Xaml.Controls.ComboBoxキーは、あなたが興味を持っているものです。コードを含む DLL を指す値に注意してください:DllPathC:\Windows\System32\Windows.UI.Xaml.dllのマシン上。CLSID 値は、おなじみの COM クラス GUID であり、クラス ファクトリにインスタンスの作成を要求するために使用されます。

それはあなたが壁にぶつかったところです。DLL には、ほとんどの COM サーバーと同様にネイティブ コードが含まれています。C++ で記述され、マシン コードにコンパイルされます。逆コンパイルの影響を受けにくい、18 メガバイトのモンスターです。

于 2013-02-04T02:04:32.233 に答える
1

それで、私はアセンブリを見つけました。システム上の .dll ファイル (例: 私の場合は Windows.XAML.UI.Controls.dll) を検索するだけで済みますが、C# に逆アセンブルすることはできません。WinRT アセンブリ用の C# 逆アセンブラーがないことが判明しました (少なくとも、私が最後に見たとき)。

于 2013-02-03T14:37:36.097 に答える