我正在尝试反编译Windows Photo Viewer DLL文件以尝试调整它们,例如编辑速度等。因为在注册表中这是不可能的。

在诸如此类的程序中打开文件时作为ILSpy或dotPeek,我收到一条类似以下消息:


该文件不包含托管程序集。


对于逆向工程而言,它是一个相当新的事物,所以任何人都可以在这里告诉我我做错了什么,因为程序说它是.NET Framework 4.5应用程序。

评论

这表示该dll不是使用.net制作的。

@ExtremeCoders有什么方法可以弄清楚它是用什么制成的吗?

使用PeiD,ExeInfo Pe,Easy It Easy等pe检测工具进行扫描。

您要反编译的文件名是什么?

@ThomasW。 “ PhotoViewer.dll”在常规Windows 7 OS上位于C:\ Program Files \ Windows Photo Viewer \下

#1 楼

您面临的问题很普遍。 .NET应用程序仍会加载许多本机DLL。对许多人而言,最令人惊讶的是.NET框架本身是本机的。您可以使用lm v命令在WinDbg中标识.NET DLL。如果是托管DLL,则会显示:

0:008> lmv m MyApp
start    end        module name
10310000 10574000   MyApp(deferred)             
    Image path: C:\...\MyApp.exe
    Image name: MyApp.exe
    Has CLR image header, track-debug-data flag not set
    Timestamp:        Wed May 21 16:34:02 2014 (537CB95A)
...


注意输出中的行Has CLR image header。 .NET框架也在该过程中加载,但是它是本机的,没有这样的一行:

0:008> lmv m mscorwks
start    end        module name
79470000 79a1e000   mscorwks   (pdb symbols)          d:\...\mscorwks.pdb
    Loaded symbol image file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Image path: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Image name: mscorwks.dll
    Timestamp:        Tue Oct 22 03:06:42 2013 (5265CFA2)
...

托管应用程序:


,因为它已经实现且稳定
出于性能方面的考虑:也许C ++只是速度更快(也许不是您的情况,因为您似乎不满意具有性能)

PhotoViewer.dll是本机DLL,即使dotPeek表示“平台:.Net Framework 4.5”。这似乎是一个错误,因为它还报告了kernel32.dll的.NET。

反正Assembly platformModule Runtime的属性似乎有点不一致。这是我尝试过的一些组合,这些组合至少会导致某些结果,至少需要一些解释: 1.1.4322
Fdt.ProfibusTransformers:平台4.0,运行时2.0.50727

检测.NET的另一种方法是Dependency Walker。一个纯.NET程序集通常仅对mscoree.dll有一个依赖关系,而本机DLL则依赖于不同的事物。

评论


如何使lmv命令起作用?我已经下载了Windows调试工具,但没有成功。

– kajacx
16-11-25在20:55

@kajacx:也许您拥有.NET 4,Silverlight或.NET Core?尝试lmv m clr和lmv m coreclr。如果没有任何效果,请自行尝试lmv。如果这也不起作用,请让我知道有关您的环境的更多详细信息。您正在进行实时调试还是有故障转储文件?

–托马斯·韦勒(Thomas Weller)
16-11-25在22:06



@TomasWeller我不知道这些问题的一半是什么,我只想将.exe文件反编译为C#代码,但是现在我以另一种方式解决了该问题。出于好奇,您甚至把lmv放在哪里? 0:008> lmv m MyApp看起来不像标准命令行。

– kajacx
16 Nov 27'9:39

@kajacx:您似乎不太熟悉该主题。 0:008>是WinDbg提示符。您不能将所有程序反编译为C#代码。为此必须使用.NET编写。

–托马斯·韦勒(Thomas Weller)
16-11-28在7:22

好的,当您在OP中收到消息时该怎么办?

–not2qubit
17年2月6日,11:57

#2 楼

这可能是本机dll。您可能可以反编译主照片查看器二进制文件(根据您的声明,该二进制文件可能是托管代码),以获取有关本机dll的一些信息,以帮助您进行基于反汇编的dll反向工程。

#3 楼

如果您的dll是本地的,并且大小小于10 MB,请尝试使用此可重定向的反编译器。