可以看到流模块中反编译的源代码被替换成了伪造的 VBA 代码,下面使用工具进行分析 OleTools ? Olevba 识别出来了所有的宏并给出 VBA stomping 警告 Oledump ?...Pcodedmp 精准的识别了真正的宏代码,忽略了伪造的 VBA 通过 VBA stomping 原理可知,真正的代码存为了 P-Code,所以 olevba 输出的结果中反编译形式的 VBA 即为真正的代码...可以通过 Olevba 判断是否使用了 VBA stomping,如果是则直接使用 Pcodedmp 获取 P-Code 代码。...静态看即可 如果想要调试,那么需要使用对应版本的 Office,我这里通过 _VBA_PROJECT 中 Version 结构总结了一下 32 位下的版本号,64 位研究方法一样。...理论上该过程是不可逆的,但通过实验发现将相关属性改为有效值并模拟密码保护即可解除锁定 ID = {00000000-0000-0000-0000-000000000000}CMG = CAC866BE34C234C230C630C6
VBA密码破解,在一般地插件里,都是收费方式提供,Excel催化剂,全功能免费,最新推出VBA解密功能,还要公开核心源代码,这免费程度够诚意了么?...密码相关的历史推文: 第26波-正确的Excel密码管理之道 第123波-批量创建或取消Excel文件打开密码 Excel催化剂开源第18波-工作表、工作薄保护破解 功能展示 使用方法很简单,点击菜单后...因本破解方法是使用07版格式的文件破解方法,故遇到03版本格式程序自动打开后转为07版本格式,再进行破解,破解后的文件名也是07版本的,但07版本兼容性更好,破解也只是为了看源代码,不影响使用。...VBA工程密码破解分享,同步推荐两款VBA代码助手工具 核心代码为:445042改为444278 var binPath = Path.Combine(tmpDir, @"xl\...在笔者未来有余力,可以给大家更多普及在.NET环境下的插件开发技术,特别是使用ExcelDNA框架的开发。
2007版本以上的Office文件,如果设置了打开密码,仍然是使用复合文档结构来存储的。...2007版本以上的Office文件,如果编写了VBA代码,在文件的压缩包里,会有个vbaProject.bin文件,也是使用复合文档结构来存储的。...解析复合文档,能够更加深入理解Excel的文件结构,虽然2007版本以上的Excel已经 换成了xml标记语言存储,但是VBA代码相关的vbaProject.bin文件还是使用了复合文档结构。...但是如果想要直接获取VBA代码,就只能通过解析文件结构获取,通过解析复合文档,解析出模块的数据流,再进一步进行解析就可以。...03 实现一些特殊功能 VBA工程密码破解 VBA模块隐藏 主要参考文章: http://club.excelhome.net/thread-227502-1-1.html
1、什么是VBA操作VBA: 前面的VBA意思是指VBA程序,后面的VBA是指VBA工程对象(代码和组织代码的模块、类等)。 也就是一段运行过程中的VBA程序,可以去操作VBA工程对象。...能被操作的东西显然就是一种对象,首先如果要使用VBA去操作VBA工程对象,先按如下设置: ? 勾选信任对VBA工程对象模型的访问,这时候就可以去使用VBA工程对象了。...2、VBA工程对象: 在F2对象浏览器中查看VBAProject: ? 每一个打开的Excel工作簿文件都有一个VBAProject,不管是有没有代码的。...这个窗口有打开的工作簿的名称(括号内的文件名),同时还有一个VBAProject名称,在没有设置的情况下默认名称都是VBAProject,右键打开VBAProject属性窗口,可以进行设置: ?...工程对象和前面说过的Range、Worksheet等对象都一样,都是在VBA里做好了的东西,作为使用者只需要知道如何去使用对象就可以,无非还是定义对象、使用对象的方法、属性等。
什么是VBAProject 在每一个带有VBA代码的文件里,都会有一个VBAProject,在VBA编辑器的工程资源窗口可以看到: ?...每个文件都有一个叫做VBAProject(默认名称,可以修改)的东西。 我们在编写VBA代码的时候,就是通过这里来点击添加模块、编写代码的。...01 2007版本结构 使用7z软件打开一个2007版本以上的Excel,可以看到有一个vbaProject.bin的文件,这里面就是保存了VBA相关的一些信息: ?...02 03版本结构 同样使用7z软件打开一个.xls后缀的03版本带VBA代码的Excel: 0 Root Entry 1 Root Entry\Workbook...所以,VBAProject就是一个在Excel文件中的数据流,这个数据流记录了VBA相关的信息。 获取VBAProject结构可以看VBA解析复合文档相关文章。
如果你收到过一些这样的Excel文件,文件里有VBA代码,实现了很好的功能,可是作者却对VBA工程进行了加密,你可能会非常希望查看到里面的VBA代码。...会想到的最直接的办法当然就是要到密码,可这个一般做不到,这个时候有什么办法能够查看VBA代码呢? 前面介绍的提取模块代码可以做到,这里再介绍一种直接清除密码的功能。...工程是否设置了密码,信息就保存在了这个数据流中,只需要把下面的内容清除掉就可以了: CMG="A4A64B844D9151915191519151" DPB="B5B75AB77AC97BC97BC9"...所以,知道了这样能够清除密码,我们要做的只是改写一个复合文档的数据流就可以了: '清除vba工程密码 '清除CMG=" | DPB=" | GC=" '清除VBA工程密码 'Return 返回出错信息...End If End Function 另外再分享一种可以直接查看带密码的VBAProject的方法: '复制内存 Private Declare Sub MoveMemory Lib "kernel32
文章背景: 在工作中,有时候需要给工作表的的内容设置保护,避免数据被误修改,同时又希望可以通过宏命令,实现数据处理的自动化。...此时,我们可以在宏命令中添加相应的代码:在程序执行前,解除密码;在程序结束后,设置密码。...参数的具体使用见文末的参考资料[5]。 Protect方法的所有参数都是可选的;Password参数可以不提供,表示没有设置密码保护excel工作表。...其余的部分参数对应的是“保护工作表”对话框中显示的“允许此工作表的所有用户进行的选项”,如下图所示: 值得一提的是,在保护工作表之前,需要对受保护的单元格区域设置锁定。...在数据处理前,解除密码保护;数据处理结束之后,再设置密码保护。
里使用,自然需要做进一步的处理。...使用VBAProject管理类代码 我个人是习惯使用VBAProject来管理代码的,新建一个.xlam加载宏文件,插入类模块,命名CADO,设置Instancing=2,添加引用: Microsoft...添加这个引用的目的是为了使用前期绑定,方便输代码,因为使用了VBAProject来管理代码,以后其他文件需要操作数据库都添加引用这个文件即可,不会再需要添加引用ADO。...ADODB.Connection '用来返回错误,通过GetErr函数 Private StrErr As String 然后输入类的初始、销毁代码,主要就是声明ADODB.Connection以及关闭数据库...,在外部只需要传入对应的文件路径或者是使用udl文件描述的连接语句都可以。
模块的隐藏看起来好像好高深,其实原理和前面的清除VBAProject工程密码的原理是一样的,只需要改写PROJECT数据流。...不过需要注意的是,类模块不能隐藏,另外还必需要有一个可见的模块,实现代码: '隐藏某个模块:在VBA工程窗口无法查看 'ModuleName 模块的名称 'Return 返回出错信息 Function...(strSrc, "Module=" & ModuleName & vbNewLine, "") b = VBA.StrConv(strSrc, vbFromUnicode)...ret = cf.ReWriteStream(PrePath & "PROJECT", b) If VBA.Len(ret) Then HideModule = ret...Exit Function End If End Function '取消隐藏某个模块 'ModuleName 模块的名称 'Return 返回出错信息 Function
VBA代码是随文件一起保存的,个人一直以来,使用都是在某一个文件里来编辑代码。 随着VBA使用的增多,必然会积累一些常用的代码,甚至在网上也会找到一些功能强大的类。...每次使用也都是复制到某个文件里使用,这些代码在自己电脑里就存在许多个副本。使用过程中难免会发现一些问题,对代码进行一些小的修改,一些类也可能增加一些实用的方法、函数。...但是修改了其中一个副本,电脑里其他使用了的文件没法一同更改。久而久之,各个副本中就会存在不同时间里修改过的代码,想把他们放一起会发现变得非常困难。...将一些常用的代码保存在这个加载宏中,需要对外公开的用Public修饰,也可以省略修饰。...这样只要在需要使用代码的地方,加上vbapTest.就可以调用函数或者方法了。 类的使用 用上述方法在碰到类的时候,会发现根本无法定义、创建类,类的使用方法需要再做1点工作,有3种方法: 1.
不过通常创建新工作簿是分配一个对象变量的方式来创建,这样更容易对新工作簿进行设置。下面我们通过示例来演示。...(可以用于区别新建的文件的名称) 将workbooks.add方法生成的新工作簿赋值给了对象变量wb1,将wb1的文件名更改为VBA示例文件" & i & ".xlsx。...(此处用了with语句,可以方便增加其他属性的更改。) 二、工作簿对象open方法 在使用EXCLE文件时,在VBA代码中打开工作簿是通过workbooks集合的open方法。...Sub test() Workbooks.Open Filename:="D:\VBA示例.xlsm" End Sub 代码中filename参数后用 := ,加excel完整路径,路径需要用英文引号。...4、参数Password可选,指定打开受保护工作簿时需要的密码。如果忽略该参数但是工作簿受密码保护,则会提示用户输入密码。 其他如果需要用到可以参考excel帮助文件。
通过前面的文章能够知道,每一个模块的代码,在VBAProject中也就是一个数据流,这个数据流经过了run length encoding的算法进行压缩。...前面介绍的是自己使用VBA代码来解压缩,其实也有现成的API RtlDecompressBuffer可以使用,具体用法可以网上找找。 所以,只要能找到模块的数据流,然后进行解压缩就可以还原模块的代码。...模块的数据流也就是在复合文档中读取一个数据流,另外要注意的是,这样读取出来的模块数据流并不都是我们写的VBA代码,还需要结合解析dir流时候得到的模块信息进行截取,再进行解压缩: '读取某个模块的代码...Exit Function End If 'vba代码只是后面的一部分 Dim bCode() As Byte Dim moduleIndex...中没有找到模块[" & ModuleName & "]" Exit Function End If Dim i As Long, j As Long '跳过前面不需要的部分
在利用VBAProject来共用VBA代码里介绍了使用VBAProject管理代码的方法,但是有一个不方便的地方,如果想把一个做好的功能(引用了一些其他工程代码)发送给其他人使用,就需要把所引用的工程代码复制到一起...在VBA操作VBA——VBA工程对象中介绍过,VBA是可以去操作VBA工程对象的,所以,只要能够正确找到某个文件所直接引用以及间接引用的工程,把所引用的工程代码复制就可以。...程序主要的逻辑就是递归的查找某个VBProject所引用的工程,将工程对象的FullPath记录到一个字典中,并用bRemove记录是否是直接引用的,只有直接引用的工程在复制完代码后才需要断开引用。...找到所有引用的工程之后,将每个工程的代码复制过来就可以了: Private Type RefInfo r As Reference bRemove As Boolean '是否需要断开引用...'声明部分 str = c.CodeModule.Lines(1 + 1, c.CodeModule.CountOfDeclarationLines) '不需要第一行的Option
编辑Ribbon界面: 创建一个下拉菜单,这个菜单能够将MyVBA加载宏同路径下面所有后缀为.xlsm和.xlam的文件都添加为子菜单,点击自动打开相应的宏文件,Ribbon菜单代码: 使用的是动态dynamicMenu,通过回调函数dymOpenAddins_getContent查找同一文件夹下所有的宏文件,dymOpenAddins_getContent代码: Sub dymOpenAddins_getContent...VBA.Left$(fn, Len(fn) - 5) '生成Ribbon的xml代码 RetFiles(icount)...,个人创建了一个VBAProject文件夹专门存储这一类文件,把它当作包来管理,MyVBA加载宏需要通过工具-引用来使用这个文件,函数代码: Function ScanDir(str_dir As String...Set fso = Nothing Exit Function err_handle: ScanDir = -1 End Function 到此MyVBA加载宏创建完成,后续将不断添加具有功能的加载宏
实现的功能 01 Parse '解析VBAProject 'ir 一个实现了IReadWrite接口的类 'Return 返回出错信息 Function Parse(ir As...02 GetModuleInfo '类的属性:获取模块信息 Property Get GetModuleInfo() As ModuleInfo() 返回结构体: Public Type ModuleInfo...03 GetModuleCode '读取某个模块的代码 'ModuleName 模块的名称 'StrCode 返回模块的代码 'Return 返回出错信息 Function GetModuleCode...04 HideModule、UnHideModule '隐藏某个模块:在VBA工程窗口无法查看 'ModuleName 模块的名称 'Return 返回出错信息 Function HideModule...04 UnProtectProject '清除VBA工程密码' Return 返回出错信息 Function UnProtectProject() As String ?
经过边看边猜的漫长过程,也蒙出来点东西,由于用VBA代码太难实现了,所以一直也没有写,最近想着用go语言做个工具: 1 Office文件加密方式 根据[MS-OFFCRYPTO] - v20171212...2 使用VBA测试密码 因为VBA里提供了Workbooks.Open方法,是允许带密码参数的,所以使用这个也可以做个简单的密码测试工具: Set wk = Workbooks.Open(Filename...工具左边是个树形目录,展示的是复合文档的结构,Office文件加密后都是保存为复合文档的,后续看情况把复合文档的一些解析功能也加进来,比如VBAProject里介绍的VBA模块代码的提取、模块的隐藏等。...工具获取密码的方式目前提供了2种: 一种是输入元素进行排列组合获取:元素按空格隔开,可以是多个字符的元素,比如[0 1 aa xiong 2],这表示5个元素;排列组合选择的数量可以输入多个,比如可能是元素中的...3个或者4个的排列组合,输入[3 4] 一种是直接选择保存了密码的文本文件按行读取 工具使用的是go语言编写,UI使用的是fyne,理论上应该是可以跨平台,但我没有其他平台电脑,没做相关测试,如果有其他平台需要的可以联系
学习使用VBA来处理Excel的问题,自然是为了简化工作。但是随着自己VBA使用的增多,代码分散在各个Excel文件中,非常的散乱。管理好自己的代码是提高代码复用率的关键,也能提高开发的效率。...数据与代码分离 Excel本身就是数据和代码混在一起的,这确实提供了极大的便利,但是随着VBA使用的深入,会逐渐发现这种便利最终也会带来许多的麻烦: 同一种功能的程序在多个Excel VBA中存在...库 使用加载宏来作为库进行代码管理: 一些功能性的东西,比如一些常用的类、函数等,在编写VBA代码过程中会经常使用到,但是本身不是一个完整的可以完成某个具体任务的,我会放在一个加载宏中,固定保存在电脑的某个位置...然后在具体实现某个任务的时候,如果需要用到,使用工具-引用的方式去调用,具体可以看利用VBAProject来共用VBA代码里介绍的方法。...,添加到下拉菜单下面,在真正需要用到时候,通过下拉菜单打开对应的加载宏,运行程序,使用完成后再关闭。
VBA代码编辑器在哪儿 在你刚安装好Excel时,其界面通常如下图1所示,Excel默认没有显示“开发工具”选项卡。 图1 为了方便编写VBA代码,我们需要调出“开发工具”选项卡。...图3 看看VBA代码编辑器 单击Excel功能区“开发工具”选项卡“代码”组中的“VisualBasic”,或者直接使用Alt+F11组合键,都可以打开VBA代码编辑器。如下图4所示。...其中VBAProject是根节点,默认带有一个Excel对象,其中包含代表当前工作簿的ThisWorkbook对象模块和工作表Sheet1对象模块。...图5 从中我们对Excel VBA中非常重要的概念进行初步理解:工作簿是一个可以引用的对象,每个工作表也是一个可以引用的对象。...图12 保存包含VBA代码的工作簿 在保存含有VBA代码的工作簿时,我们需要使用xlsm扩展名,如下图13所示,否则Excel会自动删除代码。
开发人员会使用该库来添加“导出为Excel”或“另存为电子表格”的功能,简单来说,可用来生成多种电子表格格式的文件,甚至支持Excel 2019。...Epic Manchego生成的OOXML电子表格文件缺少一部分已编译的VBA代码,该代码专门用于在Microsoft专有Office软件中编译的Excel文档。...使用EPPlus创建VBA项目时,它不包含已编译的VBA代码。EPPlus没有创建编译代码的方法:创建编译VBA代码的算法是Microsoft专有的。...杀毒软件则是通过查找VBA代码这一部分来实现恶意Excel文件检测功能,由此可以解释为什么Epic Manchego生成的恶意Excel文件检测率低于其他恶意Excel文件了。...已编译的VBA代码可以存储攻击者的恶意代码。比如Epic Manchego以自定义VBA代码格式存储了他们的恶意代码,该格式也受到密码保护,以防止安全系统和研究人员分析其内容。 ?
网上所宣称的OFFICE文档密码保护不安全,随时可被破解,究竟是怎样一回事?Excel文档有各式各样的密码,不同密码的使用场景是什么?...对Excel进行模板设定、二次宏代码开发最多的也是Excel文件。...VBA工程密码 此密码用于保护宏代码不被看见,从而防止代码被泄漏,开发工作成果被窃取。...工作表保护、工作薄保护只需设置了保护功能,至于密码设定以否,关系不大 Excel二次开发,若对代码需要保护,尽量用VSTO的开发环境 VBA开发代码保护性弱,相信每个开发者心里都知道的,设置一些密码只是防止下小白用户...VSTO开发,稍好一些,可以挡住大部分的VBA开发者,当然专业程序猿也是秒破,通过反编译可以得到代码。
领取专属 10元无门槛券
手把手带您无忧上云