ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 41939|回复: 69

[讨论] [求破解]:VBA工程不可查看

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-12 14:03 | 显示全部楼层 |阅读模式
VBA代码作为知识产权的重要内容,越来越受到高度重视。但VBA工程的保护相对而言是比较脆弱的。
我这儿有一份文件,是通过加密技术将VBA工程锁定为不可查看,全“程”含一个标准模块和三个过程约75行代码,作为测试文档,求破解。
VBA工程保护密码为"shourou".
如果您对此感兴趣,欢迎破解!
注意:应能完整破解该工程,即还原该VBA工程,而非仅仅读取或者查看到其中的过程名称或者模块名称。
VBALocked.zip (8.33 KB, 下载次数: 1419)

TA的精华主题

TA的得分主题

发表于 2015-7-12 15:25 | 显示全部楼层
你是要求把vba里的代码都暴露出来?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-12 16:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
coby001 发表于 2015-7-12 15:25
你是要求把vba里的代码都暴露出来?

是的,应为还原VBA代码。本身是测试的小代码,无所谓的。意在看看这种方式的工程不可查看,是否牢固可靠。

TA的精华主题

TA的得分主题

发表于 2015-7-12 18:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-7-12 21:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2015-7-12 22:04 编辑

代码还是能dump出来的

Module:       ----------------------------------- mdlVBA -----------------------------------

Attribute VB_Name = "mdlVBA"
Option Explicit    ''''显式变量声明
Option Private Module    ''''外部工程禁用

Public Const gstrUSER_MSG_TITLE As String = "ExcelHome.Net"

Private Function FieldsExists(intWsIndex As Integer, Optional blnDisplayAlerts As Boolean = True) As Boolean
''''功能:检查指定工作表的字段名称与内置字段名称是否匹配
''''参数:intWsIndex:=工作表索引;blnDisplayAlerts:=不匹配时是否弹出警告对话框
    Dim Ws As Excel.Worksheet
    Dim astrFieldNames() As String
    Dim vntHeader As Variant
    Dim I As Integer
    Dim intColumnSize As Integer
    On Error GoTo ErrorHandler
    Select Case intWsIndex
    Case 1
        Set Ws = Sheet1
        intColumnSize = 10    ''''字段数量
        ReDim astrFieldNames(1 To intColumnSize)
        astrFieldNames(1) = "OfficeID"
        astrFieldNames(2) = "OfficeName"
        astrFieldNames(3) = "Region"
        astrFieldNames(4) = "Province"
        astrFieldNames(5) = "City"
        astrFieldNames(6) = "Address"
        astrFieldNames(7) = "StartData"
        astrFieldNames(8) = "ExpiryData"
        astrFieldNames(9) = "OfficeArea"
        astrFieldNames(10) = "Reviser"
    End Select
    vntHeader = Ws.Cells(1, 1).Resize(1, intColumnSize).Value    ''''标题行
    For I = 1 To intColumnSize
        If Not StrComp(vntHeader(1, I), astrFieldNames(I), vbTextCompare) = 0 Then Exit For
    Next
    If I > intColumnSize Then
        FieldsExists = True
    Else
        If blnDisplayAlerts = True Then
            MsgBox Ws.Name & Chr$(34) & vntHeader(1, I) & Chr$(34) & "与标准字段名" & Chr$(34) & astrFieldNames(I) & Chr$(34) & "不匹配。", vbExclamation, gstrUSER_MSG_TITLE
        End If
    End If
    On Error GoTo 0
    Exit Function
ErrorHandler:
    If ExcelHomeErrorHandler("Private Function FieldsExists") = True Then Resume Next
End Function

Public Function FileExists(strFileName As String) As Boolean
''''功能:判断文件或者文件夹是否存在
''''参数:strFileName:=待考查的文件或者文件夹的完整路径
    FileExists = (Len(Dir(strFileName, vbDirectory)) > 0)
End Function

Public Function ExcelHomeErrorHandler(strProcName As String) As Boolean
''''功能:错误处理程序
''''参数:strProcName:=出错的过程名称
    Dim strErrMessage As String
    strErrMessage = "程序运行在" & Chr$(34) & strProcName & Chr$(34) & "过程时发生错误。" & vbCrLf & _
                    "错误时间:" & Now & vbCrLf & _
                    "错误代号:" & Err.Number & vbCrLf & _
                    "错误原因:" & Err.Description
    Err.Clear    ''''清除错误
    If MsgBox(strErrMessage & vbCrLf & "是否继续?", vbExclamation + vbYesNo, gstrUSER_MSG_TITLE) = vbYes Then
        ExcelHomeErrorHandler = True
    Else
        With Application
            .StatusBar = False    ''''清空状态栏
            .DisplayAlerts = True    ''''恢复警告对话框
            .EnableEvents = True    ''''恢复事件
            .ScreenUpdating = True    ''''恢复屏幕更新
        End With
        ExcelHomeErrorHandler = False
    End If
End Function

TA的精华主题

TA的得分主题

发表于 2015-7-12 21:57 | 显示全部楼层
liucqa 发表于 2015-7-12 21:47
代码还是能dump出来的

Module:       ----------------------------------- mdlVBA ----------------- ...

这样的破解不彻底(也不知算不算破解了),点击其中的内容时显示不了,不知为何。。。。。。

TA的精华主题

TA的得分主题

发表于 2015-7-12 22:11 | 显示全部楼层
本帖最后由 liucqa 于 2015-7-12 22:22 编辑
amesman 发表于 2015-7-12 21:57
这样的破解不彻底(也不知算不算破解了),点击其中的内容时显示不了,不知为何。。。。。。

因为文件破坏了Project流,所以vbe里面显示的模块都是错误的。而实际代码在vba流里面,所以还是能取出来的。
恢复Project流比较麻烦,谁有闲心谁干吧



TA的精华主题

TA的得分主题

发表于 2015-7-12 22:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
技术帝在调皮了{:soso_e113:}

TA的精华主题

TA的得分主题

发表于 2015-7-12 22:29 | 显示全部楼层
守柔 发表于 2015-7-12 16:05
是的,应为还原VBA代码。本身是测试的小代码,无所谓的。意在看看这种方式的工程不可查看,是否牢固可靠 ...

你可以给个带窗体或者类模块的例子给我看看

TA的精华主题

TA的得分主题

发表于 2015-7-13 00:03 | 显示全部楼层
代码失效的?没有报错,就是结果不对。

Module= Locked 2015/7/12 13:50:11
Module= Unviewable+ 2.7.3.0 BETA
Module=(c) Ribbon Commander Subscriber
修改了模块名称?
似乎还加了干扰的?

个人看法:要让代码起作用,就必须要excel能读取,既然excel能读取,那如果知道excel是怎么读取的,就可以自己写代码去读取了。
所谓工程不可查看,是否只是因为破坏了文件的结构,导致VB编辑器无法正常读出而已。
就好比:
我告诉你我家的地址是XXX小区XXX号楼XXX门牌号,你就能直接找到我家。
但是现在我不告诉你了,你自然无法直接找到我的家,但是我的家还是在那里没有改变,你要是在小区里一栋栋楼一家家的找,最终还是能找到我家。
所以我觉得这类让工程不可查看的做法本质上并没有区别。获取其中代码的方法应该也差不多,只是说要完全还原可能会因修改的方法不同而难易成都有所不同。但是提取到代码,其他结构性的东西还不还原也就没有什么意义了吧。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-21 09:14 , Processed in 0.043166 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表