我正在反转使用Microsoft SQL Server(2005)的封闭源遗留应用程序,我想精确地找出在后台执行的查询。

我知道可以使用Wireshark来查看网络流量,但是感觉很笨拙,因此我正在寻找更专用的工具。

是否有一个类似于Firefox的Tamper Data的工具,但是可以查看MSSQL并可能编辑查询?

能够精确地查看应用程序执行的查询(包括blob等)。

非常有用的功能:


能够拦截查询执行并允许对值进行编辑


#1 楼

大多数数据库在运行时都非常友好地进行跟踪和分析。您只需要做很少的实际逆向工程。我相信有一个程序叫做SQL Server Profiler,它可以转储针对数据库执行的每个查询。如果您无权访问服务器,它将变得更加复杂。

如果您的应用程序使用ADO,则可以使用ADO的Statement跟踪器。一种更复杂的操作方式取决于您的应用程序使用哪种类型的数据库层。如果该层是基于COM的(OLE DB是),那么您有两个选择,要么深入到COM接口,要么创建一个COM代理。我可能只是简单地挂钩从各种OLE DB ICommandXXX接口派生的对象。

评论


+1(A)SQL Profiler是解决之道。请注意,MS SQL Server Profiler不包括在Express版本中,在这种情况下,您可能需要第三方工具(例如此工具)

–雷姆科
13年3月23日在10:08

如果您想自己挂接到SQL Server,您将拦截哪些导出函数以将查询视为字符串?正如jg0所说,您可以将查询作为整个协议的一部分进行嗅探。 SQLDK.dll,SQLLANG.dll和SQLMIN.DLL包含许多导出的函数,但尚不清楚如果挂钩到特定的函数,您可以找到原始查询作为字符串。有这种监视替代方法会很有趣。

– sw
13年3月25日在18:50



我不知道SQL Server实际导出的功能或其内部的详细信息。当涉及到诸如此类的问题时,我倾向于太懒惰,并且走最小阻力的道路。

–彼得·安德森(Peter Andersson)
13年3月26日在18:54

#2 楼

使用WireShark附带的TDS协议解码器没有任何问题,假设连接是通过WireShark可以嗅探的东西建立的。这是用于TDS的专用协议解码器,所以我不确定您的意思是:


我知道可以使用Wireshark查看
网络流量,但是感觉很笨拙,因此我正在寻找专门用于此目的的东西。也许最大的问题似乎是该项目现在已经成熟或被放弃。如果您想编写代理,则tdspool程序可能是您最好的起点。但是有可能您可以强迫jTDS做您想做的事情(从对源代码的随意阅读中,它似乎不像tdspool程序那样好的起点)。