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

问题:
在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
下载链接: https://pan.baidu.com/s/1tO3O3kcbLyou5_6eI7bkGQ 提取码: kfiw 复制这段内容后打开百度网盘手机App,操作更方便哦

打开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)查看器选项,重置:
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值