问题描述
HelpViewer2.2在安装文档时,提示:Error: .cab未经Microsoft签名;
问题原因
CAB文件上的证书由Microsoft证书签名,但是证书链到Microsoft Root CA时,对帮助文档强制进行驱动级安全认证变得无效;
解决办法
破解Microsoft.VisualStudio.Help.dll中的代码,并重新编译保存,替换原来的DLL;
工具准备
a、.NET Reflector 8.5;
b、Reflexil插件:【https://github.com/sailro/Reflexil/releases】;下载:【Reflexil.for.Reflector.2.7.AIO.bin.zip】
插件安装
1、打开.NET Reflecto;选择【Tools】->【Add-Ins】;
2、在【Add-Ins】界面点击右下角的【+】,选择【Reflexil.for.Reflector.2.7.AIO.dll】插件DLL;
3、点击【Close】;
4、验证安装成功否:.NET Reflecto软件的【Tools】下有【Reflexil】菜单;
破解步骤
1、在.NET Reflecto软件中点击【Tools】->【Reflexil】插件;
2、点击软件的【File】->【Open Assembly】,选择HelpViewer2.2目录下的【Microsoft.VisualStudio.Help.dll】;
3、在软件的【左侧栏】中,选择【Microsoft.VisualStudio.Help.dll】,并在【左侧栏】上面的【搜索栏】中输入【VerifyMicrosoftChain】;
4、在【右侧】的下面窗口【Sebastien Lebreton's Reflexil v2.7(这是Reflexil插件的窗口)】中的底部,找到如下代码:
ldc.i4.1 ret ldc.i4.0 ret
上面4行中的前2行代码代表:返回失败;上面4行中的后2行代码代表:返回成功;
所以要保证该函数的成功,则需要将【ldc.i4.1】修改为【ldc.i4.0】或者将前2行代码修改为2个【nop】
5、这里修改为2个nop;
6、第1个修改上面4行代码中的第1行代码;右键【ldc.i4.1】,在弹出的菜单中,选择【Replace with NOP】
7、第2个修改上面4行代码中的第2行代码;右键【ret】,在弹出的菜单中,选择【Replace with NOP】
8、在【左侧栏】右键【Microsoft.VisualStudio.Help.dll】,选择其下的【Reflexil v2.7】,再选择【Save as】,保存该DLL;
9、然后用该DLL放入【HelpViewer2.2】目录下,备份原始的【Microsoft.VisualStudio.Help.dll】文件,然后用修改后的DLL改名为【Microsoft.VisualStudio.Help.dll】;
10、打开HelpViewer2.2则直接不会再出现【Error: .cab未经Microsoft签名】