美文网首页Excel催化剂开源系列
Excel催化剂开源第18波-工作表、工作薄保护破解

Excel催化剂开源第18波-工作表、工作薄保护破解

作者: 1d0e4a6e400e | 来源:发表于2019-01-12 09:17 被阅读40次

在各大插件中,破解工作表、工作薄密码的功能比比皆是,此篇开源确实有些炒冷饭凑文章的嫌疑,但换个角度,当时笔者开发过程中,找寻相关的代码,也还是花上一些的时间在百度里找了好久,原因如下:
1.大部分能够找到的代码都是VBA的代码
这说明在Excel高级开发群体中,特别是VSTO、COM加载项开发群体中,还是守口如瓶的,仿佛越是高级的开发者,越对自己掌握的“核心”技术保密,希望Excel催化剂这一系列的开源文章对此风气有所好转(在专业程序员圈子里,人家可以越是大神,越是不断地造轮子造福后来者和初级者,并且任性地开源)。
2.VSTO开发的确还是很冷门,没有进入专业开发者的视野中
对于工作表密码破解这些,肯定是OFFICE开发者的专业领域,就算国内不开源,找国外,也没找到多少,所以此篇简单开源,还是有此必要性的。

代码实现

工作表保护破解

在微软官方文档中,看到工作表保护在Excel2013上得到增强,着实吓一跳,以为是旧的破解代码肯定会失效。没想到还是一如既往地正常破解,包括现在Excel365仍然能够成功。


官方文档说明

此段代码是改造VBA的代码,用Excel对象的方法成功破解,速度还是秒级的,能够想出这种破解代码的人真的够神,或者是作者自己埋的后门了,不然怎么这么多次版本更新都没修复的bug。

        public static void RemoveWorkSheetProtection()
        {
            Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;

            sheet.Protect(DrawingObjects: Office.MsoTriState.msoTrue, Contents: Office.MsoTriState.msoTrue, Scenarios: Office.MsoTriState.msoTrue, AllowFiltering: Office.MsoTriState.msoTrue, AllowUsingPivotTables: Office.MsoTriState.msoTrue);
            sheet.Protect(DrawingObjects: Office.MsoTriState.msoTrue, Contents: Office.MsoTriState.msoTrue, Scenarios: Office.MsoTriState.msoTrue, AllowFiltering: Office.MsoTriState.msoTrue, AllowUsingPivotTables: Office.MsoTriState.msoTrue);
            sheet.Protect(DrawingObjects: Office.MsoTriState.msoTrue, Contents: Office.MsoTriState.msoTrue, Scenarios: Office.MsoTriState.msoTrue, AllowFiltering: Office.MsoTriState.msoTrue, AllowUsingPivotTables: Office.MsoTriState.msoTrue);
            sheet.Protect(DrawingObjects: Office.MsoTriState.msoTrue, Contents: Office.MsoTriState.msoTrue, Scenarios: Office.MsoTriState.msoTrue, AllowFiltering: Office.MsoTriState.msoTrue, AllowUsingPivotTables: Office.MsoTriState.msoTrue);
            sheet.Unprotect();
        }

工作薄保护密码破解

工作薄保护密码破解,用百度上流传的VBA方式未能破解成功,印象中还有一个问题是不懂得如何改写回.Net的C#代码,看到的是一大坨的VBA代码,也看不懂。

接着用自己想到的方法实现了,直接操作xml文件,将其中的保护工作薄节点给删除它,此方法同理也适用于前面的工作表保护。

public static void RemoveWorkbookProctection()
        {
            if (Common.IsContineToRunQuery())
            {
                Excel.Workbook wkb = Common.ExcelApp.ActiveWorkbook;
                string actShtName = wkb.ActiveSheet.Name;
                string wkbOpenPwd = string.Empty;
                string wkbFullPath = wkb.FullName;

                if (Path.GetExtension(wkbFullPath).ToLower() == ".xls" || wkb.HasPassword)//当是xls时,转换成xlsx或xlsm
                {
                    if (wkb.HasVBProject)
                    {
                        wkbFullPath = Path.Combine(Path.GetDirectoryName(wkbFullPath), Path.GetFileNameWithoutExtension(wkbFullPath) + ".xlsm");
                        wkb.SaveAs(Filename: wkbFullPath, FileFormat: Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled);
                    }
                    else
                    {
                        wkbFullPath = Path.Combine(Path.GetDirectoryName(wkbFullPath), Path.GetFileNameWithoutExtension(wkbFullPath) + ".xlsx");
                        wkb.SaveAs(Filename: wkbFullPath, FileFormat: Excel.XlFileFormat.xlOpenXMLWorkbook);
                    }

                }

                wkb.Close();

                FileInfo fileInfo = new FileInfo(wkbFullPath);
                ExcelPackage package;

                using (package = new ExcelPackage(fileInfo))
                {
                    var workbook = package.Workbook;
                    var wkbXml = workbook.WorkbookXml;
                    var protectNode = wkbXml.GetElementsByTagName("workbookProtection")[0];
                    protectNode.ParentNode.RemoveChild(protectNode);
                    package.Save();
                };

                Excel.Workbook wkbReOpen = Common.ExcelApp.Workbooks.Open(Filename: wkbFullPath);
                wkbReOpen.Worksheets[actShtName].Activate();
            }
        }

同样地,派出了EPPLUS类库来直接访问xlsx的xml文档,这里同样用了很巧妙的方式,如果是xls文件非07版格式时,就将其保存为07版格式。而非像其他VBA方法那样只是遍历工作表复制到新的工作薄中,这样可能会引起原文档中有宏代码或其他自定义文档信息等不能同步带过去。

核心代码如下:

                using (package = new ExcelPackage(fileInfo))
                {
                    var workbook = package.Workbook;
                    var wkbXml = workbook.WorkbookXml;
                    var protectNode = wkbXml.GetElementsByTagName("workbookProtection")[0];
                    protectNode.ParentNode.RemoveChild(protectNode);
                    package.Save();
                };

结语

对广大Excel开发者来说,VBA的教程已经非常丰富了,但VSTO仍是十分欠缺,但其实也不完成是欠缺,只要合理使用搜索引擎和官方帮助文档,还是可以找到够用的知识点使用的。

此篇简单地实现广大开发者广为熟知的功能,代码换成了C#的形式,可在VSTO上实现此功能,希望此代码段在愿意学习、查找的人手中能被找到并复用起来。开源的态度Excel催化剂是极其拥护的,并以行动来证实了。

技术交流QQ群

QQ群名:Excel催化剂开源讨论群, QQ群号:788145319


Excel催化剂开源讨论群二维码

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系作者 公众号

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

技术交流QQ群

QQ群名:Excel催化剂开源讨论群, QQ群号:788145319


Excel催化剂开源讨论群二维码

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系作者 公众号

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

相关文章

网友评论

    本文标题:Excel催化剂开源第18波-工作表、工作薄保护破解

    本文链接:https://www.haomeiwen.com/subject/ijmarqtx.html