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

Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性,比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflector插件,本人找取了两个应用范围很广,并且广受好评的插件:Reflector.FileDisassembler和Reflector.FileGenerator和Reflector进行了整合,放在了一个压缩包中,大家可以直接解压缩后就开始使用,其中FileGenerator在网上没有现成dll,本人编译后将其取出,放在了压缩包中,一直在苦苦找寻的朋友这次可以拿来直接用了:) 本压缩包中Reflector.exe已经升级为最新的5.0版本,具体的使用方法不多说了,只简单介绍一下本压缩包的使用步骤: 先下载本压缩包并解压缩,运行其中的Reflector.exe(主程序),初次运行会弹出错误提示对话框,因为引用的两个插件DLL是按照我本地实际情况配置的,所以你还需要根据你的实际情况来从新配置一下,方法很简单,我们拿引用FileGenerator.dll来做一个范例, 首先介绍一下Filegenerator,FileGenerator插件的作用是:根据dll文件,把里面的源文件导出成文件,导出来的文件除了没有注释,变量名也变了,其它的可谓是没有差别。对于一些比较好的控件,如果不是开源的,完全可以导出成文件,然后自己加上注释,少许修改,很好的利用起来。(不开源的dll,用起来也不放心啊) 具体的初始化设置方法:点击View->Add-Ins...,弹出一个窗口,然后点击Add->选择文件夹里面的:"FileGenerator.dll",点击close. 然后回到Reflector窗口,Tool->Generator File(s)... 右边就出现了插件的窗口,选中左边的dll文件,点击右边的导出文件,源代码就全部导出来了! 另一个插件Reflector.FileDisassembler.dll设置方法也和这个一样。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值