无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8166|回复: 20
打印 上一主题 下一主题

关于SOFTWARE注册表精简的一些思路

    [复制链接]
跳转到指定楼层
1#
发表于 2018-9-5 21:59:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Windows_Air 于 2018-9-23 14:57 编辑

关于SOFTWARE注册表精简的一些思路



1.引言
  
  关于PE的software精简,一直是PE制作过程中的重难点。最近在无忧看到 @wimboot @2010hook @立帮电子  等dalao的作品学到了不少东西。不过涉及到具体的精简操作却比较少见。这里列举了一些我在精简过程中的一小部分操作供大家参考。由于水平有限,有些地方可能存在缺漏甚至是造成PE运行异常的错误,恳请daolao们能够指点一二。

2.环境准备

  • 采用的是的从install.wim提取而来的注册表,然后将boot.wim的替换进去得到的完整注册表。**(这里采用的是win10 LTSB 2016 累积到八月更新的注册表,因此有不少冗余项目,大小为66MB,而其他镜像制作的注册表也一般在60MB左右)
  • 用于处理注册表的工具是Registry Workshop(记得在设置中调整查找的最大项目数),将SOFTWARE配置单元加载到 HKEY_LOCAL_MACHINE\pe-soft


3.相关分析


3.1 Classes部分

  这部分占据了快一半的体积(大约30MB左右),其中注册dll的主要信息在下面给出。先从CLSID入手:
  1. Classes\CLSID
  2. Classes\Interface
  3. Classes\TypeLib
  4. Classes\WOW6432Node\CLSID
  5. Classes\WOW6432Node\Interface
  6. Classes\WOW6432Node\TypeLib
复制代码

3.1.1 CLSID处理

  可以看到这个项中包含了许多杂项:

  
  在这些项下一般包含三种子项   InProcHandler32 InprocServer32 以及 LocalServer32  ,而在在这这三种子项下面一般又包含了名为default ThreadingModel 的键值。



     一般地,default键值中的数据值为 %SystemRoot%\...\*.dll 或者是X:\Windows\...\*.dll甚至是%CommonProgramFiles%\...\*.dll 当然也有一些孤立的dll名。ThreadingModel键值主要有四个,分别为Both,Apartment,Free和Neutral,有些时候这个键值也可能不存在。


处理思路:

1.  根据ThreadingModel键值数据,如果为Free或者Neutral,那么,删除该键值的整个父项。否则,不做修改。

2.  根据Default键值数据,判断相应的文件在PE的路径中是否存在,如果存在,则不做修改。否则,删除该键值的整个父项。


   3.  特别地,有一些项不包含上面提到的三种子项,而是含有TypeLib项,这里在下文会继续讨论

  1. 18/9/23 补充:注意保留以下项目
  2. {2F6CE85C-F9EE-43CA-90C7-8A9BD53A2467}
  3. {ED228FDF-9EA8-4870-83b1-96b02CFE0D52}
  4. {8FD8B88D-30E1-4F25-AC2B-553D3D65F0EA}
复制代码

3.1.2 TypeLib处理

  先看看这项的结构:

  首先第一级子项为版本号,可能为任意值如1.0,2.0,6.0等。该项下的default键值给出了描述:

  在接下来的子项中又包含了名为 win32win64 的子项,这两项的default键值则给出了文件路径:

  
  处理思路:
    1.  仿照3.1.1的操作,筛选出冗余的项目。


  另外地,不妨以TypeLib下面的项名称搜索下注册表:

  可以看出,这里的项目和 CLSID 以及 Interface 存在依存关系。

  处理思路:
    2.  在第一步处理完毕后,对于3.1.1的操作中得到的结果中,如果存在只有一个 孤立的 TypeLib子项 的项目(数目很少),那么就可以将该项删除之。


3.1.3 Interface处理
  

  这项可以说是最为复杂的一项,与上面两项以及其他项目有着复杂的依存关系。下面仅仅是我的一些猜想,希望有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 中的项目:

  值得注意的是,这些数据相同的几率很大,处理后可能还会遗留下不少项目。







  处理思路:

  根据上述提到的键值,查找其在CLSIDTypeLib下是否有对应的项名,如果不存在,删除父项。否则不作修改。



3.1.4 WOW6432Node处理

  这部分的操作和上面差不多,就不再重复了。


3.1.5 .*处理

  一些常用后缀的支持,处理也都大同小异。虽然数目多,但是占据的空间非常有限,可以略过。

3.1.6 其余杂项处理

  这里的关系也比较复杂,谨慎处理:


  另外,有些项目可以根据名称直接判断是否需要精简:








3.2 Microsoft 部分


  这部分大概占据了一半多的体积,结构也比较复杂。





  这些项目可以有选择的删除:
  1. Microsoft\ASP.NET
  2. Microsoft\ClipboardServer
  3. Microsoft\COM3
  4. Microsoft\CommsAPHost
  5. Microsoft\Composition
  6. Microsoft\DataAccess
  7. Microsoft\DataCollection
  8. Microsoft\DataSharing
  9. Microsoft\DDDS
  10. Microsoft\DevDiv
  11. Microsoft\Device Association Framework
  12. Microsoft\DiagnosticLogCSP
  13. Microsoft\DirectDraw
  14. Microsoft\Directlnput
  15. Microsoft\DirectMusic
  16. Microsoft\DirectPlay8
  17. Microsoft\DirectPlayNATHelp
  18. Microsoft\DirectShow
  19. Microsoft\DirectX
  20. Microsoft\DRM
  21. Microsoft\DVR
  22. Microsoft\DXP
  23. Microsoft\EAPSIMMethods
  24. Microsoft\Enrollment
  25. Microsoft\Enrollments
  26. Microsoft\Fusion
  27. Microsoft\FuzzyDS
  28. Microsoft\GameOverlay
  29. Microsoft\IdentityCRL
  30. Microsoft\IdentityStore
  31. Microsoft\IHDS
  32. Microsoft\IME
  33. Microsoft\InProcLogger
  34. Microsoft\Input
  35. Microsoft\IsoBurn
  36. Microsoft\LexiconUpdate
  37. Microsoft\MdmCommon
  38. Microsoft\MediaEngine
  39. Microsoft\MemoryDiagnostic
  40. Microsoft\Messaging
  41. Microsoft\MessengerService
  42. Microsoft\MiracastReceiver
  43. Microsoft\MSDRM
  44. Microsoft\MSDTC
  45. Microsoft\MSF
  46. Microsoft\MSIME
  47. Microsoft\MSMQ
  48. Microsoft\MSN Apps
  49. Microsoft\MTF
  50. Microsoft\MTFFuzzyFactors
  51. Microsoft\MTFInputType
  52. Microsoft\MTFKeyboardMappings
  53. Microsoft\Multimedia
  54. Microsoft\Multivariant
  55. Microsoft\OEM
  56. Microsoft\Office
  57. Microsoft\OnlineProviders
  58. Microsoft\Outlook Express
  59. Microsoft\Phone
  60. Microsoft\Photos
  61. Microsoft\PIM
  62. Microsoft\PLA
  63. Microsoft\PlayToReceiver
  64. Microsoft\PointOfService
  65. Microsoft\Policies
  66. Microsoft\PolicyManager
  67. Microsoft\Poom
  68. Microsoft\PowerShell
  69. Microsoft\Print
  70. Microsoft\Provisioning
  71. Microsoft\PushRouter
  72. Microsoft\RADAR
  73. Microsoft\RcsPresence
  74. Microsoft\RendezvousApps
  75. Microsoft\Router
  76. Microsoft\Sensors
  77. Microsoft\Shared Tools
  78. Microsoft\Shell
  79. Microsoft\SideShow
  80. Microsoft\SoftGrid
  81. Microsoft\Software
  82. Microsoft\SQMClient
  83. Microsoft\Sync Framework
  84. Microsoft\TelemetryClient
  85. Microsoft\Terminal Server Client
  86. Microsoft\TermServLicensing
  87. Microsoft\TPG
  88. Microsoft\Transaction Server
  89. Microsoft\uDRM
  90. Microsoft\UEV
  91. Microsoft\Unified Store
  92. Microsoft\Unistore
  93. Microsoft\UPnP Control Point
  94. Microsoft\UPnP Device Host
  95. Microsoft\UserData
  96. Microsoft\UserManager
  97. Microsoft\WAB
  98. Microsoft\Windows Phone
  99. Microsoft\Windows Search
  100. 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.参考资料

评分

参与人数 10无忧币 +50 收起 理由
freesoft00 + 5
23456 + 5 没想到是个王者
立帮电子 + 5 很给力!
ai20110304 + 5 很给力!
hsmy + 5 赞一个!
2011mtw35 + 5 赞一个!
dytechnology + 5 赞一个!
hero8000 + 5 赞一个!
艺人 + 5 没想到是个王者
9zhmke + 5 很给力!

查看全部评分

2#
发表于 2018-9-5 23:29:14 | 只看该作者
厉害厉害~  期待更多文章
回复

使用道具 举报

3#
发表于 2018-9-6 08:54:16 | 只看该作者
支持一下
回复

使用道具 举报

4#
发表于 2018-9-6 22:53:40 | 只看该作者
支持一下
回复

使用道具 举报

5#
发表于 2018-9-7 19:24:50 | 只看该作者
很喜欢这样的技术型文章
回复

使用道具 举报

6#
发表于 2018-9-8 05:17:42 | 只看该作者
很喜欢这样的技术型文章
回复

使用道具 举报

7#
发表于 2018-9-8 06:33:42 来自手机 | 只看该作者
感谢分享宝贵经验
回复

使用道具 举报

8#
发表于 2018-9-10 10:55:39 | 只看该作者
以BOOT.WIM的注册表为基础,按需添加一些注册表,达到“精简”注册表的目的。
直接精简Install的注册表并不可取
以我19H1  18234X64PE为例,SOFT处理后只有5.5M,可能是目前最小的体积

点评

很不错。能否分享宝贵经验?  详情 回复 发表于 2018-9-11 14:13
回复

使用道具 举报

9#
 楼主| 发表于 2018-9-11 14:13:21 | 只看该作者
hsmy 发表于 2018-9-10 10:55
以BOOT.WIM的注册表为基础,按需添加一些注册表,达到“精简”注册表的目的。
直接精简Install的注册表并 ...

很不错。能否分享宝贵经验?
回复

使用道具 举报

10#
发表于 2018-9-11 16:00:37 | 只看该作者
如果精简是为了提升性能,实属可取;
但精简过度或万一误伤,则可能得不偿失;
如从体积考虑,除非搞极限精简版,实无太多必要;
六十几M的精简到三十几M,压缩后的差别仅小几兆而已;
回复

使用道具 举报

11#
发表于 2018-9-11 22:12:13 | 只看该作者
精简的注册表,不仅仅是体积,启动效率大大提高。
在不失兼容性的同时大大减小体积及减少启动时间,做到极致是完全可能的
回复

使用道具 举报

12#
发表于 2019-9-10 15:03:31 | 只看该作者
        楼主Windows_Air分享的是技术帖子,感谢!
回复

使用道具 举报

13#
发表于 2019-9-10 20:40:40 | 只看该作者
对于固定建议删除的,有工具就好了。
回复

使用道具 举报

14#
发表于 2023-1-7 13:16:05 | 只看该作者
赞一个
回复

使用道具 举报

15#
发表于 2024-2-1 14:18:57 | 只看该作者
有PE适用的傻瓜式注册表精简工具,那就好了
回复

使用道具 举报

16#
发表于 2024-2-1 14:32:28 | 只看该作者
好!
回复

使用道具 举报

17#
发表于 2024-2-1 14:50:48 | 只看该作者
感谢分享宝贵经验!
回复

使用道具 举报

18#
发表于 2024-2-1 16:03:16 | 只看该作者
谢谢分享,好经验
回复

使用道具 举报

19#
发表于 2024-2-1 16:09:29 | 只看该作者
好人一生平安,火钳刘明
回复

使用道具 举报

20#
发表于 2024-2-1 16:12:12 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
发表于 2024-4-16 21:56:34 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 10:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表