我正在尝试反编译 windows 照片查看器 DLL 文件以尝试调整它们,例如编辑速度等。因为这在注册表中是不可能的。
在 ILSpy 或 dotPeek 等程序中打开文件时,我收到如下消息:
此文件不包含托管程序集。
我对逆向工程很陌生,所以有人能告诉我我在这里做错了什么,因为程序说它是一个 .NET Framework 4.5 应用程序。
我正在尝试反编译 windows 照片查看器 DLL 文件以尝试调整它们,例如编辑速度等。因为这在注册表中是不可能的。
在 ILSpy 或 dotPeek 等程序中打开文件时,我收到如下消息:
此文件不包含托管程序集。
我对逆向工程很陌生,所以有人能告诉我我在这里做错了什么,因为程序说它是一个 .NET Framework 4.5 应用程序。
你面临的问题很常见。.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)
...
托管应用程序有充分的理由使用本机 DLL:
PhotoViewer.dll是本机 DLL,即使 dotPeek 说“平台:.Net Framework 4.5”。这似乎是一个错误,因为它还报告了 .NET for kernel32.dll.
反正属性Assembly platform和Module Runtime好像有点不一致。以下是我尝试过的一些组合导致的结果,至少需要一些解释:
另一种检测 .NET 的方法是Dependency Walker。纯 .NET 程序集通常只有一个依赖项,mscoree.dll而本机 DLL 依赖于不同的东西。
它可能是一个本机 dll。您可能可以反编译主照片查看器二进制文件(根据您的声明,它可能是托管代码)以获取有关本机 dll 的一些信息,以帮助您对 dll 进行基于反汇编的逆向工程。
如果您的 dll 是本机的,并且大小小于 10 兆字节,请尝试使用此Retargetable 反编译器。