我試圖反編譯爲我的Windows商店應用到C#ComboBox控件,但沒有代碼。相反,所有的屬性都是調用一個單獨的程序集,看起來像。如何找到真正的代碼存在的地方,以及如何閱讀C#中的方法體?我不能閱讀組裝,這樣就會對我沒什麼好反編譯.winmd文件包含什麼,但外部調用
回答
所以我找到了組裝。您只需搜索系統上的.dll文件(例如Windows.XAML.UI.Controls.dll),但無法將其反彙編到C#中。原來有針對WinRT的組件沒有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#中的接口聲明。如果您之前曾使用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
關鍵是一個你感興趣的注意DllPath
值,指向包含代碼的DLL:我的機器上C:\Windows\System32\Windows.UI.Xaml.dll
。 CLSID值是熟悉的COM類guid,用於請求類工廠創建實例。
這就是你撞到牆的地方;該DLL包含像大多數COM服務器一樣的本地代碼。用C++編寫並編譯爲機器碼。相當反編譯,它是一個18兆字節的怪物。
- 1. 編譯器編譯外部包含
- 2. 編譯或反編譯MS Access MDB文件有什麼作用?
- 3. 爲什麼編譯器不能在我的包中包含外部DCU?
- 4. Django:包含外部包含文件
- 5. 包含外部PHP文件
- 6. 什麼編譯器做的只包含一個函數調用
- 7. Visual Studio的預編譯頭文件包含什麼?
- 8. 當由.NET編譯時,可執行文件包含什麼?
- 9. 編譯時爲什麼需要包含.o文件?
- 10. 包括包含.jar文件編譯
- 11. 反編譯後我的Java文件包含字節代碼
- 12. XSLT條件包含外部文件
- 13. 編譯C++,組織包含文件
- 14. 重新編譯反編譯包含GOTO指令
- 15. 包含CMake的外部生成文件
- 16. 在xhtml中包含外部JS文件
- 17. 動態地包含外部Javascript文件
- 18. 在AS3中「包含」外部.as文件
- 19. 在Python中包含外部文件
- 20. 如何包含外部ASP文件?
- 21. 包含外部頭文件不工作
- 22. 外部頭文件包含在C++中
- 23. 包含外部模態html文件
- 24. 在球拍中包含外部文件
- 25. 在functions.php中包含外部文件WordPress
- 26. 編譯Java文件和外部庫Linux
- 27. 什麼是反編譯Java類文件的最佳軟件?
- 28. 編譯和反編譯dll文件
- 29. 包括尋找編譯器選項的外部頭文件
- 30. 修改一個makefile以包含外部編譯的對象
如果想查看彙編代碼,IDA應該可以工作。 – sarvesh
@iaimtomisbehave提醒我,我忘記提及的是尋找C#代碼,而不是彙編代碼。我沒有嘗試去反彙編,也不能說是否有效。我編輯了這個問題來反映這一點。 – CamronBute