捕获 exe 和 mdb 之间的连接字符串

逆向工程 视窗 过程 嗅探 可执行程序
2021-06-12 12:08:41

我有一个从本地数据库文件读写的 exe 文件。我用Detect It Easy检查了这个文件,它显示这是一个mdb文件。

我可以使用 microsoft access 打开这个文件,并查看所有表,但是当我尝试查看某些表时,我发现我没有这样做的权限。

如果我理解正确,可执行文件需要mdb在初始化连接时向该文件发送一个包含用户和密码的连接字符串。真的吗?

如果是,我如何嗅探和观察这个连接字符串,因为它从进程发送到mdb

1个回答

您可以使用 API Monitor 工具或 Debugger 找到连接字符串。但是首先您需要知道您是否在查看基于 .NET 的可执行文件(即它是否加载了 clr.dll 或 mscorlib.dll)以及它如何访问数据库。要解决这个问题,您可以使用Process Monitor 之类的工具,并过滤Process Name 为 IncludeOperation 为 Load Image Include。从这里您可以看到使用了哪些运行时 DLL(即 .NET 或 MS Visual C 等)以及加载了哪些与数据库相关的 DLL,即 msjet40.dll。

经常找到连接字符串的通用方法是简单地 API 监视字符串 C 运行时函数。

例如

  1. 下载API 监视器
  2. 选择 Visual C++ 运行时库 -> 字符串操作 (CRT)
  3. 使用 API 监视器启动/附加到应用程序并查找连接字符串。

这也可以使用 WinDbg 等工具完成,并在 C 运行时函数上设置断点并转储参数。

例如,如果调用了 wscpy_s 函数,则 WinDbg 中如下所示的命令将在 64 位 EXE 中打印出 unicode 字符串:

0:000> bp MSVCR100!wcscpy_s ".printf \"msvcr100!wcscpy_s source='%mu' \",r8;!position;g"
bp MSVCR100!wcscpy_s ".printf \"msvcr100!wcscpy_s source='%mu' \",r8;!position;g"
Bp expression 'MSVCR100!wcscpy_s' could not be resolved, adding deferred bp
0:000> bp ucrtbase_clr0400!wcscpy_s ".printf \"ucrtbase_clr0400!wcscpy_s source='%mu' \",r8;!position;g"
bp ucrtbase_clr0400!wcscpy_s ".printf \"ucrtbase_clr0400!wcscpy_s source='%mu' \",r8;!position;g"
Bp expression 'ucrtbase_clr0400!wcscpy_s' could not be resolved, adding deferred bp
0:000> bp mscoreei!wcscpy_s ".printf \"ucrtbase_clr0400!wcscpy_s source='%mu' \",r8;!position;g"
bp mscoreei!wcscpy_s ".printf \"ucrtbase_clr0400!wcscpy_s source='%mu' \",r8;!position;g"
Bp expression 'mscoreei!wcscpy_s' could not be resolved, adding deferred bp
0:000> bp mscoree!wcscpy_s ".printf \"mscoree!wcscpy_s source='%mu' \",r8;!position;g"
bp mscoree!wcscpy_s ".printf \"mscoree!wcscpy_s source='%mu' \",r8;!position;g"
Bp expression 'mscoree!wcscpy_s' could not be resolved, adding deferred bp
0:000> bp msvcrt!wcscpy_s ".printf \"msvcrt!wcscpy_s source='%mu' \",r8;!position;g"
bp msvcrt!wcscpy_s ".printf \"msvcrt!wcscpy_s source='%mu' \",r8;!position;g"
0:000> bp ntdll!wcscpy_s ".printf \"ntdll!wcscpy_s source='%mu' \",r8;!position;g"
bp ntdll!wcscpy_s ".printf \"ntdll!wcscpy_s source='%mu' \",r8;!position;g"