栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

教你使用 Reflector中的Reflexil插件反编译.NET,修复Help Viewer v2.0 - Error: .cab未经Microsoft签名

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

教你使用 Reflector中的Reflexil插件反编译.NET,修复Help Viewer v2.0 - Error: .cab未经Microsoft签名

教你使用 Reflector中的Reflexil插件反编译.NET,修复Help Viewer v2.0 - Error: Cab was not signed
    • 1. 下载.NET Reflecto并安装
    • 2. 下载并安装插件Reflexil
    • 3. 反编译并修改dll文件
    • 4. 保存并测试HelpViewer2.0的文档下载安装功能
    • 5. 补充:
      • 问题:当前页面的脚本发生错误 setUserPreferenceLang 未定义,是否要在此页面上继续运行?

问题:
在Microsoft帮助查看器的“添加和删除内容”选项卡中选择“书籍”后,您将不得不等待最多多GB才能下载,具体取决于您的选择。下载完成后,您可能会看到以下错误:

此外,每次重试下载过程(例如,在重新安装根证书或其他措施后)时,程序都不够智能,无法保留下载。它会删除它们。浪费了数千兆字节的下载时间,只是为了看到微软无法验证来自自己服务器的文件。顺便说一句,下载的CAB文件上的数字签名很好。它们都由Microsoft证书签名,该证书的链条一直有效,直到颁发Microsoft Root CA.Microsoft正在对帮助文件强制执行驱动程序级安全性,我个人认为这是矫枉过正。

如果你搜索一个解决方案,你会发现很多人在所有最近的Visual Studio版本(2015,2017和2019)中都遇到过这个错误。根据Microsoft的博客文章,此问题应该在2019年得到解决,但是许多人已经在这些相同的论坛上发帖说问题仍然存在。微软工程师一再回应说,他们无法在干净的机器上或Windows 10上重现该错误,并选择关闭该问题。

反编译的方式有很多种,其实最靠谱的还是IL反编译。
不过我下面要说的不是IL这种底层的代码反编译,而是Reflector中的Reflexil插件进行反编译。
也许有人会说Reflector不就是反编译了么,为什么还要用Reflexil这个插件? Reflector 仅仅是反编译出源码给你看,并不能在修改后编译回去。所以我们需要使用Reflexil这个插件进行反编译回去。

1. 下载.NET Reflecto并安装

随便百度一下Reflector,例如这里的华军软件园:
.NET Reflector 8.5.0.179 绿色中文版
https://www.onlinedown.net/soft/636085.htm

2. 下载并安装插件Reflexil

Reflexil_v1.6
打开Reflector,在工具栏依次点击 Tools -> Add-Ins… ,如下图所示:


点击加号+,如下图所示选择Reflexil插件的dll文件,该插件就安装上了:


然后点击Close ,此时程序的 Tools 栏目下已经有了 Reflexil 插件选项。

3. 反编译并修改dll文件

在Reflector工具栏中依次点击 Tools -> Reflexil 打开 Reflexil 的窗口,如下图所示:

然后点击File,Open Assembly,打开你要反编译的程序集:

如下图所示,打开Help.dll文件:

在左侧栏中选中该dll文件,在左侧上面搜索栏中输入VerifyMicrosoftChain:

在上图该函数的底部,可以看到返回值为1或0;滚动到 IL 操作码窗口的底部,我们看到最后 4 条指令是:

ldc.i4.1
ret
ldc.i4.0
ret

这组指令代表两个退出分支。要始终返回成功,您可以将第一条指令更改为“ldc.i4.0”(加载零),或者对前两条指令进行 NOP 输出,以便两条路径都下降到返回零分支,从而产生相同的效果。这将绕过烦人的错误并允许安装继续进行。

例如:可以直接在“ldc.i4.1”的那一栏进行点击右键选择 “Edit” 进行直接的编辑:

选择nop指令并点击点击Update按钮进行替换:

任何导致验证链无法找到Microsoft的Root CA的东西都被绕过了,并允许安装继续进行。

4. 保存并测试HelpViewer2.0的文档下载安装功能

最后一步操作,依次在Reflector项目中点击右键 -> 选择 Reflexil -> 选择 Save as…

保存即可,这样就完成了修改代码,编译成功;
需要注意一下的是,一些DLL拥有强名称,重新应用的时候可能会出现错误,这时需要在Save As的时候去除一下强名称就可以了。

运行看看:

更新成功!!

5. 补充: 问题:当前页面的脚本发生错误 setUserPreferenceLang 未定义,是否要在此页面上继续运行?

在HelpViewer打开一个目录内容时,或者搜索某一个函数双机打开时,会弹窗提示:当前页面的脚本发生错误 setUserPreferenceLang 未定义,是否要在此页面上继续运行?
解决:
(1)管理内容,随便找一个1M大小的文档,更新一下就可以正常:

(2)查看器选项,重置:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号