一般地,default键值中的数据值为 %SystemRoot%\...\*.dll 或者是X:\Windows\...\*.dll甚至是%CommonProgramFiles%\...\*.dll 当然也有一些孤立的dll名。ThreadingModel键值主要有四个,分别为Both,Apartment,Free和Neutral,有些时候这个键值也可能不存在。
处理思路:
1. 根据ThreadingModel键值数据,如果为Free或者Neutral,那么,删除该键值的整个父项。否则,不做修改。
2. 根据Default键值数据,判断相应的文件在PE的路径中是否存在,如果存在,则不做修改。否则,删除该键值的整个父项。
可以看出,这里的项目和 CLSID 以及 Interface 存在依存关系。
处理思路:
2. 在第一步处理完毕后,对于3.1.1的操作中得到的结果中,如果存在只有一个 孤立的 TypeLib子项 的项目(数目很少),那么就可以将该项删除之。
这项可以说是最为复杂的一项,与上面两项以及其他项目有着复杂的依存关系。下面仅仅是我的一些猜想,希望有dalao能够帮忙完善。
首先是微软官方文档对其的描述,应该和CLSID和TypeLib有着关联:
Maps an IID to a CLSID in 16-bit proxy DLLs.
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface
{IID}
ProxyStubClsid = {CLSID}
If you add interfaces, you must use this entry to register them (16-bit systems) so that OLE can find the appropriate remoting code to establish interprocess communication.
同样地,子项可能包含 ProxyStubClsid ProxyStubClsid32 TypeLib 中的一个或者多个,该项的Default键值数据则为对其的描述:
在子项下的Default键值数据则对应CLSID 或 TypeLib 中的项目:
值得注意的是,这些数据相同的几率很大,处理后可能还会遗留下不少项目。
处理思路:
根据上述提到的键值,查找其在CLSID或TypeLib下是否有对应的项名,如果不存在,删除父项。否则不作修改。
这部分的操作和上面差不多,就不再重复了。
一些常用后缀的支持,处理也都大同小异。虽然数目多,但是占据的空间非常有限,可以略过。
3.1.6 其余杂项处理
这里的关系也比较复杂,谨慎处理:
3.2 Microsoft 部分
这部分大概占据了一半多的体积,结构也比较复杂。
- Microsoft\ASP.NET
- Microsoft\ClipboardServer
- Microsoft\COM3
- Microsoft\CommsAPHost
- Microsoft\Composition
- Microsoft\DataAccess
- Microsoft\DataCollection
- Microsoft\DataSharing
- Microsoft\DDDS
- Microsoft\DevDiv
- Microsoft\Device Association Framework
- Microsoft\DiagnosticLogCSP
- Microsoft\DirectDraw
- Microsoft\Directlnput
- Microsoft\DirectMusic
- Microsoft\DirectPlay8
- Microsoft\DirectPlayNATHelp
- Microsoft\DirectShow
- Microsoft\DirectX
- Microsoft\DRM
- Microsoft\DVR
- Microsoft\DXP
- Microsoft\EAPSIMMethods
- Microsoft\Enrollment
- Microsoft\Enrollments
- Microsoft\Fusion
- Microsoft\FuzzyDS
- Microsoft\GameOverlay
- Microsoft\IdentityCRL
- Microsoft\IdentityStore
- Microsoft\IHDS
- Microsoft\IME
- Microsoft\InProcLogger
- Microsoft\Input
- Microsoft\IsoBurn
- Microsoft\LexiconUpdate
- Microsoft\MdmCommon
- Microsoft\MediaEngine
- Microsoft\MemoryDiagnostic
- Microsoft\Messaging
- Microsoft\MessengerService
- Microsoft\MiracastReceiver
- Microsoft\MSDRM
- Microsoft\MSDTC
- Microsoft\MSF
- Microsoft\MSIME
- Microsoft\MSMQ
- Microsoft\MSN Apps
- Microsoft\MTF
- Microsoft\MTFFuzzyFactors
- Microsoft\MTFInputType
- Microsoft\MTFKeyboardMappings
- Microsoft\Multimedia
- Microsoft\Multivariant
- Microsoft\OEM
- Microsoft\Office
- Microsoft\OnlineProviders
- Microsoft\Outlook Express
- Microsoft\Phone
- Microsoft\Photos
- Microsoft\PIM
- Microsoft\PLA
- Microsoft\PlayToReceiver
- Microsoft\PointOfService
- Microsoft\Policies
- Microsoft\PolicyManager
- Microsoft\Poom
- Microsoft\PowerShell
- Microsoft\Print
- Microsoft\Provisioning
- Microsoft\PushRouter
- Microsoft\RADAR
- Microsoft\RcsPresence
- Microsoft\RendezvousApps
- Microsoft\Router
- Microsoft\Sensors
- Microsoft\Shared Tools
- Microsoft\Shell
- Microsoft\SideShow
- Microsoft\SoftGrid
- Microsoft\Software
- Microsoft\SQMClient
- Microsoft\Sync Framework
- Microsoft\TelemetryClient
- Microsoft\Terminal Server Client
- Microsoft\TermServLicensing
- Microsoft\TPG
- Microsoft\Transaction Server
- Microsoft\uDRM
- Microsoft\UEV
- Microsoft\Unified Store
- Microsoft\Unistore
- Microsoft\UPnP Control Point
- Microsoft\UPnP Device Host
- Microsoft\UserData
- Microsoft\UserManager
- Microsoft\WAB
- Microsoft\Windows Phone
- Microsoft\Windows Search
- Microsoft\WlanSvc
复制代码
3.2.1 Winners 处理
这里着重讲下Winners的处理,这部分位于 Microsoft\Windows\CurrentVersion\SideBySide\Winners 下,占据了大约四分之一的体积。先看看这部分的结构:
很容易看出这部分和WinSxS对应。将Windows\WinSxS中的所有程序集目录名导出,然后导出Manifests目录下的所有文件名(去掉Manifests后缀),两者去重后就能得到一个列表:
**这个字符串可能包含了:架构类型,包名,版本号,语言结构,身份令牌,公钥,哈希值。
amd64_microsoft.windows.c..-controls.resources_6595b64144ccf1df_5.82.14393.0_zh-cn_b6e3713e5f85de1e |
1. 红色:这里通过红色部分扫描注册表,可以得到一些注册表项目。
2. 绿色:对应在找到的注册表项中子项指示的值,表示构建版本号。
3. 蓝色:对应语言版本,在扫描结果中可能看到许多诸如none,zh-ch,en-us之类的语言版本,选取对应的语言版本即可。
处理思路: 根据WinSxS中处理出的列表,在注册表中查找相应项目后保留,其余删除即可。(由于PE中WinSxS项目并不是很多,并且注册表中一项就对应多个程序集,因此手动筛选即可)
4.写在最后
注册表按照上面所写的稍微处理了下,从原本的66MB压到了大概37MB,还存在不少可以改进的地方。由于时间比较仓促,文章的很多地方写得不够完善甚至存在错误。还有就是编辑器用着实在不舒服。。。这篇就当做是抛砖引玉吧,希望有dalao能够一同完善下。
5.参考资料