3

我正在用 C# 重写旧的访问/VBA 应用程序。虽然我作为 VBA 程序员受到限制,但我的印象是代码被最低限度地编译并几乎作为脚本运行?显然没有安全性/VBA,您只需点击alt+f11即可获取源代码有没有反编译/获取此代码的好方法?

所以我尝试了这个: http: //forums.databasejournal.com/showthread.php?t=34222

这似乎是关于如何反编译.mdb文件。

然而,程序很快就重新编译了自己——或者至少说它在左下角的状态栏中重新编译了自己。有任何想法吗?

4

4 回答 4

7

以下是一些建议(其中一些我从上面的评论中重复):

  • Alt-F11 不是我打开 VBE 的常用方法,因为我通常想进入即时窗口。请改用 Ctrl-G。

  • 如果 Alt-F11 和 Ctrl-G 都无法打开 VBE,则可能是数据库的 AllowBypassKey 属性已更改为 False。要获取更改此设置的代码,请在 Access 帮助文件中搜索 AllowBypassKey(在 VBE 中,从帮助菜单中搜索“AllowBypassKey”)。但是,如果 AllowBypassKey 已关闭,您将无法在尝试调查的数据库中运行代码,因此您可以运行以下代码:

//

  On Error GoTo Change_Err
    Dim db As DAO.Database
    Dim prp As Variant
    Const conPropNotFoundError = 3270

    Set db = DBEngine.OpenDatabase("C:\Databases\MyDatabase.mdb")
    db.Properties("AllowBypassProperty") = True

  exitRoutine:
    If Not (db Is Nothing) Then
       db.Close
       Set db = Nothing
    End If
    Exit Sub

  errHandler:
    If Err = conPropNotFoundError Then    ' Property not found.
       ' do nothing and exit
       Resume exitRoutine
    End If

然后您应该能够在按住 SHIFT 键时打开数据库(这会绕过任何已定义的启动例程,这可能会关闭对 VBE 的访问)。

  • 如果文件是 MDE,则没有源代码。您可以通过检查此属性来确定它是否是 MDE:

    ?CurrentDB.Properties("MDE")

如果它是 MDE(文件可以有任何扩展名),这将返回“T”。如果它不是 MDE,则会抛出错误(因为该属性不存在)。

  • 其他要检查的事情可能是有多少模块。如果您打开了数据库并且可以进入即时窗口 (Ctrl-G),那么这将告诉您是否有任何模块:

//

  ?CurrentProject.AllModules.Count
  • 您还可以通过在 VBE (F2) 中打开对象浏览器并在顶部的下拉列表中选择项目名称来查看数据库中的内容(默认情况下会显示“”

  • 最后,您可能认为它可以受到 Jet ULS 的保护,但从 Access 2000 开始,这不太可能,因为可用的 VBA 项目只有密码(即,Jet ULS 不再涵盖它) . 我希望如果它受密码保护,系统会提示您输入密码,所以您已经知道了。

于 2011-07-20T22:31:46.760 回答
3

如果它是一个.mde你不走运。您需要获取.mdb包含已编译的源 VBA 代码以创建.mde

于 2011-07-20T01:38:15.620 回答
1
  • 如何查看源代码(.mdb 文件)
    1. 选择文件
    2. 按住“shift”键
    3. 然后双击文件而不释放“shift”键
于 2017-09-15T13:24:42.797 回答
0
  1. 导航到计算机上的程序文件夹。

  2. 打开 MS Office 文件夹

  3. 导航到 MSAccess.exe 并为其创建快捷方式。

  4. 将快捷方式移动到数据库所在的位置(让生活更轻松,您需要为每个数据库执行此操作以进行反编译)。

  5. (可选)将快捷方式重命名为“我的数据库的反编译器,其名称为....”,这样您就知道打开它会吹走您的编译代码

  6. 右键单击快捷方式以查看其属性。在快捷方式的属性对话框的目标字段中,您将看到类似“C:\Program Files\Microsoft Office\Office\MSACCESS.EXE”的内容

  7. 在目标字段中,向右箭头到路径名的末尾,键入一个空格,然后在引号中键入(或粘贴)要反编译的 MS Access 文件位置的完整路径名(最简单的方法是从文件所在窗口上的地址栏,如果您显示了地址栏)。

  8. 仍然在 Target 字段中,输入一个空格,然后不带引号,输入 /decompile

  9. 单击确定接受更改并关闭对话框。

  10. 按住 Shift 键并按住它。

  11. 动动你的耳朵

  12. 双击快捷方式。

  13. 转到数据库中的任何模块。

于 2011-07-20T17:37:51.807 回答