关于VSTO 加载项的破解

关于VSTO 加载项的破解
http://www.cnblogs.com/Charltsing/archive/2013/05/22/VSTOCrack.html     , 转载请声明  charltsing@gmail.com  或 liucq@163.com,


大家都知道,.net程序最大的问题是源代码不能保密,vsto开发的程序,自然存在这个问题。


(具体技术不方便公开 ,大家可以看这个样例及破解后的图片)
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=1014194&pid=6949224


下面俺就简单讲一下原理:

1、vsto的部署是通过程序集清单文件(manifest)来进行的,在msdn上可以找到相关的文章。
http://msdn.microsoft.com/zh-SG/library/bb757477%28v=vs.90%29.aspx
程序集的清单均执行以下功能:
    枚举构成该程序集的文件。
    控制对该程序集的类型和资源的引用如何映射到包含其声明和实现的文件。
    枚举该程序集所依赖的其他程序集。
    在程序集的使用者和程序集的实现详细信息的使用者之间提供一定程度的间接性。
    呈现程序集自述。

程序集名称、版本号、区域性和强名称信息构成了程序集的标识,vsto正是通过这个程序集清单文件来识别vsto程序的合法性的。

程序集清单文件替代的以前的dll注册,避免了不同版本之间的冲突。但是,由于程序集清单文件是个文本文件,造成手工替换相关信息成为可能。

2、vsto的合法性检验
普通的vsto程序合法性检验是通过强名称进行的,如果你在开发程序的时候,给你的程序指定的snk,那么这个强名称就会成为识别程序合法性的依据。
强名称签名是在.NET Framework的一个标识结构标识的程序集。            
它通常用于验证从已传递的数据完整性的公钥数字签名(签名者)以使收件人(满足)。  此签名用作一个唯一标识为引用的程序集并确保程序集不是明确。  程序集签名作为生成过程的一部分然后验证了何时加载。  
强名称签名帮助防止恶意用户篡改程序集然后重新签名程序集与原始签名者的键。            
但是,强名称密钥不包含有关出版商的任何可靠信息,也不包含一个证书层次结构。强名称签名不保证对程序集进行签名或指示人员的可信度该用户是否为键的合法所有者;它仅指示键的所有者签名的程序集。  因此,建议不要使用强名称签名为安全验证程序。信任第三方代码。  
Microsoft Authenticode是推荐的使用方式验证代码。

 
      
创建强名称程序集,看这个链接
http://msdn.microsoft.com/zh-cn/library/vstudio/xwb8f617.aspx


3、由于强名称不具备第三方检验的能力,所以更换强名称就可以突破vsto程序的安全性检查(在没有数字签名的情况下)


更换强名称破解vsto程序的步骤:
1、反编译并修改你要破解的程序il代码,并保存成一个新文件
2、创建一个强名称签名,即snk文件
3、给新文件更换强名称
4、在.manifest文件和.vsto文件中将原来的强名称替换成新的强名称


具体技术不做详细阐述。涉及到的知识包括:反编译、il代码、强名称重签、vsto的加载过程



如果要保证你的程序不被非法破解,建议采用第三方的数字证书和强名称代码签名,并在你的代码中对此做检验,具体技术比较复杂。

ClickOnce安全和部署
http://msdn.microsoft.com/zh-cn/library/vstudio/t71a733d.aspx


下面这个链接介绍了数字证书的知识
http://msdn.microsoft.com/zh-cn/library/vstudio/ms172240%28v=vs.100%29.aspx
“Authenticode”是一种 Microsoft 技术,该技术使用行业标准的加密技术,采用数字证书对应用程序代码进行签名,数字证书用于验证应用程序发行者的真实性。  通过对应用程序部署使用 Authenticode,ClickOnce 可降低特洛伊木马程序入侵的风险。特洛伊木马程序是一种病毒或其他有害程序,恶意第三方将其伪装为来自已确认且可信任的源的合法程序。  用数字证书为 ClickOnce 部署签名是一个可选步骤,用于验证是否未篡改程序集和文件。

posted on 2013-05-22 23:11 Charltsing 阅读(...) 评论(...) 编辑 收藏

导航