在诸如此类的程序中打开文件时作为ILSpy或dotPeek,我收到一条类似以下消息:
该文件不包含托管程序集。
对于逆向工程而言,它是一个相当新的事物,所以任何人都可以在这里告诉我我做错了什么,因为程序说它是.NET Framework 4.5应用程序。
#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 platform
和Module 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
评论
这表示该dll不是使用.net制作的。@ExtremeCoders有什么方法可以弄清楚它是用什么制成的吗?
使用PeiD,ExeInfo Pe,Easy It Easy等pe检测工具进行扫描。
您要反编译的文件名是什么?
@ThomasW。 “ PhotoViewer.dll”在常规Windows 7 OS上位于C:\ Program Files \ Windows Photo Viewer \下