DLL 以 DCD 开头

逆向工程 聚乙烯 文件格式
2021-07-04 00:57:59

今天我正在调查 Microsoft DLL 的一个问题mscordacwks.dll,它是 .NET 框架的一部分。我以前见过很多次,它总是一个普通的 PE 文件,这意味着它以魔法MZ.

但是,今天的文件DCD以 ASCII开头我只能找到DCD对反汇编代码中使用的 ELF 二进制文件的引用但是,这大约DCD是文件的前三个字节。

这是DLL的开始:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  44 43 44 01 38 01 EE 42 00 00 0A 00 50 41 33 30  DCD.8.îB....PA30
00000010  80 16 D7 D5 DE B1 9D 01 B0 4E 10 D0 C7 04 0C C4  €.×ÕÞ±..°N.ÐÇ..Ä
00000020  84 D6 08 01 42 01 04 00 88 FB 17 32 00 00 00 00  „Ö..B...ˆû.2....
00000030  00 00 08 7D DE D3 AA 02 A0 2C AA AA AA AA AA AA  ...}ÞÓª. ,ªªªªªª
00000040  AA AA AA AA AA 1A AA AA AA 1A AA AA AA AA A1 01  ªªªªª.ªªª.ªªªª¡.
00000050  20 D2 A1 AA AA AA AA AA AA AA AA AA 22 2A AA AA   Ò¡ªªªªªªªªª"*ªª
00000060  AA AA A1 8D 09 00 FF 3F 00 1C F4 3F 00 F0 FF 51  ªª¡...ÿ?..ô?.ðÿQ
00000070  00 F0 04 00 FF 01 74 50 66 80 88 D0 1A 00 68 68  .ð..ÿ.tPf€ˆÐ..hh
00000080  44 33 33 00 00 00 00 00 30 65 97 00 50 67 64 96  D33.....0e—.Pgd–
00000090  28 6E 66 90 71 23 8E E3 B8 26 E2 54 1A 62 12 23  (nf.q#Žã¸&âT.b.#
000000A0  12 8B C5 20 63 92 18 44 C4 71 1A 44 E2 C4 48 48  .‹Å c’.DÄq.DâÄHH
000000B0  1D CB 63 C7 6D EC 36 96 D8 21 26 91 10 93 88 EB  .ËcÇmì6–Ø!&‘.“ˆë
000000C0  9A C4 B1 3C 76 0C 2A 31 22 B5 E3 C4 24 4E 24 A4  šÄ±<v.*1"µãÄ$N$¤
000000D0  31 00 88 53 23 71 EC 38 91 39 76 10 93 D8 42 E2  1.ˆS#qì8‘9v.“ØBâ
000000E0  98 D4 6E 6A 22 69 52 8B 91 04 47 3E BC 36 2D CD  ˜Ônj"iR‹‘.G>¼6-Í
000000F0  E8 4A AB 6F 99 12 6D C3 B2 61 5E 86 8E 0E 43 A7  èJ«o™.mòa^†Ž.C§

通常,这些 DLL 的大小约为 1.7MB。但是,这个只有 3kB。我在文件夹里找到了C:\Windows\WinSxS\amd64_netfx-mscordacwks_b03f5f7f11d50a3a_10.0.17134.1_none_a06aa12b896d6ba9

那是什么文件格式?而且,如果答案很简单,Windows 是如何加载它的?

我发现了更多此类文件,最大大小为 51kB,似乎该PA30部分也很常见。

关于我为何使用该文件的一些背景信息:mscordacwks.dll适用MS于 Microsoft、COR.NET 框架、DAC数据访问控制和WKS工作站。在调试 .NET 应用程序时,正是该 DLL 可以提供有关 .NET 对象的内存布局等信息。通常它与 WinDbg 的 SOS 扩展一起使用。有时,开发者的 mscordacwks.dll 版本错误,这让 SOS 抱怨版本错误。所以我在我的电脑上查看是否能找到匹配的版本。

2个回答

看起来这些文件使用了以前用于 Windows 更新包的增量压缩格式 ( MSDelta )的变体

我找到了一个声称可以解压缩此类文件的项目

支持的文件类型

  • DCN v1
  • DCM v1
  • DCS v1
  • DCD v1

类型说明

  • 标头符号:0x44 0x43 0x4E 0x01,DCN 01(封装IPD PA30)
  • 标头符号:0x44 0x43 0x4D 0x01,DCM 01(打包 IPD PA30,需要源清单,wcp)
  • Header Sign: 0x44 0x43 0x53 0x01, DCS 01 (packed LZMS, 可以有多个block)
  • 标头符号:0x44 0x43 0x44 0x01,DCD 01(打包IPD PA30,delta,需要源文件)
  • 标头符号:0x44 0x43 0x48 0x01,DCH 01(未打包,仅标头)
  • 标头符号:0x44 0x43 0x58 0x01、DCX 01(未知,仅 Windows 10 支持)

...但到目前为止无法让它工作。

我刚刚遇到了同样的问题。我在 C:\Windows\WinSxS\Backup 中找到了源 DCN 文件,并使用上述工具获得了一个 dll。之后,我将 /d 选项与 DCD 一起使用来获取更改后的 dll。